示例#1
0
def makeGenOpts(args):
    global genOpts
    genOpts = {}

    # Extensions to emit (list of extensions)
    emitExtensions = args.emitExtensions

    # Features to include (list of features)
    features = args.feature

    # Output target directory
    directory = args.directory

    # Descriptive names for various regexp patterns used to select
    # versions and extensions
    allFeatures = allExtensions = '.*'

    # Turn lists of names/patterns into matching regular expressions
    emitExtensionsPat = makeREstring(emitExtensions, allExtensions)
    featuresPat = makeREstring(features, allFeatures)

    # Copyright text prefixing all headers (list of strings).
    prefixStrings = [
        '/*', '** Copyright (c) 2017-2022, 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.', '*/', ''
    ]

    # Text specific to OpenXR headers
    xrPrefixStrings = [
        '/*',
        '** This header is generated from the Khronos OpenXR XML API Registry.',
        '**', '*/', ''
    ]

    # An API style conventions object
    conventions = OpenXRConventions()

    if HAVE_CONFORMANCE:
        genOpts['function_info.cpp'] = [
            ConformanceGenerator,
            AutomaticSourceGeneratorOptions(conventions=conventions,
                                            filename='function_info.cpp',
                                            directory=directory,
                                            apiname='openxr',
                                            profile=None,
                                            versions=featuresPat,
                                            emitversions=featuresPat,
                                            defaultExtensions='openxr',
                                            addExtensions=None,
                                            removeExtensions=None,
                                            emitExtensions=emitExtensionsPat,
                                            prefixText=prefixStrings +
                                            xrPrefixStrings,
                                            protectFeature=False,
                                            protectProto='#ifndef',
                                            protectProtoStr='XR_NO_PROTOTYPES',
                                            apicall='XRAPI_ATTR ',
                                            apientry='XRAPI_CALL ',
                                            apientryp='XRAPI_PTR *',
                                            alignFuncParam=48)
        ]

        genOpts['gen_dispatch.cpp'] = [
            ConformanceLayerGenerator,
            AutomaticSourceGeneratorOptions(
                conventions=conventions,
                filename='gen_dispatch.cpp',
                directory=directory,
                apiname='openxr',
                profile=None,
                versions=featuresPat,
                emitversions=featuresPat,
                defaultExtensions='openxr',
                addExtensions=None,
                removeExtensions=None,
                emitExtensions=emitExtensionsPat,
                apicall='XRAPI_ATTR ',
                apientry='XRAPI_CALL ',
                apientryp='XRAPI_PTR *',
            )
        ]

        genOpts['gen_dispatch.h'] = [
            ConformanceLayerGenerator,
            AutomaticSourceGeneratorOptions(
                conventions=conventions,
                filename='gen_dispatch.h',
                directory=directory,
                apiname='openxr',
                profile=None,
                versions=featuresPat,
                emitversions=featuresPat,
                defaultExtensions='openxr',
                addExtensions=None,
                removeExtensions=None,
                emitExtensions=emitExtensionsPat,
                apicall='XRAPI_ATTR ',
                apientry='XRAPI_CALL ',
                apientryp='XRAPI_PTR *',
            )
        ]

    genOpts['xr_generated_dispatch_table.h'] = [
        UtilitySourceOutputGenerator,
        AutomaticSourceGeneratorOptions(
            conventions=conventions,
            filename='xr_generated_dispatch_table.h',
            directory=directory,
            apiname='openxr',
            profile=None,
            versions=featuresPat,
            emitversions=featuresPat,
            defaultExtensions='openxr',
            addExtensions=None,
            removeExtensions=None,
            emitExtensions=emitExtensionsPat)
    ]

    genOpts['xr_generated_dispatch_table.c'] = [
        UtilitySourceOutputGenerator,
        AutomaticSourceGeneratorOptions(
            conventions=conventions,
            filename='xr_generated_dispatch_table.c',
            directory=directory,
            apiname='openxr',
            profile=None,
            versions=featuresPat,
            emitversions=featuresPat,
            defaultExtensions='openxr',
            addExtensions=None,
            removeExtensions=None,
            emitExtensions=emitExtensionsPat)
    ]

    genOpts['xr_generated_loader.hpp'] = [
        LoaderSourceOutputGenerator,
        AutomaticSourceGeneratorOptions(conventions=conventions,
                                        filename='xr_generated_loader.hpp',
                                        directory=directory,
                                        apiname='openxr',
                                        profile=None,
                                        versions=featuresPat,
                                        emitversions=featuresPat,
                                        defaultExtensions='openxr',
                                        addExtensions=None,
                                        removeExtensions=None,
                                        emitExtensions=emitExtensionsPat,
                                        prefixText=prefixStrings +
                                        xrPrefixStrings,
                                        protectFeature=False,
                                        protectProto='#ifndef',
                                        protectProtoStr='XR_NO_PROTOTYPES',
                                        apicall='XRAPI_ATTR ',
                                        apientry='XRAPI_CALL ',
                                        apientryp='XRAPI_PTR *',
                                        alignFuncParam=48)
    ]

    genOpts['xr_generated_loader.cpp'] = [
        LoaderSourceOutputGenerator,
        AutomaticSourceGeneratorOptions(conventions=conventions,
                                        filename='xr_generated_loader.cpp',
                                        directory=directory,
                                        apiname='openxr',
                                        profile=None,
                                        versions=featuresPat,
                                        emitversions=featuresPat,
                                        defaultExtensions='openxr',
                                        addExtensions=None,
                                        removeExtensions=None,
                                        emitExtensions=emitExtensionsPat,
                                        prefixText=prefixStrings +
                                        xrPrefixStrings,
                                        protectFeature=False,
                                        protectProto='#ifndef',
                                        protectProtoStr='XR_NO_PROTOTYPES',
                                        apicall='XRAPI_ATTR ',
                                        apientry='XRAPI_CALL ',
                                        apientryp='XRAPI_PTR *',
                                        alignFuncParam=48)
    ]

    # Source files generated for the api_dump layer
    genOpts['xr_generated_api_dump.cpp'] = [
        ApiDumpOutputGenerator,
        AutomaticSourceGeneratorOptions(conventions=conventions,
                                        filename='xr_generated_api_dump.cpp',
                                        directory=directory,
                                        apiname='openxr',
                                        profile=None,
                                        versions=featuresPat,
                                        emitversions=featuresPat,
                                        defaultExtensions='openxr',
                                        addExtensions=None,
                                        removeExtensions=None,
                                        emitExtensions=emitExtensionsPat,
                                        apicall='XRAPI_ATTR ',
                                        apientry='XRAPI_CALL ',
                                        apientryp='XRAPI_PTR *')
    ]

    genOpts['xr_generated_api_dump.hpp'] = [
        ApiDumpOutputGenerator,
        AutomaticSourceGeneratorOptions(conventions=conventions,
                                        filename='xr_generated_api_dump.hpp',
                                        directory=directory,
                                        apiname='openxr',
                                        profile=None,
                                        versions=featuresPat,
                                        emitversions=featuresPat,
                                        defaultExtensions='openxr',
                                        addExtensions=None,
                                        removeExtensions=None,
                                        emitExtensions=emitExtensionsPat,
                                        apicall='XRAPI_ATTR ',
                                        apientry='XRAPI_CALL ',
                                        apientryp='XRAPI_PTR *')
    ]

    # Source files generated for the core validation layer
    genOpts['xr_generated_core_validation.hpp'] = [
        ValidationSourceOutputGenerator,
        AutomaticSourceGeneratorOptions(
            conventions=conventions,
            filename='xr_generated_core_validation.hpp',
            directory=directory,
            apiname='openxr',
            profile=None,
            versions=featuresPat,
            emitversions=featuresPat,
            defaultExtensions='openxr',
            addExtensions=None,
            removeExtensions=None,
            emitExtensions=emitExtensionsPat,
            apicall='XRAPI_ATTR ',
            apientry='XRAPI_CALL ',
            apientryp='XRAPI_PTR *')
    ]

    genOpts['xr_generated_core_validation.cpp'] = [
        ValidationSourceOutputGenerator,
        AutomaticSourceGeneratorOptions(
            conventions=conventions,
            filename='xr_generated_core_validation.cpp',
            directory=directory,
            apiname='openxr',
            profile=None,
            versions=featuresPat,
            emitversions=featuresPat,
            defaultExtensions='openxr',
            addExtensions=None,
            removeExtensions=None,
            emitExtensions=emitExtensionsPat,
            apicall='XRAPI_ATTR ',
            apientry='XRAPI_CALL ',
            apientryp='XRAPI_PTR *')
    ]
