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