From 5aca4e1c04cc596a1202ff880ec186ce205fd817 Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Thu, 5 Apr 2018 15:02:28 +0200 Subject: FIXME: waf: Build multiple configurations. --- buildset/extended.ini | 2 +- waf_libbsd.py | 3 -- wscript | 87 +++++++++++++++++++++++++++++++++------------------ 3 files changed, 57 insertions(+), 35 deletions(-) diff --git a/buildset/extended.ini b/buildset/extended.ini index e761cf95..94e13c17 100644 --- a/buildset/extended.ini +++ b/buildset/extended.ini @@ -3,4 +3,4 @@ name = extended extends = base.ini [modules-enabled] -tests = 0 +dev_nic_broadcomm = 0 diff --git a/waf_libbsd.py b/waf_libbsd.py index b17bac5a..fffdf9fe 100644 --- a/waf_libbsd.py +++ b/waf_libbsd.py @@ -304,9 +304,6 @@ class Builder(builder.ModuleManager): includes = conf.env.IFLAGS, mandatory = False) - def configure(self, conf): - pass - def build(self, bld): # This is only necessary for build. But it depends on the waflib which # is only available in a waf context. But we need the module manager for diff --git a/wscript b/wscript index 48af6293..453b39a8 100644 --- a/wscript +++ b/wscript @@ -51,8 +51,9 @@ try: import configparser except ImportError: import ConfigParser as configparser +import waflib.Options -builders = None +builders = {} BUILDSET_DIR = "buildset" BUILDSET_DEFAULT = "buildset/base.ini" @@ -88,8 +89,6 @@ def load_config(conf, f): ini = load_ini(conf, f) config = {} - if not ini.has_option('general', 'name'): - conf.fatal("'{}' is missing a general/name.".format(f)) config['name'] = ini.get('general', 'name') config['modules-enabled'] = [] @@ -101,21 +100,59 @@ def load_config(conf, f): config['modules-enabled'].append(mod) return config -def create_builder(conf): +def check_buildsets(ctx, buildset_opt): + buildsets = [] + if buildset_opt == []: + buildset_opt.append(BUILDSET_DEFAULT) + for bs in buildset_opt: + if os.path.isdir(bs): + for f in os.listdir(bs): + if f[-4:] == ".ini": + buildsets += [os.path.join(bs,f)] + else: + for f in bs.split(','): + buildsets += [f] + return buildsets + +def post_init(ctx, env, context_classes): + buildsets = check_buildsets(ctx, env.options['buildset']) + bsnames = [] + global builders - if builders is not None: - conf.fatal('builders created multiple times') - builders = [] - for bs in conf.env.BUILDSET: + + for bs in buildsets: + # create builder objects builder = waf_libbsd.Builder() libbsd.load(builder) - bsconfig = load_config(conf, bs) + bsconfig = load_config(ctx, bs) + bsname = bsconfig['name'] + bsnames += [bsname] builder.updateConfiguration(bsconfig) builder.generate(rtems_version) - builders.append(builder) + builders[bsname]=builder + + # Update the contextes for build variants + for y in context_classes: + newcmd = y.cmd + '-' + bsname + newvariant = y.variant + '-' + bsname + class context(y): + cmd = newcmd + variant = newvariant + libbsd_buildset_name = bsname + + # Transform the commands to per build variant commands + commands = [] + for cmd in waflib.Options.commands: + if cmd.startswith(('build', 'clean', 'install')): + for bsname in bsnames: + commands += [cmd + '-' + bsname] + else: + commands += [cmd] + waflib.Options.commands = commands def init(ctx): - rtems.init(ctx, version = rtems_version, long_commands = True) + rtems.init(ctx, version = rtems_version, long_commands = True, + post_init = post_init) def options(opt): rtems.options(opt) @@ -156,8 +193,14 @@ def bsp_configure(conf, arch_bsp): conf.fatal("RTEMS kernel POSIX support is disabled; configure RTEMS with --enable-posix") if rtems.check_networking(conf): conf.fatal("RTEMS kernel contains the old network support; configure RTEMS with --disable-networking") + env = conf.env.derive() for builder in builders: - builder.bsp_configure(conf, arch_bsp) + ab = conf.env.RTEMS_ARCH_BSP + variant = ab + "-" + builder + conf.msg('Configure variant: ', variant) + conf.setenv(variant, env) + builders[builder].bsp_configure(conf, arch_bsp) + conf.setenv(ab) def configure(conf): if conf.options.auto_regen: @@ -169,26 +212,8 @@ def configure(conf): conf.env.NET_CONFIG = conf.options.net_config conf.env.FREEBSD_OPTIONS =conf.options.freebsd_options conf.env.OPTIMIZATION = conf.options.optimization - conf.env.BUILDSET = [] - if conf.options.buildset == []: - conf.options.buildset.append(BUILDSET_DEFAULT) - for bs in conf.options.buildset: - if os.path.isdir(bs): - for f in os.listdir(bs): - if f[-4:] == ".ini": - conf.env.BUILDSET.append(os.path.join(bs,f)) - else: - for f in bs.split(','): - conf.env.BUILDSET.append(f) - - create_builder(conf); rtems.configure(conf, bsp_configure) - conf.msg('Enabled buildsets: ', conf.env.BUILDSET) - for builder in builders: - builder.configure(conf) def build(bld): - create_builder(bld); rtems.build(bld) - for builder in builders: - builder.build(bld) + builders[bld.libbsd_buildset_name].build(bld) -- cgit v1.2.3