xref: /aosp_15_r20/external/mesa3d/meson_to_hermetic/meson_common.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Workerimport os
2*61046927SAndroid Build Coastguard Workerimport warnings
3*61046927SAndroid Build Coastguard Workerimport meson_impl as impl
4*61046927SAndroid Build Coastguard Worker
5*61046927SAndroid Build Coastguard Worker_gArrayOptions = []
6*61046927SAndroid Build Coastguard Worker_gFeatureOptions = []
7*61046927SAndroid Build Coastguard Worker_gBooleanOptions = []
8*61046927SAndroid Build Coastguard Worker_gComboOptions = []
9*61046927SAndroid Build Coastguard Worker_gSimpleOptions = []
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker
12*61046927SAndroid Build Coastguard Workerdef noop():
13*61046927SAndroid Build Coastguard Worker    return
14*61046927SAndroid Build Coastguard Worker
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard Workerdef message(str):
17*61046927SAndroid Build Coastguard Worker    print(str)
18*61046927SAndroid Build Coastguard Worker
19*61046927SAndroid Build Coastguard Worker
20*61046927SAndroid Build Coastguard Workerdef error(message):
21*61046927SAndroid Build Coastguard Worker    exit(message)
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Workerdef warning(message):
25*61046927SAndroid Build Coastguard Worker    warnings.warn(message)
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Workerdef set_relative_dir(dir):
29*61046927SAndroid Build Coastguard Worker    impl.set_relative_dir(dir)
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Workerdef files(*filenames):
33*61046927SAndroid Build Coastguard Worker    file_list = []
34*61046927SAndroid Build Coastguard Worker    for file in filenames:
35*61046927SAndroid Build Coastguard Worker        file_list.append(impl.File(os.path.join(impl.get_relative_dir(), file)))
36*61046927SAndroid Build Coastguard Worker    return file_list
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Workerdef declare_dependency(
40*61046927SAndroid Build Coastguard Worker    compile_args=[],
41*61046927SAndroid Build Coastguard Worker    d_import_dirs=[],
42*61046927SAndroid Build Coastguard Worker    d_module_versions='',
43*61046927SAndroid Build Coastguard Worker    dependencies=[],
44*61046927SAndroid Build Coastguard Worker    extra_files=[],
45*61046927SAndroid Build Coastguard Worker    include_directories=[],
46*61046927SAndroid Build Coastguard Worker    link_args=[],
47*61046927SAndroid Build Coastguard Worker    link_whole=[],
48*61046927SAndroid Build Coastguard Worker    link_with=[],
49*61046927SAndroid Build Coastguard Worker    objects=[],
50*61046927SAndroid Build Coastguard Worker    sources=[],
51*61046927SAndroid Build Coastguard Worker    variables=[],
52*61046927SAndroid Build Coastguard Worker    version='',
53*61046927SAndroid Build Coastguard Worker):
54*61046927SAndroid Build Coastguard Worker    link_with = impl.get_linear_list([link_with])
55*61046927SAndroid Build Coastguard Worker    link_whole = impl.get_linear_list([link_whole])
56*61046927SAndroid Build Coastguard Worker
57*61046927SAndroid Build Coastguard Worker    return impl.Dependency(
58*61046927SAndroid Build Coastguard Worker        'declared',
59*61046927SAndroid Build Coastguard Worker        version,
60*61046927SAndroid Build Coastguard Worker        found=True,
61*61046927SAndroid Build Coastguard Worker        compile_args=compile_args,
62*61046927SAndroid Build Coastguard Worker        include_directories=include_directories,
63*61046927SAndroid Build Coastguard Worker        dependencies=dependencies,
64*61046927SAndroid Build Coastguard Worker        sources=sources,
65*61046927SAndroid Build Coastguard Worker        link_with=link_with,
66*61046927SAndroid Build Coastguard Worker        link_whole=link_whole,
67*61046927SAndroid Build Coastguard Worker    )
68*61046927SAndroid Build Coastguard Worker
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Workerdef find_program(name: str, required=False, native=False, disabler=False, version=''):
71*61046927SAndroid Build Coastguard Worker    if type(required) is impl.FeatureOption:
72*61046927SAndroid Build Coastguard Worker        required = required.state == impl.EnableState.ENABLED
73*61046927SAndroid Build Coastguard Worker    if type(required) is not bool:
74*61046927SAndroid Build Coastguard Worker        exit('Unhandled required type: ' + str(type(required)))
75*61046927SAndroid Build Coastguard Worker
76*61046927SAndroid Build Coastguard Worker    maybe_filename = impl.get_relative_dir(name)
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker    # may be a script in the current directory
79*61046927SAndroid Build Coastguard Worker    if os.path.isfile(maybe_filename):
80*61046927SAndroid Build Coastguard Worker        return impl.Program(maybe_filename, found=True)
81*61046927SAndroid Build Coastguard Worker
82*61046927SAndroid Build Coastguard Worker    # These are required for building turnip though not tagged as such
83*61046927SAndroid Build Coastguard Worker    if name == 'bison' or name == 'flex' or name == 'gzip':
84*61046927SAndroid Build Coastguard Worker        return impl.Program(name, found=True)
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker    if (
87*61046927SAndroid Build Coastguard Worker        name == 'byacc'
88*61046927SAndroid Build Coastguard Worker        or name == 'glslangValidator'
89*61046927SAndroid Build Coastguard Worker        or name == 'install_megadrivers.py'
90*61046927SAndroid Build Coastguard Worker        or name == 'nm'
91*61046927SAndroid Build Coastguard Worker        or name == 'python'
92*61046927SAndroid Build Coastguard Worker        or name == 'symbols-check.py'
93*61046927SAndroid Build Coastguard Worker        or name == 'sphinx-build'
94*61046927SAndroid Build Coastguard Worker    ):
95*61046927SAndroid Build Coastguard Worker        return impl.Program(name, found=required)
96*61046927SAndroid Build Coastguard Worker
97*61046927SAndroid Build Coastguard Worker    exit('Unhandled program check: ' + name)
98*61046927SAndroid Build Coastguard Worker
99*61046927SAndroid Build Coastguard Worker
100*61046927SAndroid Build Coastguard Workerdef add_project_arguments(args, language=[], native=False):
101*61046927SAndroid Build Coastguard Worker    impl.add_project_arguments(args, language, native)
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Workerdef add_project_link_arguments(args, language=[], native=False):
105*61046927SAndroid Build Coastguard Worker    return
106*61046927SAndroid Build Coastguard Worker
107*61046927SAndroid Build Coastguard Worker
108*61046927SAndroid Build Coastguard Worker# Used by meson_options.txt to define an option
109*61046927SAndroid Build Coastguard Workerdef option(
110*61046927SAndroid Build Coastguard Worker    name: str,
111*61046927SAndroid Build Coastguard Worker    type: str,
112*61046927SAndroid Build Coastguard Worker    min: int = 0,
113*61046927SAndroid Build Coastguard Worker    max: int = 0,
114*61046927SAndroid Build Coastguard Worker    value='',
115*61046927SAndroid Build Coastguard Worker    choices=[],
116*61046927SAndroid Build Coastguard Worker    description='',
117*61046927SAndroid Build Coastguard Worker    deprecated=None,
118*61046927SAndroid Build Coastguard Worker):
119*61046927SAndroid Build Coastguard Worker    if type == 'array':
120*61046927SAndroid Build Coastguard Worker        global _gArrayOptions
121*61046927SAndroid Build Coastguard Worker        _gArrayOptions.append(impl.ArrayOption(name, value))
122*61046927SAndroid Build Coastguard Worker        return
123*61046927SAndroid Build Coastguard Worker    if type == 'feature':
124*61046927SAndroid Build Coastguard Worker        global _gFeatureOptions
125*61046927SAndroid Build Coastguard Worker        if value == '' or value == 'auto':
126*61046927SAndroid Build Coastguard Worker            state = impl.EnableState.AUTO
127*61046927SAndroid Build Coastguard Worker        elif value == 'disabled':
128*61046927SAndroid Build Coastguard Worker            state = impl.EnableState.DISABLED
129*61046927SAndroid Build Coastguard Worker        elif value == 'enabled':
130*61046927SAndroid Build Coastguard Worker            state = impl.EnableState.ENABLED
131*61046927SAndroid Build Coastguard Worker        else:
132*61046927SAndroid Build Coastguard Worker            exit('Unhandled feature option value')
133*61046927SAndroid Build Coastguard Worker        _gFeatureOptions.append(impl.FeatureOption(name, state))
134*61046927SAndroid Build Coastguard Worker        return
135*61046927SAndroid Build Coastguard Worker    if type == 'boolean':
136*61046927SAndroid Build Coastguard Worker        global _gBooleanOptions
137*61046927SAndroid Build Coastguard Worker        if isinstance(value, str):
138*61046927SAndroid Build Coastguard Worker            flag = True if value.lower() == 'true' else False
139*61046927SAndroid Build Coastguard Worker            _gBooleanOptions.append(impl.BooleanOption(name, flag))
140*61046927SAndroid Build Coastguard Worker        else:
141*61046927SAndroid Build Coastguard Worker            _gBooleanOptions.append(impl.BooleanOption(name, value))
142*61046927SAndroid Build Coastguard Worker        return
143*61046927SAndroid Build Coastguard Worker    if type == 'combo':
144*61046927SAndroid Build Coastguard Worker        global _gComboOptions
145*61046927SAndroid Build Coastguard Worker        _gComboOptions.append(impl.ComboOption(name, value))
146*61046927SAndroid Build Coastguard Worker        return
147*61046927SAndroid Build Coastguard Worker    if type == 'string' or type == 'integer':
148*61046927SAndroid Build Coastguard Worker        global _gSimpleOptions
149*61046927SAndroid Build Coastguard Worker        _gSimpleOptions.append(impl.SimpleOption(name, value))
150*61046927SAndroid Build Coastguard Worker        return
151*61046927SAndroid Build Coastguard Worker
152*61046927SAndroid Build Coastguard Worker
153*61046927SAndroid Build Coastguard Workerdef set_option(name, value: str):
154*61046927SAndroid Build Coastguard Worker    print('set_option: %s=%s' % (name, value))
155*61046927SAndroid Build Coastguard Worker    for option in _gArrayOptions:
156*61046927SAndroid Build Coastguard Worker        if option.name == name:
157*61046927SAndroid Build Coastguard Worker            option.set(value)
158*61046927SAndroid Build Coastguard Worker
159*61046927SAndroid Build Coastguard Worker    for option in _gFeatureOptions:
160*61046927SAndroid Build Coastguard Worker        if option.name == name:
161*61046927SAndroid Build Coastguard Worker            option.set(value)
162*61046927SAndroid Build Coastguard Worker
163*61046927SAndroid Build Coastguard Worker    for option in _gBooleanOptions:
164*61046927SAndroid Build Coastguard Worker        if option.name == name:
165*61046927SAndroid Build Coastguard Worker            option.set(value)
166*61046927SAndroid Build Coastguard Worker
167*61046927SAndroid Build Coastguard Worker    for option in _gComboOptions:
168*61046927SAndroid Build Coastguard Worker        if option.name == name:
169*61046927SAndroid Build Coastguard Worker            option.set(value)
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker    for option in _gSimpleOptions:
172*61046927SAndroid Build Coastguard Worker        if option.name == name:
173*61046927SAndroid Build Coastguard Worker            option.set(value)
174*61046927SAndroid Build Coastguard Worker
175*61046927SAndroid Build Coastguard Worker    for option in impl.get_project_options():
176*61046927SAndroid Build Coastguard Worker        if option.name == name:
177*61046927SAndroid Build Coastguard Worker            option.set(value)
178*61046927SAndroid Build Coastguard Worker
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard Workerdef get_option(name):
181*61046927SAndroid Build Coastguard Worker    for option in _gArrayOptions:
182*61046927SAndroid Build Coastguard Worker        if option.name == name:
183*61046927SAndroid Build Coastguard Worker            return option.strings
184*61046927SAndroid Build Coastguard Worker
185*61046927SAndroid Build Coastguard Worker    for option in _gFeatureOptions:
186*61046927SAndroid Build Coastguard Worker        if option.name == name:
187*61046927SAndroid Build Coastguard Worker            return option
188*61046927SAndroid Build Coastguard Worker
189*61046927SAndroid Build Coastguard Worker    for option in _gBooleanOptions:
190*61046927SAndroid Build Coastguard Worker        if option.name == name:
191*61046927SAndroid Build Coastguard Worker            return option.value
192*61046927SAndroid Build Coastguard Worker
193*61046927SAndroid Build Coastguard Worker    for option in _gComboOptions:
194*61046927SAndroid Build Coastguard Worker        if option.name == name:
195*61046927SAndroid Build Coastguard Worker            return option.value
196*61046927SAndroid Build Coastguard Worker
197*61046927SAndroid Build Coastguard Worker    for option in _gSimpleOptions:
198*61046927SAndroid Build Coastguard Worker        if option.name == name:
199*61046927SAndroid Build Coastguard Worker            return option.value
200*61046927SAndroid Build Coastguard Worker
201*61046927SAndroid Build Coastguard Worker    for option in impl.get_project_options():
202*61046927SAndroid Build Coastguard Worker        if option.name == name:
203*61046927SAndroid Build Coastguard Worker            return option.value
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker    # built-in options
206*61046927SAndroid Build Coastguard Worker    if name == 'layout':
207*61046927SAndroid Build Coastguard Worker        return 'mirror'
208*61046927SAndroid Build Coastguard Worker    if name == 'prefix':
209*61046927SAndroid Build Coastguard Worker        return 'prefix'
210*61046927SAndroid Build Coastguard Worker    if name == 'libdir':
211*61046927SAndroid Build Coastguard Worker        return 'libdir'
212*61046927SAndroid Build Coastguard Worker    if name == 'datadir':
213*61046927SAndroid Build Coastguard Worker        return 'datadir'
214*61046927SAndroid Build Coastguard Worker    if name == 'sysconfdir':
215*61046927SAndroid Build Coastguard Worker        return 'sysconfdir'
216*61046927SAndroid Build Coastguard Worker    if name == 'includedir':
217*61046927SAndroid Build Coastguard Worker        return 'includedir'
218*61046927SAndroid Build Coastguard Worker    if name == 'c_args':
219*61046927SAndroid Build Coastguard Worker        return ''
220*61046927SAndroid Build Coastguard Worker    if name == 'cpp_rtti':
221*61046927SAndroid Build Coastguard Worker        return False
222*61046927SAndroid Build Coastguard Worker    if name == 'debug':
223*61046927SAndroid Build Coastguard Worker        return True
224*61046927SAndroid Build Coastguard Worker    if name == 'b_sanitize':
225*61046927SAndroid Build Coastguard Worker        return False
226*61046927SAndroid Build Coastguard Worker    if name == 'backend':
227*61046927SAndroid Build Coastguard Worker        return 'custom'
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker    exit('Unhandled option: ' + name)
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker
232*61046927SAndroid Build Coastguard Workerdef project(name, language_list, version, license, meson_version, default_options=[]):
233*61046927SAndroid Build Coastguard Worker    impl.project(name, language_list, version, license, meson_version, default_options)
234*61046927SAndroid Build Coastguard Worker
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard Workerdef run_command(program, *commands, check=False):
237*61046927SAndroid Build Coastguard Worker    return program.run_command(commands)
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker
240*61046927SAndroid Build Coastguard Workerdef environment():
241*61046927SAndroid Build Coastguard Worker    return impl.Environment()
242*61046927SAndroid Build Coastguard Worker
243*61046927SAndroid Build Coastguard Worker
244*61046927SAndroid Build Coastguard Workerdef join_paths(*paths):
245*61046927SAndroid Build Coastguard Worker    joined_path = ''
246*61046927SAndroid Build Coastguard Worker    for path in paths:
247*61046927SAndroid Build Coastguard Worker        joined_path = os.path.join(joined_path, path)
248*61046927SAndroid Build Coastguard Worker    return joined_path
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker
251*61046927SAndroid Build Coastguard Workerdef executable(
252*61046927SAndroid Build Coastguard Worker    target_name,
253*61046927SAndroid Build Coastguard Worker    *source,
254*61046927SAndroid Build Coastguard Worker    c_args=[],
255*61046927SAndroid Build Coastguard Worker    cpp_args=[],
256*61046927SAndroid Build Coastguard Worker    c_pch='',
257*61046927SAndroid Build Coastguard Worker    build_by_default=False,
258*61046927SAndroid Build Coastguard Worker    build_rpath='',
259*61046927SAndroid Build Coastguard Worker    d_debug=[],
260*61046927SAndroid Build Coastguard Worker    d_import_dirs=[],
261*61046927SAndroid Build Coastguard Worker    d_module_versions=[],
262*61046927SAndroid Build Coastguard Worker    d_unittest=False,
263*61046927SAndroid Build Coastguard Worker    dependencies=[],
264*61046927SAndroid Build Coastguard Worker    export_dynamic=False,
265*61046927SAndroid Build Coastguard Worker    extra_files='',
266*61046927SAndroid Build Coastguard Worker    gnu_symbol_visibility='',
267*61046927SAndroid Build Coastguard Worker    gui_app=False,
268*61046927SAndroid Build Coastguard Worker    implib=False,
269*61046927SAndroid Build Coastguard Worker    implicit_include_directories=False,
270*61046927SAndroid Build Coastguard Worker    include_directories=[],
271*61046927SAndroid Build Coastguard Worker    install=False,
272*61046927SAndroid Build Coastguard Worker    install_dir='',
273*61046927SAndroid Build Coastguard Worker    install_mode=[],
274*61046927SAndroid Build Coastguard Worker    install_rpath='',
275*61046927SAndroid Build Coastguard Worker    install_tag='',
276*61046927SAndroid Build Coastguard Worker    link_args=[],
277*61046927SAndroid Build Coastguard Worker    link_depends='',
278*61046927SAndroid Build Coastguard Worker    link_language='',
279*61046927SAndroid Build Coastguard Worker    link_whole=[],
280*61046927SAndroid Build Coastguard Worker    link_with=[],
281*61046927SAndroid Build Coastguard Worker    name_prefix='',
282*61046927SAndroid Build Coastguard Worker    name_suffix='',
283*61046927SAndroid Build Coastguard Worker    native=False,
284*61046927SAndroid Build Coastguard Worker    objects=[],
285*61046927SAndroid Build Coastguard Worker    override_options=[],
286*61046927SAndroid Build Coastguard Worker    pie=False,
287*61046927SAndroid Build Coastguard Worker    rust_crate_type='',
288*61046927SAndroid Build Coastguard Worker    rust_dependency_map={},
289*61046927SAndroid Build Coastguard Worker    sources='',
290*61046927SAndroid Build Coastguard Worker    vala_args=[],
291*61046927SAndroid Build Coastguard Worker    vs_module_defs='',
292*61046927SAndroid Build Coastguard Worker    win_subsystem='',
293*61046927SAndroid Build Coastguard Worker):
294*61046927SAndroid Build Coastguard Worker    return impl.Executable(target_name)
295*61046927SAndroid Build Coastguard Worker
296*61046927SAndroid Build Coastguard Worker
297*61046927SAndroid Build Coastguard Workerdef test(
298*61046927SAndroid Build Coastguard Worker    name,
299*61046927SAndroid Build Coastguard Worker    executable,
300*61046927SAndroid Build Coastguard Worker    args=[],
301*61046927SAndroid Build Coastguard Worker    depends=[],
302*61046927SAndroid Build Coastguard Worker    env=[],
303*61046927SAndroid Build Coastguard Worker    is_parallel=False,
304*61046927SAndroid Build Coastguard Worker    priority=0,
305*61046927SAndroid Build Coastguard Worker    protocol='',
306*61046927SAndroid Build Coastguard Worker    should_fail=False,
307*61046927SAndroid Build Coastguard Worker    suite='',
308*61046927SAndroid Build Coastguard Worker    timeout=0,
309*61046927SAndroid Build Coastguard Worker    verbose=False,
310*61046927SAndroid Build Coastguard Worker    workdir='',
311*61046927SAndroid Build Coastguard Worker):
312*61046927SAndroid Build Coastguard Worker    return
313*61046927SAndroid Build Coastguard Worker
314*61046927SAndroid Build Coastguard Worker
315*61046927SAndroid Build Coastguard Workerdef summary(entry, bool_yn=False, list_sep='', section=''):
316*61046927SAndroid Build Coastguard Worker    return
317*61046927SAndroid Build Coastguard Worker
318*61046927SAndroid Build Coastguard Worker
319*61046927SAndroid Build Coastguard Workerdef install_headers(*headers, subdir=''):
320*61046927SAndroid Build Coastguard Worker    return
321*61046927SAndroid Build Coastguard Worker
322*61046927SAndroid Build Coastguard Worker
323*61046927SAndroid Build Coastguard Workerdef install_data(
324*61046927SAndroid Build Coastguard Worker    *files,
325*61046927SAndroid Build Coastguard Worker    follow_symlinks=False,
326*61046927SAndroid Build Coastguard Worker    install_dir='',
327*61046927SAndroid Build Coastguard Worker    install_mode=[],
328*61046927SAndroid Build Coastguard Worker    install_tag='',
329*61046927SAndroid Build Coastguard Worker    preserve_path=False,
330*61046927SAndroid Build Coastguard Worker    rename=[],
331*61046927SAndroid Build Coastguard Worker    sources=[],
332*61046927SAndroid Build Coastguard Worker):
333*61046927SAndroid Build Coastguard Worker    return
334*61046927SAndroid Build Coastguard Worker
335*61046927SAndroid Build Coastguard Worker
336*61046927SAndroid Build Coastguard Workerdef subdir(dir_=''):
337*61046927SAndroid Build Coastguard Worker    return
338