xref: /aosp_15_r20/external/mesa3d/bin/gen_vs_module_defs.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*61046927SAndroid Build Coastguard Worker# Copyright © 2021-2021 Yonggang Luo
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy
5*61046927SAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to deal
6*61046927SAndroid Build Coastguard Worker# in the Software without restriction, including without limitation the rights
7*61046927SAndroid Build Coastguard Worker# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8*61046927SAndroid Build Coastguard Worker# copies of the Software, and to permit persons to whom the Software is
9*61046927SAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in
12*61046927SAndroid Build Coastguard Worker# all copies or substantial portions of the Software.
13*61046927SAndroid Build Coastguard Worker
14*61046927SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*61046927SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*61046927SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17*61046927SAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18*61046927SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19*61046927SAndroid Build Coastguard Worker# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20*61046927SAndroid Build Coastguard Worker# SOFTWARE.
21*61046927SAndroid Build Coastguard Worker
22*61046927SAndroid Build Coastguard Workergen_help = """Generates visual studio module definition file."""
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Workerimport argparse
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker"""
27*61046927SAndroid Build Coastguard WorkerFor input template definition file
28*61046927SAndroid Build Coastguard WorkerFor gcc/x64,gcc/arm64,visual studio
29*61046927SAndroid Build Coastguard Worker`wglMakeCurrent@8                     @357` => `wglMakeCurrent @357`
30*61046927SAndroid Build Coastguard Worker`DrvCopyContext@12` => `DrvCopyContext`
31*61046927SAndroid Build Coastguard Worker`stw_get_device` => `stw_get_device`
32*61046927SAndroid Build Coastguard WorkerFor gcc/x86,gcc/arm
33*61046927SAndroid Build Coastguard Worker`wglMakeCurrent@8                     @357` => `wglMakeCurrent@8 @357 == wglMakeCurrent`
34*61046927SAndroid Build Coastguard Worker`DrvCopyContext@12` => `DrvCopyContext@12 == DrvCopyContext`
35*61046927SAndroid Build Coastguard Worker`stw_get_device` => `stw_get_device`
36*61046927SAndroid Build Coastguard Worker
37*61046927SAndroid Build Coastguard Worker"""
38*61046927SAndroid Build Coastguard Workerdef gen_vs_module_def(in_file: str, out_file: str, compiler_abi: str, compiler_id: str, cpu_family: str) -> None:
39*61046927SAndroid Build Coastguard Worker    out_file_lines = ['EXPORTS']
40*61046927SAndroid Build Coastguard Worker    with open(in_file, 'r', encoding='utf-8') as f:
41*61046927SAndroid Build Coastguard Worker        lines = f.readlines()
42*61046927SAndroid Build Coastguard Worker        for line in lines:
43*61046927SAndroid Build Coastguard Worker            line = line.strip()
44*61046927SAndroid Build Coastguard Worker            tokens = line.split(';')
45*61046927SAndroid Build Coastguard Worker            if not tokens:
46*61046927SAndroid Build Coastguard Worker                continue
47*61046927SAndroid Build Coastguard Worker            def_infos = [x for x in tokens[0].split(' ') if len(x) > 0]
48*61046927SAndroid Build Coastguard Worker            if not def_infos:
49*61046927SAndroid Build Coastguard Worker                if line:
50*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('\t' + line)
51*61046927SAndroid Build Coastguard Worker                else:
52*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('')
53*61046927SAndroid Build Coastguard Worker                continue
54*61046927SAndroid Build Coastguard Worker            name_infos = def_infos[0].split('@')
55*61046927SAndroid Build Coastguard Worker            if not name_infos:
56*61046927SAndroid Build Coastguard Worker                out_file_lines.append('\t;' + line)
57*61046927SAndroid Build Coastguard Worker                continue
58*61046927SAndroid Build Coastguard Worker            order_info = '' if len(def_infos) <= 1 else def_infos[1]
59*61046927SAndroid Build Coastguard Worker            if def_infos[0] != name_infos[0] and \
60*61046927SAndroid Build Coastguard Worker                (compiler_abi == 'gcc' and compiler_id != 'clang') and (cpu_family not in {'x86_64', 'aarch64'}):
61*61046927SAndroid Build Coastguard Worker                if order_info:
62*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('\t' + def_infos[0] + ' ' + order_info + ' == ' + name_infos[0])
63*61046927SAndroid Build Coastguard Worker                else:
64*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('\t' + def_infos[0] + ' == ' + name_infos[0])
65*61046927SAndroid Build Coastguard Worker            else:
66*61046927SAndroid Build Coastguard Worker                if order_info:
67*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('\t' + name_infos[0] + ' ' + order_info)
68*61046927SAndroid Build Coastguard Worker                else:
69*61046927SAndroid Build Coastguard Worker                    out_file_lines.append('\t' + name_infos[0])
70*61046927SAndroid Build Coastguard Worker    with open(out_file, 'wb') as f:
71*61046927SAndroid Build Coastguard Worker        out_file_content = '\n'.join(out_file_lines) + '\n'
72*61046927SAndroid Build Coastguard Worker        f.write(out_file_content.encode('utf-8'))
73*61046927SAndroid Build Coastguard Worker'''
74*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/libgl-gdi/opengl32.def.in --out_file src/gallium/targets/libgl-gdi/opengl32.def --compiler_abi gcc --cpu_family x86_64
75*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/libgl-gdi/opengl32.def.in --out_file src/gallium/targets/libgl-gdi/opengl32.mingw.def --compiler_abi gcc --cpu_family x86
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/osmesa/osmesa.def.in --out_file src/gallium/targets/osmesa/osmesa.def --compiler_abi gcc --cpu_family x86_64
78*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/osmesa/osmesa.def.in --out_file src/gallium/targets/osmesa/osmesa.mingw.def --compiler_abi gcc --cpu_family x86
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/wgl/gallium_wgl.def.in --out_file src/gallium/targets/wgl/gallium_wgl.def --compiler_abi gcc --cpu_family x86_64
81*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/wgl/gallium_wgl.def.in --out_file src/gallium/targets/wgl/gallium_wgl.mingw.def --compiler_abi gcc --cpu_family x86
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/egl/main/egl.def.in --out_file src/egl/main/egl.def --compiler_abi gcc --cpu_family x86_64
84*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/egl/main/egl.def.in --out_file src/egl/main/egl.mingw.def --compiler_abi gcc --cpu_family x86
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/lavapipe/vulkan_lvp.def.in --out_file src/gallium/targets/lavapipe/vulkan_lvp.def --compiler_abi gcc --cpu_family x86_64
87*61046927SAndroid Build Coastguard Workerpython ./bin/gen_vs_module_defs.py --in_file src/gallium/targets/lavapipe/vulkan_lvp.def.in --out_file src/gallium/targets/lavapipe/vulkan_lvp.mingw.def --compiler_abi gcc --cpu_family x86
88*61046927SAndroid Build Coastguard Worker
89*61046927SAndroid Build Coastguard Worker'''
90*61046927SAndroid Build Coastguard Workerif __name__ == "__main__":
91*61046927SAndroid Build Coastguard Worker    parser = argparse.ArgumentParser(description=gen_help)
92*61046927SAndroid Build Coastguard Worker    parser.add_argument('--in_file', help='input template module definition file')
93*61046927SAndroid Build Coastguard Worker    parser.add_argument('--out_file', help='output module definition file')
94*61046927SAndroid Build Coastguard Worker    parser.add_argument('--compiler_abi', help='compiler abi')
95*61046927SAndroid Build Coastguard Worker    parser.add_argument('--compiler_id', help='compiler id')
96*61046927SAndroid Build Coastguard Worker    parser.add_argument('--cpu_family', help='cpu family')
97*61046927SAndroid Build Coastguard Worker    args = parser.parse_args()
98*61046927SAndroid Build Coastguard Worker    # print(args)
99*61046927SAndroid Build Coastguard Worker    gen_vs_module_def(args.in_file, args.out_file, args.compiler_abi, args.compiler_id, args.cpu_family)
100