Esempio n. 1
0
    def get_file_renders(self, args):
        supported_extensions = []
        with open(args.supported_extensions) as f:
            supported_extensions_json = json.loads(f.read())
            supported_extensions = supported_extensions_json[
                'supported_extensions']

        params = compute_params(
            etree.parse(args.gl_xml).getroot(), supported_extensions)

        return [
            FileRender('opengl/OpenGLFunctionsBase.cpp',
                       'dawn_native/opengl/OpenGLFunctionsBase_autogen.cpp',
                       [params]),
            FileRender('opengl/OpenGLFunctionsBase.h',
                       'dawn_native/opengl/OpenGLFunctionsBase_autogen.h',
                       [params]),
            FileRender('opengl/opengl_platform.h',
                       'dawn_native/opengl/opengl_platform_autogen.h',
                       [params]),
        ]
Esempio n. 2
0
    def get_file_renders(self, args):
        with open(args.dawn_json) as f:
            loaded_json = json.loads(f.read())
        api_params = parse_json(loaded_json)

        targets = args.targets.split(',')

        wire_json = None
        if args.wire_json:
            with open(args.wire_json) as f:
                wire_json = json.loads(f.read())

        base_params = {
            'Name': lambda name: Name(name),

            'as_annotated_cType': lambda arg: annotated(as_cTypeEnumSpecialCase(arg.type), arg),
            'as_annotated_cppType': lambda arg: annotated(as_cppType(arg.type.name), arg),
            'as_cEnum': as_cEnum,
            'as_cEnumDawn': as_cEnumDawn,
            'as_cppEnum': as_cppEnum,
            'as_cMethod': as_cMethod,
            'as_cMethodDawn': as_cMethodDawn,
            'as_MethodSuffix': as_MethodSuffix,
            'as_cProc': as_cProc,
            'as_cProcDawn': as_cProcDawn,
            'as_cType': as_cType,
            'as_cTypeDawn': as_cTypeDawn,
            'as_cppType': as_cppType,
            'convert_cType_to_cppType': convert_cType_to_cppType,
            'as_varName': as_varName,
            'decorate': decorate,
            'c_methods': lambda typ: c_methods(api_params['types'], typ),
            'c_methods_sorted_by_name': get_c_methods_sorted_by_name(api_params),
        }

        renders = []

        if 'dawn_headers' in targets:
            renders.append(FileRender('webgpu.h', 'src/include/dawn/webgpu.h', [base_params, api_params]))
            renders.append(FileRender('dawn_proc_table.h', 'src/include/dawn/dawn_proc_table.h', [base_params, api_params]))

        if 'dawncpp_headers' in targets:
            renders.append(FileRender('webgpu_cpp.h', 'src/include/dawn/webgpu_cpp.h', [base_params, api_params]))

        if 'dawn_proc' in targets:
            renders.append(FileRender('dawn_proc.c', 'src/dawn/dawn_proc.c', [base_params, api_params]))

        if 'dawncpp' in targets:
            renders.append(FileRender('webgpu_cpp.cpp', 'src/dawn/webgpu_cpp.cpp', [base_params, api_params]))

        if 'mock_webgpu' in targets:
            mock_params = [
                base_params,
                api_params,
                {
                    'has_callback_arguments': has_callback_arguments
                }
            ]
            renders.append(FileRender('mock_webgpu.h', 'src/dawn/mock_webgpu.h', mock_params))
            renders.append(FileRender('mock_webgpu.cpp', 'src/dawn/mock_webgpu.cpp', mock_params))

        if 'dawn_native_utils' in targets:
            frontend_params = [
                base_params,
                api_params,
                {
                    'as_frontendType': lambda typ: as_frontendType(typ), # TODO as_frontendType and friends take a Type and not a Name :(
                    'as_annotated_frontendType': lambda arg: annotated(as_frontendType(arg.type), arg)
                }
            ]

            renders.append(FileRender('dawn_native/ValidationUtils.h', 'src/dawn_native/ValidationUtils_autogen.h', frontend_params))
            renders.append(FileRender('dawn_native/ValidationUtils.cpp', 'src/dawn_native/ValidationUtils_autogen.cpp', frontend_params))
            renders.append(FileRender('dawn_native/wgpu_structs.h', 'src/dawn_native/wgpu_structs_autogen.h', frontend_params))
            renders.append(FileRender('dawn_native/wgpu_structs.cpp', 'src/dawn_native/wgpu_structs_autogen.cpp', frontend_params))
            renders.append(FileRender('dawn_native/ProcTable.cpp', 'src/dawn_native/ProcTable.cpp', frontend_params))

        if 'dawn_wire' in targets:
            additional_params = compute_wire_params(api_params, wire_json)

            wire_params = [
                base_params,
                api_params,
                {
                    'as_wireType': as_wireType,
                    'as_annotated_wireType': lambda arg: annotated(as_wireType(arg.type), arg),
                },
                additional_params
            ]
            renders.append(FileRender('dawn_wire/WireCmd.h', 'src/dawn_wire/WireCmd_autogen.h', wire_params))
            renders.append(FileRender('dawn_wire/WireCmd.cpp', 'src/dawn_wire/WireCmd_autogen.cpp', wire_params))
            renders.append(FileRender('dawn_wire/client/ApiObjects.h', 'src/dawn_wire/client/ApiObjects_autogen.h', wire_params))
            renders.append(FileRender('dawn_wire/client/ApiProcs.cpp', 'src/dawn_wire/client/ApiProcs_autogen.cpp', wire_params))
            renders.append(FileRender('dawn_wire/client/ApiProcs.h', 'src/dawn_wire/client/ApiProcs_autogen.h', wire_params))
            renders.append(FileRender('dawn_wire/client/ClientBase.h', 'src/dawn_wire/client/ClientBase_autogen.h', wire_params))
            renders.append(FileRender('dawn_wire/client/ClientHandlers.cpp', 'src/dawn_wire/client/ClientHandlers_autogen.cpp', wire_params))
            renders.append(FileRender('dawn_wire/client/ClientPrototypes.inc', 'src/dawn_wire/client/ClientPrototypes_autogen.inc', wire_params))
            renders.append(FileRender('dawn_wire/server/ServerBase.h', 'src/dawn_wire/server/ServerBase_autogen.h', wire_params))
            renders.append(FileRender('dawn_wire/server/ServerDoers.cpp', 'src/dawn_wire/server/ServerDoers_autogen.cpp', wire_params))
            renders.append(FileRender('dawn_wire/server/ServerHandlers.cpp', 'src/dawn_wire/server/ServerHandlers_autogen.cpp', wire_params))
            renders.append(FileRender('dawn_wire/server/ServerPrototypes.inc', 'src/dawn_wire/server/ServerPrototypes_autogen.inc', wire_params))

        return renders
    def get_file_renders(self, args):
        with open(args.dawn_json) as f:
            loaded_json = json.loads(f.read())

        targets = args.targets.split(',')

        wire_json = None
        if args.wire_json:
            with open(args.wire_json) as f:
                wire_json = json.loads(f.read())

        renders = []

        params_dawn = parse_json(loaded_json,
                                 enabled_tags=['dawn', 'native', 'deprecated'])
        metadata = params_dawn['metadata']
        RENDER_PARAMS_BASE = make_base_render_params(metadata)

        api = metadata.api.lower()
        prefix = metadata.proc_table_prefix.lower()
        if 'dawn_headers' in targets:
            renders.append(
                FileRender('api.h', 'src/include/dawn/' + api + '.h',
                           [RENDER_PARAMS_BASE, params_dawn]))
            renders.append(
                FileRender('dawn_proc_table.h',
                           'src/include/dawn/' + prefix + '_proc_table.h',
                           [RENDER_PARAMS_BASE, params_dawn]))

        if 'dawncpp_headers' in targets:
            renders.append(
                FileRender('api_cpp.h', 'src/include/dawn/' + api + '_cpp.h',
                           [RENDER_PARAMS_BASE, params_dawn]))

            renders.append(
                FileRender('api_cpp_print.h',
                           'src/include/dawn/' + api + '_cpp_print.h',
                           [RENDER_PARAMS_BASE, params_dawn]))

        if 'dawn_proc' in targets:
            renders.append(
                FileRender('dawn_proc.c', 'src/dawn/' + prefix + '_proc.c',
                           [RENDER_PARAMS_BASE, params_dawn]))
            renders.append(
                FileRender('dawn_thread_dispatch_proc.cpp',
                           'src/dawn/' + prefix + '_thread_dispatch_proc.cpp',
                           [RENDER_PARAMS_BASE, params_dawn]))

        if 'webgpu_dawn_native_proc' in targets:
            renders.append(
                FileRender('dawn_native/api_dawn_native_proc.cpp',
                           'src/dawn_native/webgpu_dawn_native_proc.cpp',
                           [RENDER_PARAMS_BASE, params_dawn]))

        if 'dawncpp' in targets:
            renders.append(
                FileRender('api_cpp.cpp', 'src/dawn/' + api + '_cpp.cpp',
                           [RENDER_PARAMS_BASE, params_dawn]))

        if 'webgpu_headers' in targets:
            params_upstream = parse_json(loaded_json,
                                         enabled_tags=['upstream', 'native'])
            renders.append(
                FileRender('api.h', 'webgpu-headers/' + api + '.h',
                           [RENDER_PARAMS_BASE, params_upstream]))

        if 'emscripten_bits' in targets:
            params_emscripten = parse_json(
                loaded_json, enabled_tags=['upstream', 'emscripten'])
            renders.append(
                FileRender('api.h', 'emscripten-bits/' + api + '.h',
                           [RENDER_PARAMS_BASE, params_emscripten]))
            renders.append(
                FileRender('api_cpp.h', 'emscripten-bits/' + api + '_cpp.h',
                           [RENDER_PARAMS_BASE, params_emscripten]))
            renders.append(
                FileRender('api_cpp.cpp',
                           'emscripten-bits/' + api + '_cpp.cpp',
                           [RENDER_PARAMS_BASE, params_emscripten]))
            renders.append(
                FileRender('api_struct_info.json',
                           'emscripten-bits/' + api + '_struct_info.json',
                           [RENDER_PARAMS_BASE, params_emscripten]))
            renders.append(
                FileRender(
                    'library_api_enum_tables.js',
                    'emscripten-bits/library_' + api + '_enum_tables.js',
                    [RENDER_PARAMS_BASE, params_emscripten]))

        if 'mock_api' in targets:
            mock_params = [
                RENDER_PARAMS_BASE, params_dawn, {
                    'has_callback_arguments': has_callback_arguments
                }
            ]
            renders.append(
                FileRender('mock_api.h', 'src/dawn/mock_' + api + '.h',
                           mock_params))
            renders.append(
                FileRender('mock_api.cpp', 'src/dawn/mock_' + api + '.cpp',
                           mock_params))

        if 'dawn_native_utils' in targets:
            frontend_params = [
                RENDER_PARAMS_BASE,
                params_dawn,
                {
                    # TODO: as_frontendType and co. take a Type, not a Name :(
                    'as_frontendType': lambda typ: as_frontendType(metadata, typ),
                    'as_annotated_frontendType': \
                        lambda arg: annotated(as_frontendType(metadata, arg.type), arg),
                }
            ]

            impl_dir = metadata.impl_dir + '/' if metadata.impl_dir else ''
            native_dir = impl_dir + Name(
                metadata.native_namespace).snake_case()
            namespace = metadata.namespace
            renders.append(
                FileRender('dawn_native/ValidationUtils.h',
                           'src/' + native_dir + '/ValidationUtils_autogen.h',
                           frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/ValidationUtils.cpp',
                    'src/' + native_dir + '/ValidationUtils_autogen.cpp',
                    frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/dawn_platform.h',
                    'src/' + native_dir + '/' + prefix + '_platform_autogen.h',
                    frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/api_structs.h', 'src/' + native_dir + '/' +
                    namespace + '_structs_autogen.h', frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/api_structs.cpp', 'src/' + native_dir + '/' +
                    namespace + '_structs_autogen.cpp', frontend_params))
            renders.append(
                FileRender('dawn_native/ProcTable.cpp',
                           'src/' + native_dir + '/ProcTable.cpp',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/ChainUtils.h',
                           'src/' + native_dir + '/ChainUtils_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/ChainUtils.cpp',
                           'src/' + native_dir + '/ChainUtils_autogen.cpp',
                           frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/api_absl_format.h',
                    'src/' + native_dir + '/' + api + '_absl_format_autogen.h',
                    frontend_params))
            renders.append(
                FileRender(
                    'dawn_native/api_absl_format.cpp', 'src/' + native_dir +
                    '/' + api + '_absl_format_autogen.cpp', frontend_params))
            renders.append(
                FileRender('dawn_native/ObjectType.h',
                           'src/' + native_dir + '/ObjectType_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/ObjectType.cpp',
                           'src/' + native_dir + '/ObjectType_autogen.cpp',
                           frontend_params))

        if 'dawn_wire' in targets:
            additional_params = compute_wire_params(params_dawn, wire_json)

            wire_params = [
                RENDER_PARAMS_BASE, params_dawn, {
                    'as_wireType': lambda type : as_wireType(metadata, type),
                    'as_annotated_wireType': \
                        lambda arg: annotated(as_wireType(metadata, arg.type), arg),
                }, additional_params
            ]
            renders.append(
                FileRender('dawn_wire/ObjectType.h',
                           'src/dawn_wire/ObjectType_autogen.h', wire_params))
            renders.append(
                FileRender('dawn_wire/WireCmd.h',
                           'src/dawn_wire/WireCmd_autogen.h', wire_params))
            renders.append(
                FileRender('dawn_wire/WireCmd.cpp',
                           'src/dawn_wire/WireCmd_autogen.cpp', wire_params))
            renders.append(
                FileRender('dawn_wire/client/ApiObjects.h',
                           'src/dawn_wire/client/ApiObjects_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ApiProcs.cpp',
                           'src/dawn_wire/client/ApiProcs_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ClientBase.h',
                           'src/dawn_wire/client/ClientBase_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ClientHandlers.cpp',
                           'src/dawn_wire/client/ClientHandlers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender(
                    'dawn_wire/client/ClientPrototypes.inc',
                    'src/dawn_wire/client/ClientPrototypes_autogen.inc',
                    wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerBase.h',
                           'src/dawn_wire/server/ServerBase_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerDoers.cpp',
                           'src/dawn_wire/server/ServerDoers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerHandlers.cpp',
                           'src/dawn_wire/server/ServerHandlers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender(
                    'dawn_wire/server/ServerPrototypes.inc',
                    'src/dawn_wire/server/ServerPrototypes_autogen.inc',
                    wire_params))

        return renders
