diff options
Diffstat (limited to 'wscript')
-rw-r--r-- | wscript | 87 |
1 files changed, 56 insertions, 31 deletions
@@ -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) |