コード例 #1
0
def create_cmake_preload(source):
    def dissolve_env(var):
        import re
        res = re.findall(r'^.*\$\(env:(.+)\).*$', var)
        if len(res) == 0:
            return var.replace('_INTERNAL', '').replace("'", '')
        return dissolve_env(
            var.replace('$(env:%s)' % res[0], '$ENV{%s}' % res[0]))

    target_name = source['target-name'][0]

    ci_source = convert_to_cmake(yml.read_yaml('ci-config.yml'))
    ci_vars = yml.create_variable_template(ci_source, source, target_name)

    var_templates.resolve_variables(ci_vars)
    variables = ci_vars['cmake-opts']

    vars = [var[2:] for var in variables if var.startswith('-D')]
    vars = [dissolve_env(var) for var in vars]

    with open('../../.github/cmake/%s.preload.cmake' % target_name,
              'w') as out:
        for var in vars:
            name, value = var.split('=')
            out.write('set ( %s "%s" CACHE STRING "" )\n' % (name, value))
コード例 #2
0
def create_global_variables(precompiled_deps, base_config):
    #
    # Create variable sets, for switching between bare-metal and Dockerized builds
    #
    global_vars = convert_to_cmake(yml.read_yaml('build-globals.yml'))
    blocks = []

    for var in sorted(list(global_vars['globals'].keys())):
        var_desc = VarDecl()
        var_desc.name = var
        var_desc.var = global_vars['globals'][var]
        var_desc.var = var_templates.resolve_variable(base_config, var_desc.var)[0]
        var_desc.flag = VARFLAGS.DEFAULTS

        blocks.append(var_desc)

    for block_desc_name in sorted(list(global_vars['global-sets'].keys())):
        block_desc = global_vars['global-sets'][block_desc_name]

        var_block = StatementBlock()
        var_block.conditional = 'eq ($(env:BUILD_MODE), %s)' % block_desc_name

        for var in sorted(list(block_desc.keys())):
            var_desc = VarDecl()
            var_desc.name = var
            var_desc.var  = block_desc[var]
            var_desc.var = var_templates.resolve_variable(base_config, block_desc[var])[0]

            var_block.statements.append(var_desc)

        blocks.append(var_block)

    return blocks
コード例 #3
0
ファイル: make_all.py プロジェクト: hbirchtree/coffeecutie
def create_global_variables(precompiled_deps, base_config):
    #
    # Create variable sets, for switching between bare-metal and Dockerized builds
    #
    global_vars = convert_to_cmake(yml.read_yaml('build-globals.yml'))
    blocks = []

    global_var_variables = yml.create_plain_variables(precompiled_deps, yml.deepcopy(base_config), 'dependencies')

    var_templates.resolve_variables(global_var_variables, loose_resolve=True)

    for var in sorted(list(global_vars['globals'].keys())):
        var_desc = VarDecl()
        var_desc.name = var
        var_desc.var = global_vars['globals'][var]
        var_desc.var = var_templates.resolve_variable(global_var_variables, var_desc.var)[0]
        var_desc.flag = VARFLAGS.DEFAULTS

        blocks.append(var_desc)

    for block_desc_name in sorted(list(global_vars['global-sets'].keys())):
        block_desc = global_vars['global-sets'][block_desc_name]

        var_block = StatementBlock()
        var_block.conditional = 'eq ($(env:BUILD_MODE), %s)' % block_desc_name

        for var in sorted(list(block_desc.keys())):
            var_desc = VarDecl()
            var_desc.name = var
            var_desc.var = var_templates.resolve_variable(global_var_variables, block_desc[var])[0]

            var_block.statements.append(var_desc)

        blocks.append(var_block)

    return blocks