Esempio n. 4
0
    def get_file_renders(self, args):
        with open(args.dawn_json) as f:
            loaded_json = json.loads(f.read())
        api_params = parse_json(loaded_json)

        targets = args.targets.split(',')

        wire_json = None
        if args.wire_json:
            with open(args.wire_json) as f:
                wire_json = json.loads(f.read())

        base_params = {
            'Name':
            lambda name: Name(name),
            'as_annotated_cType':
            lambda arg: annotated(as_cType(arg.type.name), arg),
            'as_annotated_cppType':
            lambda arg: annotated(as_cppType(arg.type.name), arg),
            'as_cEnum':
            as_cEnum,
            'as_cppEnum':
            as_cppEnum,
            'as_cMethod':
            as_cMethod,
            'as_MethodSuffix':
            as_MethodSuffix,
            'as_cProc':
            as_cProc,
            'as_cType':
            as_cType,
            'as_cppType':
            as_cppType,
            'convert_cType_to_cppType':
            convert_cType_to_cppType,
            'as_varName':
            as_varName,
            'decorate':
            decorate,
        }

        renders = []

        c_params = {
            'native_methods':
            lambda typ: c_native_methods(api_params['types'], typ)
        }
        cpp_params = {
            'native_methods':
            lambda typ: cpp_native_methods(api_params['types'], typ)
        }

        if 'dawn_headers' in targets:
            renders.append(
                FileRender('api.h', 'dawn/dawn.h',
                           [base_params, api_params, c_params]))
            renders.append(
                FileRender('apicpp.h', 'dawn/dawncpp.h',
                           [base_params, api_params, cpp_params]))

        if 'libdawn' in targets:
            additional_params = {
                'native_methods':
                lambda typ: cpp_native_methods(api_params['types'], typ)
            }
            renders.append(
                FileRender('api.c', 'dawn/dawn.c',
                           [base_params, api_params, c_params]))
            renders.append(
                FileRender('apicpp.cpp', 'dawn/dawncpp.cpp',
                           [base_params, api_params, cpp_params]))

        if 'mock_dawn' in targets:
            renders.append(
                FileRender('mock_api.h', 'mock/mock_dawn.h',
                           [base_params, api_params, c_params]))
            renders.append(
                FileRender('mock_api.cpp', 'mock/mock_dawn.cpp',
                           [base_params, api_params, c_params]))

        if 'dawn_native_utils' in targets:
            frontend_params = [
                base_params,
                api_params,
                c_params,
                {
                    'as_frontendType':
                    lambda typ: as_frontendType(
                        typ
                    ),  # TODO as_frontendType and friends take a Type and not a Name :(
                    'as_annotated_frontendType':
                    lambda arg: annotated(as_frontendType(arg.type), arg)
                }
            ]

            renders.append(
                FileRender('dawn_native/ValidationUtils.h',
                           'dawn_native/ValidationUtils_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/ValidationUtils.cpp',
                           'dawn_native/ValidationUtils_autogen.cpp',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/api_structs.h',
                           'dawn_native/dawn_structs_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/api_structs.cpp',
                           'dawn_native/dawn_structs_autogen.cpp',
                           frontend_params))
            renders.append(
                FileRender('dawn_native/ProcTable.cpp',
                           'dawn_native/ProcTable.cpp', frontend_params))

        if 'dawn_wire' in targets:
            additional_params = compute_wire_params(api_params, wire_json)

            wire_params = [
                base_params, api_params, c_params, {
                    'as_wireType':
                    lambda typ: typ.name.CamelCase() + '*'
                    if typ.category == 'object' else as_cppType(typ.name)
                }, additional_params
            ]
            renders.append(
                FileRender('dawn_wire/WireCmd.h',
                           'dawn_wire/WireCmd_autogen.h', wire_params))
            renders.append(
                FileRender('dawn_wire/WireCmd.cpp',
                           'dawn_wire/WireCmd_autogen.cpp', wire_params))
            renders.append(
                FileRender('dawn_wire/client/ApiObjects.h',
                           'dawn_wire/client/ApiObjects_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ApiProcs.cpp',
                           'dawn_wire/client/ApiProcs_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ApiProcs.h',
                           'dawn_wire/client/ApiProcs_autogen.h', wire_params))
            renders.append(
                FileRender('dawn_wire/client/ClientBase.h',
                           'dawn_wire/client/ClientBase_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ClientHandlers.cpp',
                           'dawn_wire/client/ClientHandlers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/client/ClientPrototypes.inc',
                           'dawn_wire/client/ClientPrototypes_autogen.inc',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerBase.h',
                           'dawn_wire/server/ServerBase_autogen.h',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerDoers.cpp',
                           'dawn_wire/server/ServerDoers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerHandlers.cpp',
                           'dawn_wire/server/ServerHandlers_autogen.cpp',
                           wire_params))
            renders.append(
                FileRender('dawn_wire/server/ServerPrototypes.inc',
                           'dawn_wire/server/ServerPrototypes_autogen.inc',
                           wire_params))

        return renders
