summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-04-26 10:04:03 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-08-10 13:39:25 +0200
commit0da2c4efc21b52d8824b71435e265102d5a9901b (patch)
tree62b4283edf074f1691507d027c77482b216be01e
parent3afd459a830ce4b8f26ccec75a0581c5f0d4fa2b (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-xwscript27
1 files changed, 25 insertions, 2 deletions
diff --git a/wscript b/wscript
index ee26af6785..53f2578b07 100755
--- a/wscript
+++ b/wscript
@@ -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)