コード例 #4
0
def create_target_definitions(precompiled_deps, base_config, targets, force_target):
    # Load toolchain configuration, includes project configuration
    toolchain_data = convert_to_cmake(yml.read_yaml('toolchain-config.yml'))
    coffee_data = convert_to_cmake(yml.read_yaml('coffee-config.yml'))

    make_targets = []

    for target in targets:
        # Create base environment
        vars = yml.create_variable_template(toolchain_data, yml.deepcopy(base_config), target)
        vars = yml.create_variable_template(coffee_data, vars, target)
        vars['target-name'] = [target]

        # Resolve all variables before creating Makefile entry
        var_templates.resolve_variables(vars)

        make_targets += [
            Comment(var_templates.resolve_variable(vars, '$(description)')[0]),
            Comment(var_templates.resolve_variable(vars, 'Compiler: $(compiler)')[0])
        ]

        # Command to run the Makefile with CMake
        cmd = Command()
        cmd.command = var_templates.resolve_variable(
            vars, "make -f $(env:ROOT_DIR)/$(runner-choice) $(target)")[0]

        cmd.command += "\n-e EXTRA_OPTIONS=\""
        for opt in sorted(list(vars['cmake-opts'])):
            cmd.command += "\n" + opt
        cmd.command += "\""

        # Only include Docker options if an image is chosen
        if 'container' in vars:
            cmd.command += "\n-e DOCKER_EXTRA_OPTIONS=\""
            for opt in vars['container-opts']:
                cmd.command += "\n" + opt.replace('"', '\\"')
            cmd.command += "\""

            # Container might be a separate image, or a tag on the hbirch/coffeecutie:... image
            if sum([':' in cnt for cnt in vars['container']]) > 0:
                cmd.command += "\n-e DOCKER_CONTAINER=$(container)"
            else:
                cmd.command += "\n-e DOCKER_CONFIG=$(container)"

        cmd.command += "\n-e CMAKE_BUILD_DIR=$(cmake.build)"
        cmd.command += "\n-e OUTPUT_DIR=$(env:BUILD_DIR)"
        cmd.command += "\n-e BUILD_NAME=$(target-name)"

        if 'environment-vars' in vars:
            for opt in vars['environment-vars']:
                cmd.command += "\n" + opt.replace('"', '\\"')

        cmd.command = var_templates.resolve_variable(vars, cmd.command)[0].replace(';', '\\;')

        # Multiple targets means it runs in a two-phase process
        for i, cmake_target in enumerate(vars['cmake-target']):
            if i == 0:
                if len(vars['cmake-target']) == 1:
                    cmd.command += "\n-e CMAKE_TARGET=%s" % cmake_target
            elif i == 1:
                cmd.command += "\n-e CMAKE_SECOND_TARGET=%s" % cmake_target
            else:
                raise RuntimeError("don't know what to do with target: " + cmake_target)

        # Generate Makefile entry
        compile_target = Target()
        compile_target.target_name = target
        compile_target.dependencies = [force_target]
        compile_target.commands.append(cmd)
        compile_target.source = vars

        make_targets.append(compile_target)

    return make_targets
コード例 #5
0
    variables = source['cmake-opts']
    target_name = source['target-name'][0]

    vars = [ var[2:] for var in variables if var.startswith('-D') ]
#    vars = [ var for var in vars if not var.startswith('CMAKE_') ]
    vars = [ dissolve_env(var) for var in vars ]

    with open('../../.github/cmake/%s.preload.cmake' % target_name, 'w') as out:
        for var in vars:
            name, value = var.split('=')
            out.write('set ( %s "%s" CACHE STRING "" )\n' % (name, value))

if __name__ == '__main__':
    # Load pre-compiled dependencies and variables
    base_config = {}
    base_config = yml.create_plain_variables(convert_to_cmake(yml.read_yaml('build-variables.yml')), base_config)
    var_templates.resolve_variables(base_config, loose_resolve=True)

    blocks = create_global_variables({}, base_config)

    force_target = Target()
    force_target.target_name = 'FORCE'
    make_targets = [force_target]

    linux_targets = yml.create_target_listing('build-targets-linux.yml')
    linux_make_targets = yml.deepcopy(make_targets)
    linux_make_targets += create_target_definitions({}, base_config, linux_targets, force_target)

    mac_targets = yml.create_target_listing('build-targets-osx.yml')
    mac_make_targets = yml.deepcopy(make_targets)
    mac_make_targets += create_target_definitions({}, base_config, mac_targets, force_target)
コード例 #6
0
    vars = [var[2:] for var in variables if var.startswith('-D')]
    vars = [dissolve_env(var) for var in vars]

    with open('../../.github/cmake/%s.preload.cmake' % target_name,
              'w') as out:
        for var in vars:
            name, value = var.split('=')
            out.write('set ( %s "%s" CACHE STRING "" )\n' % (name, value))


if __name__ == '__main__':
    # Load pre-compiled dependencies and variables
    base_config = {}
    base_config = yml.create_plain_variables(
        convert_to_cmake(yml.read_yaml('build-variables.yml')), base_config)
    var_templates.resolve_variables(base_config, loose_resolve=True)

    blocks = create_global_variables({}, base_config)

    force_target = Target()
    force_target.target_name = 'FORCE'
    make_targets = [force_target]

    linux_targets = yml.create_target_listing('build-targets-linux.yml')
    linux_make_targets = yml.deepcopy(make_targets)
    linux_make_targets += create_target_definitions({}, base_config,
                                                    linux_targets,
                                                    force_target)

    mac_targets = yml.create_target_listing('build-targets-osx.yml')