示例#2
0
def genTarget(args):
    """
    Generate a target based on the options in the matching genOpts{} object.

    This is encapsulated in a function so it can be profiled and/or timed.
    The args parameter is an parsed argument object containing the following
    fields that are used:
    target - target to generate
    directory - directory to generate it in
    protect - True if re-inclusion wrappers should be created
    extensions - list of additional extensions to include in generated
    interfaces
    """
    # Create generator options with specified parameters
    header = args.target
    if 'dispatch' in args.target:
        # Don't omit anything when generating dispatchers.
        removeExtensions = None
    else:
        removeExtensions = makeREstring((
            # Atom not projecting right?
            "XR_MSFT_controller_model",
            # Projection of static string fails
            "XR_MSFT_spatial_graph_bridge",
        ))

    # Turn lists of names/patterns into matching regular expressions
    emitExtensionsPat = makeREstring(args.emitExtensions, '.*')
    featuresPat = makeREstring(args.feature, '.*')
    options = AutomaticSourceGeneratorOptions(
        conventions=OpenXRConventions(),
        filename=header,
        directory=args.directory,
        apiname='openxr',
        profile=None,
        versions=featuresPat,
        emitversions=featuresPat,
        defaultExtensions='openxr',
        addExtensions=None,
        removeExtensions=removeExtensions,
        emitExtensions=emitExtensionsPat)

    if not args.quiet:
        write('* Building', options.filename, file=sys.stderr)
        write('* options.versions          =',
              options.versions,
              file=sys.stderr)
        write('* options.emitversions      =',
              options.emitversions,
              file=sys.stderr)
        write('* options.defaultExtensions =',
              options.defaultExtensions,
              file=sys.stderr)
        write('* options.addExtensions     =',
              options.addExtensions,
              file=sys.stderr)
        write('* options.removeExtensions  =',
              options.removeExtensions,
              file=sys.stderr)
        write('* options.emitExtensions    =',
              options.emitExtensions,
              file=sys.stderr)

    startTimer(args.time)
    gen = CppGenerator(errFile=errWarn,
                       warnFile=errWarn,
                       diagFile=diag,
                       quiet=args.quiet)
    reg.setGenerator(gen)
    reg.apiGen(options)

    if not args.quiet:
        write('* Generated', options.filename, file=sys.stderr)
    endTimer(args.time, '* Time to generate ' + options.filename + ' =')