From 40deabcc48a8c5448ac310a4586127af50f60dcf Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 18 Dec 2020 09:41:12 -0800 Subject: [PATCH] scons,fastmodel: Change how ARM license slots are throttled. To limit the number of license slots used by SCons when building fast model components, the fastmodel SConscript set up a group of nodes which are attached to each simgen run using the SCons SideEffect method using one of the library files it generates. To create each unique node, the SCons Value() method was used, passing it the counter for the loop. In at least version 4 of SCons, what this ended up doing was setting that library file as a source for each of the Value() nodes it corresponds to. That doesn't *seem* like a problem, but then when creating config include files, files which expose SCons configuration values to C++, they also create Value() nodes using the value of the config variable. In cases where that variable is boolean, the value might be 0 or 1. The result was that the config header depended on Value(0) (for instance), and then Value(0) depended on a collection of static library files. When scons tried to determine whether the config file was up to date, it tried to check if if its sources had changed. It would check Value(0), and then Value(0) would try to compute a checksum for its own source. To do that, it seems to assume that the value can be interpreted as a string and tries to decode it as utf8. Since the library is a binary file, that would fail and break the build with a cryptic message from within the guts of SCons. To address this, this change replaces the loop index with a call to object(). Each instance created in that way will be different from every other, and there will be no way (purposefully or otherwise) to create a collision with it when creating Value() nodes for some other purpose. Change-Id: I56bc842ae66b8cb36d3dcbc25796b708254d6982 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/38617 Reviewed-by: Yu-hsin Wang Reviewed-by: Ahbong Chang Maintainer: Gabe Black Tested-by: kokoro --- src/arch/arm/fastmodel/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arch/arm/fastmodel/SConscript b/src/arch/arm/fastmodel/SConscript index 398037354..f5516fa1b 100644 --- a/src/arch/arm/fastmodel/SConscript +++ b/src/arch/arm/fastmodel/SConscript @@ -244,7 +244,7 @@ class ProjectFileParser(Grammar): license_count = int(env['ARMLMD_LICENSE_COUNT']) -arm_licenses = list((Value(i) for i in range(license_count))) +arm_licenses = list((Value(object()) for i in range(license_count))) license_cycle = cycle(arm_licenses) class ArmFastModelComponent(object): -- 2.30.2