コード例 #7
0
ファイル: make_all.py プロジェクト: hbirchtree/coffeecutie
def create_target_definitions(precompiled_deps, base_config, targets, force_target):
    # Load toolchain configuration, includes project configuration
    toolchain_data = convert_to_cmake(yml.read_yaml('toolchain-config.yml'))
    coffee_data = convert_to_cmake(yml.read_yaml('coffee-config.yml'))

    make_targets = []

    for target in targets:
        # Create base environment
        vars = yml.create_variable_template(toolchain_data, yml.deepcopy(base_config), target)
        vars = yml.create_variable_template(coffee_data, vars, target)
        vars['target-name'] = [target]

        # Add specified dependencies to environment
        target_dependencies = vars['dependencies']
        target_dependencies = [x for x in target_dependencies if x != "None"]
        for dep in target_dependencies:
            yml.create_plain_variables(precompiled_deps[dep], vars, 'dependencies.%s' % dep)
        verify_dependencies(vars, target_dependencies)

        # Resolve all variables before creating Makefile entry
        var_templates.resolve_variables(vars)

        make_targets += [
            Comment(var_templates.resolve_variable(vars, '$(description)')[0]),
            Comment(var_templates.resolve_variable(vars, 'Compiler: $(compiler)')[0])
        ]

        # Command to run the Makefile with CMake
        cmd = Command()
        cmd.command = var_templates.resolve_variable(
            vars, "make -f $(env:ROOT_DIR)/$(runner-choice) $(target)")[0]

        cmd.command += "\n-e EXTRA_OPTIONS=\""
        for opt in sorted(list(vars['cmake-opts'])):
            cmd.command += "\n" + opt
        cmd.command += "\""

        # Only include Docker options if an image is chosen
        if 'container' in vars:
            cmd.command += "\n-e DOCKER_EXTRA_OPTIONS=\""
            for opt in vars['container-opts']:
                cmd.command += "\n" + opt.replace('"', '\\"')
            cmd.command += "\""

            # Container might be a separate image, or a tag on the hbirch/coffeecutie:... image
            if sum([':' in cnt for cnt in vars['container']]) > 0:
                cmd.command += "\n-e DOCKER_CONTAINER=$(container)"
            else:
                cmd.command += "\n-e DOCKER_CONFIG=$(container)"

        cmd.command += "\n-e CMAKE_BUILD_DIR=$(cmake.build)"
        cmd.command += "\n-e OUTPUT_DIR=$(env:BUILD_DIR)"
        cmd.command += "\n-e BUILD_NAME=$(target-name)"

        if 'environment-vars' in vars:
            for opt in vars['environment-vars']:
                cmd.command += "\n" + opt.replace('"', '\\"')

        cmd.command = var_templates.resolve_variable(vars, cmd.command)[0].replace(';', '\\;')

        # Multiple targets means it runs in a two-phase process
        for i, cmake_target in enumerate(vars['cmake-target']):
            if i == 0:
                if len(vars['cmake-target']) == 1:
                    cmd.command += "\n-e CMAKE_TARGET=%s" % cmake_target
            elif i == 1:
                cmd.command += "\n-e CMAKE_SECOND_TARGET=%s" % cmake_target
            else:
                raise RuntimeError("don't know what to do with target: " + cmake_target)

        # Generate Makefile entry
        compile_target = Target()
        compile_target.target_name = target
        compile_target.dependencies = [force_target] + [
            Target(name) for name in target_dependencies
            if precompiled_deps[name]['type'] != 'empty'
        ]
        compile_target.commands.append(cmd)

        make_targets.append(compile_target)

    return make_targets
コード例 #8
0
ファイル: make_all.py プロジェクト: hbirchtree/coffeecutie
        # Generate Makefile entry
        compile_target = Target()
        compile_target.target_name = target
        compile_target.dependencies = [force_target] + [
            Target(name) for name in target_dependencies
            if precompiled_deps[name]['type'] != 'empty'
        ]
        compile_target.commands.append(cmd)

        make_targets.append(compile_target)

    return make_targets

if __name__ == '__main__':
    precompiled_deps = yml.read_yaml('build-dependencies.yml')['binary-dependencies']
    convert_to_cmake(precompiled_deps)

    # Load pre-compiled dependencies and variables
    base_config = {}
    base_config = yml.create_plain_variables(convert_to_cmake(yml.read_yaml('build-variables.yml')), base_config)
    var_templates.resolve_variables(base_config, loose_resolve=True)

    blocks = create_global_variables(precompiled_deps, base_config)

    force_target = Target()
    force_target.target_name = 'FORCE'
    make_targets = [force_target]
    make_targets += create_dependencies(precompiled_deps, base_config)

    linux_targets = yml.create_target_listing('build-targets-linux.yml')