diff options
Diffstat (limited to 'scripts/gen_headers.py')
-rw-r--r-- | scripts/gen_headers.py | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/scripts/gen_headers.py b/scripts/gen_headers.py new file mode 100644 index 0000000..4bfaa0e --- /dev/null +++ b/scripts/gen_headers.py @@ -0,0 +1,240 @@ +#!/usr/bin/python3 + +# Copyright (c) 2021 The Khronos Group Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import gen +import re + +from mako.template import Template +from mako.exceptions import RichTraceback + +from collections import OrderedDict +from collections import namedtuple + +def getDisableWarningIncludeString(include): + warningPush = """#if defined(_MSC_VER) +#if _MSC_VER >=1500 +#pragma warning( push ) +#pragma warning( disable : 4201 ) +#pragma warning( disable : 5105 ) +#endif +#endif +""" + warningPop = """ +#if defined(_MSC_VER) +#if _MSC_VER >=1500 +#pragma warning( pop ) +#endif +#endif""" + return warningPush + include + warningPop + +def getWin32OnlyIncludeString(include): + return """#if defined(_WIN32) +""" + include + """ +#endif""" + +if __name__ == "__main__": + args = gen.parse_args() + spec = gen.load_spec(args) + + typedefs = gen.get_apitypedefs(spec) + macros = gen.get_apimacros(spec) + structs = gen.get_apistructs(spec) + enums = gen.get_apienums(spec) + apisigs = gen.get_apisigs(spec) + + coreapis = gen.get_coreapis(spec, apisigs) + extapis = gen.get_extapis(spec, apisigs) + + try: + cl_ext_h_template = Template(filename='cl_ext.h.mako', input_encoding='utf-8') + cl_function_types_h_template = Template(filename='cl_function_types.h.mako', input_encoding='utf-8') + + print('Generating cl_dx9_media_sharing.h...') + text = cl_ext_h_template.render( + genExtensions={ + 'cl_khr_dx9_media_sharing', + 'cl_intel_dx9_media_sharing', + 'cl_intel_sharing_format_query_dx9', + }, + guard="OPENCL_CL_DX9_MEDIA_SHARING_H_", + includes=getWin32OnlyIncludeString(getDisableWarningIncludeString("#include <d3d9.h>")), + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_dx9_media_sharing.h', 'w') as gen: + gen.write(text) + + print('Generating cl_d3d10.h...') + text = cl_ext_h_template.render( + genExtensions={ + 'cl_khr_d3d10_sharing', + 'cl_intel_sharing_format_query_d3d10', + }, + guard="OPENCL_CL_D3D10_H_", + includes=getDisableWarningIncludeString("#include <d3d10.h>"), + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_d3d10.h', 'w') as gen: + gen.write(text) + + print('Generating cl_d3d11.h...') + text = cl_ext_h_template.render( + genExtensions={ + 'cl_khr_d3d11_sharing', + 'cl_intel_sharing_format_query_d3d11' + }, + guard="OPENCL_CL_D3D11_H_", + includes=getDisableWarningIncludeString("#include <d3d11.h>"), + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_d3d11.h', 'w') as gen: + gen.write(text) + + print('Generating cl_egl.h...') + text = cl_ext_h_template.render( + genExtensions={'cl_khr_egl_event', 'cl_khr_egl_image'}, + guard="OPENCL_CL_EGL_H_", + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_egl.h', 'w') as gen: + gen.write(text) + + print('Generating cl_gl.h...') + text = cl_ext_h_template.render( + genExtensions={ + 'cl_khr_gl_depth_images', + 'cl_khr_gl_event', + 'cl_khr_gl_msaa_sharing', + 'cl_khr_gl_sharing', + 'cl_intel_sharing_format_query_gl', + }, + guard="OPENCL_CL_GL_H_", + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_gl.h', 'w') as gen: + gen.write(text) + + print('Generating cl_layer.h...') + text = cl_ext_h_template.render( + genExtensions={'cl_loader_layers'}, + guard="OPENCL_CL_LAYER_H_", + includes='#include <CL/cl_icd.h>', + generate_pfn_typedefs=True, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_layer.h', 'w') as gen: + gen.write(text) + + print('Generating cl_va_api_media_sharing_intel.h...') + text = cl_ext_h_template.render( + genExtensions={ + 'cl_intel_va_api_media_sharing', + 'cl_intel_sharing_format_query_va_api', + }, + guard="OPENCL_CL_VA_API_MEDIA_SHARING_INTEL_H_", + includes='#include <va/va.h>', + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_va_api_media_sharing_intel.h', 'w') as gen: + gen.write(text) + + print('Generating cl_ext.h...') + text = cl_ext_h_template.render( + genExtensions={}, + guard="OPENCL_CL_EXT_H_", + generate_pfn_typedefs=False, + spec=spec, + typedefs=typedefs, + macros=macros, + structs=structs, + enums=enums, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_ext.h', 'w') as gen: + gen.write(text) + + print('Generating cl_function_types.h...') + text = cl_function_types_h_template.render( + spec=spec, + apisigs=apisigs, + coreapis=coreapis, + extapis=extapis) + text = re.sub(r'\r\n', r'\n', text) + with open(args.directory + '/cl_function_types.h', 'w') as gen: + gen.write(text) + + except: + traceback = RichTraceback() + for (filename, lineno, function, line) in traceback.traceback: + print('%s(%s) : error in %s' % (filename, lineno, function)) + print(' ', line) + print('%s: %s' % (str(traceback.error.__class__.__name__), traceback.error)) |