diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-04-26 10:04:03 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-08-10 13:39:25 +0200 |
commit | 0da2c4efc21b52d8824b71435e265102d5a9901b (patch) | |
tree | 62b4283edf074f1691507d027c77482b216be01e | |
parent | 3afd459a830ce4b8f26ccec75a0581c5f0d4fa2b (diff) |
build: Load items on demand during a buildqual-95
If the CSafeLoader is available, load only the necessary build items.
This considerably speeds up the build setup time if the CSafeLoader is
used.
-rwxr-xr-x | wscript | 27 |
1 files changed, 25 insertions, 2 deletions
@@ -1192,6 +1192,22 @@ try: super(ItemCache, self).__init__() self.spec_directories = [] + def __missing__(self, uid): + name = uid + ".yml" + for path in self.spec_directories: + path2 = os.path.join(path, name[1:]) + try: + with open(path2, "r") as f: + content = f.read() + except OSError: + pass + else: + data = load(content, SafeLoader) + item = ctors[data["build-type"]](uid, data) + self[uid] = item + return item + raise KeyError("No item file found for UID: {}".format(uid)) + def set_spec_directories(self, spec_directories): self.spec_directories = spec_directories @@ -1221,6 +1237,9 @@ try: for path in self.spec_directories: self.load_from_yaml(path, path) + + def load_on_demand(self, ctx): + pass except ImportError: # # Fall back to the Python implementation provided by the project. This @@ -1321,6 +1340,9 @@ except ImportError: for path in self.spec_directories: load_items_in_directory(ctx, path) + def load_on_demand(self, ctx): + self.load_all(ctx) + items = ItemCache() @@ -1524,6 +1546,7 @@ def configure_variant(conf, cp, bsp_map, path_list, top_group, variant): conf.env["BSP_BASE"] = bsp_base conf.env["BSP_NAME"] = bsp_name conf.env["BSP_FAMILY"] = family + conf.env["BSP_UID"] = bsp_item.uid conf.env["DEST_OS"] = "rtems" # For the enabled-by evaluation we have to use the base BSP defined by the @@ -1629,13 +1652,13 @@ def build(bld): ["compiler", "config", "specs", "tools", "top_group"], ) items.set_spec_directories(bld.env.SPECS) - items.load_all(bld) + items.load_on_demand(bld) append_variant_builds(bld) return long_command_line_workaround(bld) bic = BuildItemContext(bld.env.ARCH_INCLUDES.split(), [], [], [], [], [], []) - bsps[bld.env.ARCH][bld.env.BSP_BASE].build(bld, bic) + items[bld.env.BSP_UID].build(bld, bic) items[bld.env.TOPGROUP_UID].build(bld, bic) |