Esempio n. 5
0
    def get_file_renders(self, args):
        with open(args.webnn_json) as f:
            loaded_json = json.loads(f.read())
        api_params = parse_json(loaded_json)

        targets = args.targets.split(',')

        base_params = {
            'Name': lambda name: Name(name),
            'as_annotated_cType': \
                lambda arg: annotated(as_cTypeEnumSpecialCase(arg.type), arg),
            'as_annotated_cppType': \
                lambda arg: annotated(as_cppType(arg.type.name), arg),
            'as_cEnum': as_cEnum,
            'as_cEnumDawn': as_cEnumDawn,
            'as_cppEnum': as_cppEnum,
            'as_cMethod': as_cMethod,
            'as_cMethodDawn': as_cMethodDawn,
            'as_MethodSuffix': as_MethodSuffix,
            'as_cProc': as_cProc,
            'as_cProcDawn': as_cProcDawn,
            'as_cType': as_cType,
            'as_cTypeDawn': as_cTypeDawn,
            'as_cppType': as_cppType,
            'as_jsEnumValue': as_jsEnumValue,
            'convert_cType_to_cppType': convert_cType_to_cppType,
            'as_varName': as_varName,
            'decorate': decorate,
            'c_methods': lambda typ: c_methods(api_params['types'], typ),
            'c_methods_sorted_by_name': \
                get_c_methods_sorted_by_name(api_params),
        }

        renders = []

        if 'webnn_headers' in targets:
            renders.append(
                FileRender('webnn.h', 'src/include/webnn/webnn.h',
                           [base_params, api_params]))
            renders.append(
                FileRender('webnn_proc_table.h',
                           'src/include/webnn/webnn_proc_table.h',
                           [base_params, api_params]))

        if 'webnncpp_headers' in targets:
            renders.append(
                FileRender('webnn_cpp.h', 'src/include/webnn/webnn_cpp.h',
                           [base_params, api_params]))

        if 'webnn_proc' in targets:
            renders.append(
                FileRender('webnn_proc.c', 'src/webnn/webnn_proc.c',
                           [base_params, api_params]))

        if 'webnncpp' in targets:
            renders.append(
                FileRender('webnn_cpp.cpp', 'src/webnn/webnn_cpp.cpp',
                           [base_params, api_params]))

        if 'emscripten_bits' in targets:
            renders.append(
                FileRender('webnn_struct_info.json',
                           'src/webnn/webnn_struct_info.json',
                           [base_params, api_params]))
            renders.append(
                FileRender('library_webnn_enum_tables.js',
                           'src/webnn/library_webnn_enum_tables.js',
                           [base_params, api_params]))

        if 'mock_webnn' in targets:
            mock_params = [
                base_params, api_params, {
                    'has_callback_arguments': has_callback_arguments
                }
            ]
            renders.append(
                FileRender('mock_webnn.h', 'src/webnn/mock_webnn.h',
                           mock_params))
            renders.append(
                FileRender('mock_webnn.cpp', 'src/webnn/mock_webnn.cpp',
                           mock_params))

        if 'webnn_native_utils' in targets:
            frontend_params = [
                base_params,
                api_params,
                {
                    # TODO: as_frontendType and co. take a Type, not a Name :(
                    'as_frontendType': lambda typ: as_frontendType(typ),
                    'as_annotated_frontendType': \
                        lambda arg: annotated(as_frontendType(arg.type), arg),
                }
            ]

            renders.append(
                FileRender('webnn_native/ValidationUtils.h',
                           'src/webnn_native/ValidationUtils_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('webnn_native/ValidationUtils.cpp',
                           'src/webnn_native/ValidationUtils_autogen.cpp',
                           frontend_params))
            renders.append(
                FileRender('webnn_native/webnn_structs.h',
                           'src/webnn_native/webnn_structs_autogen.h',
                           frontend_params))
            renders.append(
                FileRender('webnn_native/webnn_structs.cpp',
                           'src/webnn_native/webnn_structs_autogen.cpp',
                           frontend_params))
            renders.append(
                FileRender('webnn_native/ProcTable.cpp',
                           'src/webnn_native/ProcTable.cpp', frontend_params))

        return renders