1 | #
|
---|
2 | # Copyright (c) 2019 Jiří Zárevúcky
|
---|
3 | # All rights reserved.
|
---|
4 | #
|
---|
5 | # Redistribution and use in source and binary forms, with or without
|
---|
6 | # modification, are permitted provided that the following conditions
|
---|
7 | # are met:
|
---|
8 | #
|
---|
9 | # - Redistributions of source code must retain the above copyright
|
---|
10 | # notice, this list of conditions and the following disclaimer.
|
---|
11 | # - Redistributions in binary form must reproduce the above copyright
|
---|
12 | # notice, this list of conditions and the following disclaimer in the
|
---|
13 | # documentation and/or other materials provided with the distribution.
|
---|
14 | # - The name of the author may not be used to endorse or promote products
|
---|
15 | # derived from this software without specific prior written permission.
|
---|
16 | #
|
---|
17 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
---|
18 | # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
---|
19 | # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
---|
20 | # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
---|
21 | # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
---|
22 | # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
---|
23 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
---|
24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
---|
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
---|
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
---|
27 | #
|
---|
28 |
|
---|
29 | # Read variables from config file generated by config.py,
|
---|
30 | # and version information from repository.
|
---|
31 |
|
---|
32 | # Workaround for current Meson (0.51.1) not producing dependency
|
---|
33 | # on files outside source dir when just files() is used.
|
---|
34 | _config_file = configure_file(
|
---|
35 | input: meson.build_root() / 'Makefile.config',
|
---|
36 | output: 'Makefile.config',
|
---|
37 | copy: true,
|
---|
38 | )
|
---|
39 |
|
---|
40 | _version_file = files(meson.source_root() / 'version')
|
---|
41 |
|
---|
42 | _config_variables = [
|
---|
43 | # Uspace and kernel
|
---|
44 | 'CONFIG_BAREBONE',
|
---|
45 | 'CONFIG_BUILD_SHARED_LIBS',
|
---|
46 | 'CONFIG_DEBUG',
|
---|
47 | 'CONFIG_DEVEL_FILES',
|
---|
48 | 'CONFIG_FPU',
|
---|
49 | 'CONFIG_LINE_DEBUG',
|
---|
50 | 'CONFIG_LTO',
|
---|
51 | 'CONFIG_PCUT_SELF_TESTS',
|
---|
52 | 'CONFIG_PCUT_TESTS',
|
---|
53 | 'CONFIG_RTLD',
|
---|
54 | 'CONFIG_STRIP_BINARIES',
|
---|
55 | 'CONFIG_UBSAN',
|
---|
56 | 'CONFIG_USE_SHARED_LIBS',
|
---|
57 | 'CROSS_TARGET',
|
---|
58 | 'MACHINE',
|
---|
59 | 'OPTIMIZATION',
|
---|
60 | 'PLATFORM',
|
---|
61 | 'PROCESSOR',
|
---|
62 | 'QUADFLOAT',
|
---|
63 | 'RDFMT',
|
---|
64 |
|
---|
65 | # Kernel only
|
---|
66 | 'CONFIG_ACPI',
|
---|
67 | 'CONFIG_AM335X_TIMERS',
|
---|
68 | 'CONFIG_ASID',
|
---|
69 | 'CONFIG_ASID_FIFO',
|
---|
70 | 'CONFIG_AT_KBD',
|
---|
71 | 'CONFIG_BCM2835_MAILBOX',
|
---|
72 | 'CONFIG_DSRLNIN',
|
---|
73 | 'CONFIG_DSRLNOUT',
|
---|
74 | 'CONFIG_EGA',
|
---|
75 | 'CONFIG_FB',
|
---|
76 | 'CONFIG_GICV2',
|
---|
77 | 'CONFIG_I8042',
|
---|
78 | 'CONFIG_I8259',
|
---|
79 | 'CONFIG_IOMAP_BITMAP',
|
---|
80 | 'CONFIG_IOMAP_DUMMY',
|
---|
81 | 'CONFIG_KCONSOLE',
|
---|
82 | 'CONFIG_MAC_KBD',
|
---|
83 | 'CONFIG_MULTIBOOT',
|
---|
84 | 'CONFIG_NS16550',
|
---|
85 | 'CONFIG_OFW_PCI',
|
---|
86 | 'CONFIG_OFW_TREE',
|
---|
87 | 'CONFIG_OMAP_UART',
|
---|
88 | 'CONFIG_PAGE_HT',
|
---|
89 | 'CONFIG_PAGE_PT',
|
---|
90 | 'CONFIG_PC_KBD',
|
---|
91 | 'CONFIG_PL011_UART',
|
---|
92 | 'CONFIG_PL050',
|
---|
93 | 'CONFIG_S3C24XX_IRQC',
|
---|
94 | 'CONFIG_S3C24XX_UART',
|
---|
95 | 'CONFIG_SMP',
|
---|
96 | 'CONFIG_SOFTINT',
|
---|
97 | 'CONFIG_SRLN',
|
---|
98 | 'CONFIG_SUN_KBD',
|
---|
99 | 'CONFIG_SYMTAB',
|
---|
100 | 'CONFIG_TEST',
|
---|
101 | 'CONFIG_TRACE',
|
---|
102 | 'CONFIG_TSB',
|
---|
103 | 'CONFIG_UDEBUG',
|
---|
104 | 'CONFIG_VIA_CUDA',
|
---|
105 | 'MEMORY_MODEL',
|
---|
106 |
|
---|
107 | 'UARCH',
|
---|
108 | 'KARCH',
|
---|
109 | 'BARCH',
|
---|
110 | 'GRUB_ARCH',
|
---|
111 | 'UIMAGE_OS',
|
---|
112 | 'CONFIG_COMPRESSED_INIT',
|
---|
113 | ]
|
---|
114 |
|
---|
115 | foreach _varname : _config_variables
|
---|
116 | _c = run_command(grep, '^' + _varname + '\\b', _config_file)
|
---|
117 | if _c.returncode() != 0
|
---|
118 | # TODO: Output negative/inapplicable variables too in config, so that we can check for typos here.
|
---|
119 | #warning('Missing configuration variable ' + _varname + ' in Makefile.config')
|
---|
120 | set_variable(_varname, false)
|
---|
121 | continue
|
---|
122 | endif
|
---|
123 |
|
---|
124 | _val = _c.stdout().split('\n')[0].strip().split('=')[1].strip()
|
---|
125 | if _val == 'y'
|
---|
126 | _val = true
|
---|
127 | elif _val == 'n'
|
---|
128 | _val = false
|
---|
129 | endif
|
---|
130 |
|
---|
131 | set_variable(_varname, _val)
|
---|
132 | if debug_options
|
---|
133 | message([ _varname, get_variable(_varname) ])
|
---|
134 | endif
|
---|
135 | endforeach
|
---|
136 |
|
---|
137 | # Also read version information.
|
---|
138 | _version_variables = [
|
---|
139 | 'HELENOS_COPYRIGHT',
|
---|
140 | 'HELENOS_CODENAME',
|
---|
141 | 'HELENOS_RELEASE',
|
---|
142 | ]
|
---|
143 |
|
---|
144 | foreach _varname : _version_variables
|
---|
145 | _line = run_command(grep, '^' + _varname + '\\b', _version_file, check: true).stdout().strip()
|
---|
146 | _val = _line.split('=')[1].strip()
|
---|
147 |
|
---|
148 | set_variable(_varname, _val)
|
---|
149 | if debug_options
|
---|
150 | message([ _varname, get_variable(_varname) ])
|
---|
151 | endif
|
---|
152 | endforeach
|
---|
153 |
|
---|
154 | # Check whether PLATFORM/MACHINE is unchanged
|
---|
155 |
|
---|
156 | _profile = '@0@/@1@'.format(PLATFORM, MACHINE)
|
---|
157 | _profile_file = meson.build_root() / 'prev_profile'
|
---|
158 |
|
---|
159 | _cmd = run_command('cat', _profile_file)
|
---|
160 | if _cmd.returncode() == 0
|
---|
161 | _prev_profile = _cmd.stdout().strip()
|
---|
162 |
|
---|
163 | if _prev_profile != _profile
|
---|
164 | error('This build directory was initially configured for ' + _prev_profile +
|
---|
165 | ', but now is configured for ' + _profile + '. This is not supported.')
|
---|
166 | endif
|
---|
167 | else
|
---|
168 | run_command('sh', '-c', 'echo "' + _profile + '" > ' + _profile_file, check: true)
|
---|
169 | endif
|
---|