diff options
author | Chris Johns <chrisj@rtems.org> | 2021-07-13 20:47:08 -1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2021-07-15 09:59:14 +1000 |
commit | 6f2aa8ad36e3aaffc9fa2cb8c744b04da7339ee2 (patch) | |
tree | 4d3d14603856958cc2ec367e9d7763d210af2358 /wscript | |
parent | bsps/sparc: Improve interrupt affinity support (diff) | |
download | rtems-6f2aa8ad36e3aaffc9fa2cb8c744b04da7339ee2.tar.bz2 |
build: Use BSP family for options
- Optionally add support for 'default-by-family' to allow
option to be set by a family and so all related BSPs
Close #4468
Diffstat (limited to '')
-rwxr-xr-x | wscript | 34 |
1 files changed, 21 insertions, 13 deletions
@@ -592,9 +592,6 @@ class BSPItem(Item): arch_bsps = bsps.setdefault(data["arch"].strip(), {}) arch_bsps[data["bsp"].strip()] = self - def prepare_configure(self, conf, cic): - conf.env.BSP_FAMILY = self.data["family"] - def prepare_build(self, bld, bic): return BuildItemContext( bic.includes + bld.env.BSP_INCLUDES.split(), [], [], [] @@ -695,8 +692,12 @@ class OptionItem(Item): return True return False - def default_value(self, variant): + def default_value(self, variant, family): value = self.data["default"] + for default in self.data["default-by-family"]: + if OptionItem._is_variant(default["families"], family): + value = default["value"] + break for default in self.data["default-by-variant"]: if OptionItem._is_variant(default["variants"], variant): value = default["value"] @@ -709,8 +710,8 @@ class OptionItem(Item): return value return self.data["format"].format(value) - def do_defaults(self, variant): - value = self.default_value(variant) + def do_defaults(self, variant, family): + value = self.default_value(variant, family) if value is None: return description = self.data["description"] @@ -917,7 +918,7 @@ class OptionItem(Item): value = cic.cp.getboolean(conf.variant, name) cic.add_option(name) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) except ValueError as ve: conf.fatal( "Invalid value for configuration option {}: {}".format(name, ve) @@ -933,7 +934,7 @@ class OptionItem(Item): value = cic.cp.get(conf.variant, name) cic.add_option(name) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) if value is None: return value try: @@ -952,7 +953,7 @@ class OptionItem(Item): cic.add_option(name) value = no_unicode(value) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) return value def _script(self, conf, cic, value, arg): @@ -1365,12 +1366,23 @@ def configure_variant(conf, cp, bsp_map, path_list, top_group, variant): conf.setenv(variant) arch, bsp_name = variant.split("/") bsp_base = bsp_map.get(bsp_name, bsp_name) + + try: + bsp_item = bsps[arch][bsp_base] + except KeyError: + conf.fatal("No such base BSP: '{}'".format(variant)) + + family = bsp_item.data['family'] + arch_bsp = arch + "/" + bsp_base + arch_family = arch + "/" + family conf.env["ARCH"] = arch conf.env["ARCH_BSP"] = arch_bsp + conf.env["ARCH_FAMILY"] = arch_family conf.env["BSP_BASE"] = bsp_base conf.env["BSP_NAME"] = bsp_name + conf.env["BSP_FAMILY"] = family conf.env["DEST_OS"] = "rtems" # For the enabled-by evaluation we have to use the base BSP defined by the @@ -1385,10 +1397,6 @@ def configure_variant(conf, cp, bsp_map, path_list, top_group, variant): items[conf.env.TOPGROUP].configure(conf, cic) - try: - bsp_item = bsps[arch][bsp_base] - except KeyError: - conf.fatal("No such base BSP: '{}'".format(variant)) bsp_item.configure(conf, cic) options = set([o[0].upper() for o in cp.items(variant)]) |