|
|
@@ -26,6 +26,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
global_build_config = config.get("build_config", dict())
|
|
|
global_build_configs = config.get("build_configs", dict())
|
|
|
global_target = config.get("build_target", "all")
|
|
|
+ global_parallel = config.get("parallel", "")
|
|
|
rootdirs = config.get("appdirs", [])
|
|
|
ignored_rootdirs = config.get("appdirs_ignore", [])
|
|
|
if (isinstance(rootdirs, list) and isinstance(ignored_rootdirs, list)) == False:
|
|
|
@@ -66,6 +67,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
app_buildcfg = copy.deepcopy(global_build_config)
|
|
|
app_buildcfgs = copy.deepcopy(global_build_configs)
|
|
|
app_buildtarget = copy.deepcopy(global_target)
|
|
|
+ app_parallel = copy.deepcopy(global_parallel)
|
|
|
found_cfg = find_local_appconfig(appdir, appconfigs)
|
|
|
if found_cfg:
|
|
|
appcfg = appconfigs[found_cfg]
|
|
|
@@ -78,10 +80,13 @@ class nsdk_bench(nsdk_runner):
|
|
|
app_buildcfgs.update(appcfg.get("build_configs", dict()))
|
|
|
if "build_target" in appcfg:
|
|
|
app_buildtarget = appcfg["build_target"]
|
|
|
+ if "parallel" in appcfg:
|
|
|
+ app_parallel = appcfg["parallel"]
|
|
|
else: # if merge_global is false, then use app config only
|
|
|
app_buildcfg = appcfg.get("build_config", dict())
|
|
|
app_buildcfgs = appcfg.get("build_configs", dict())
|
|
|
app_buildtarget = appcfg.get("build_target", "all")
|
|
|
+ app_parallel = appcfg.get("parallel", "")
|
|
|
|
|
|
app_allconfigs = {"configs": {}}
|
|
|
if len(app_buildcfgs) == 0:
|
|
|
@@ -95,7 +100,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
percfg_appbuildcfg = copy.deepcopy(app_buildcfg)
|
|
|
percfg_appbuildcfg.update(app_buildcfgs[cfgname])
|
|
|
app_allconfigs["configs"][cfgname] = {"build_config": percfg_appbuildcfg, "build_target": app_buildtarget, \
|
|
|
- "logs": {"build": applogfile}}
|
|
|
+ "parallel": app_parallel, "logs": {"build": applogfile}}
|
|
|
|
|
|
apps_config[appdir] = copy.deepcopy(app_allconfigs)
|
|
|
|
|
|
@@ -113,6 +118,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
global_build_config = config.get("build_config", dict())
|
|
|
global_build_configs = config.get("build_configs", dict())
|
|
|
global_target = config.get("build_target", "clean all")
|
|
|
+ global_parallel = config.get("parallel", "")
|
|
|
global_run_config = config.get("run_config", dict())
|
|
|
global_checks = config.get("checks", None)
|
|
|
rootdirs = config.get("appdirs", [])
|
|
|
@@ -155,6 +161,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
app_buildcfg = copy.deepcopy(global_build_config)
|
|
|
app_buildcfgs = copy.deepcopy(global_build_configs)
|
|
|
app_buildtarget = copy.deepcopy(global_target)
|
|
|
+ app_parallel = copy.deepcopy(global_parallel)
|
|
|
app_runcfg = copy.deepcopy(global_run_config)
|
|
|
app_checks = copy.deepcopy(global_checks)
|
|
|
found_cfg = find_local_appconfig(appdir, appconfigs)
|
|
|
@@ -170,10 +177,13 @@ class nsdk_bench(nsdk_runner):
|
|
|
app_checks.update(appcfg.get("checks", dict()))
|
|
|
if "build_target" in appcfg:
|
|
|
app_buildtarget = appcfg["build_target"]
|
|
|
+ if "parallel" in appcfg:
|
|
|
+ app_parallel = appcfg["parallel"]
|
|
|
else: # if merge_global is false, then use app config only
|
|
|
app_buildcfg = appcfg.get("build_config", dict())
|
|
|
app_buildcfgs = appcfg.get("build_configs", dict())
|
|
|
app_buildtarget = appcfg.get("build_target", "clean all")
|
|
|
+ app_parallel = appcfg.get("parallel", "")
|
|
|
app_runcfg = appcfg.get("run_config", dict())
|
|
|
app_checks = appcfg.get("checks", dict())
|
|
|
|
|
|
@@ -192,7 +202,7 @@ class nsdk_bench(nsdk_runner):
|
|
|
percfg_appbuildcfg = copy.deepcopy(app_buildcfg)
|
|
|
percfg_appbuildcfg.update(app_buildcfgs[cfgname])
|
|
|
app_allconfigs["configs"][cfgname] = {"build_config": percfg_appbuildcfg, "build_target": app_buildtarget, \
|
|
|
- "run_config": app_runcfg, "checks": app_checks, \
|
|
|
+ "parallel": app_parallel, "run_config": app_runcfg, "checks": app_checks, \
|
|
|
"logs": {"build": app_buildlogfile, "run": app_runlogfile}}
|
|
|
|
|
|
apps_config[appdir] = copy.deepcopy(app_allconfigs)
|
|
|
@@ -212,10 +222,11 @@ def merge_config(appcfg, hwcfg):
|
|
|
if isinstance(appcfg, dict) == False and isinstance(hwcfg, dict) == True:
|
|
|
return hwcfg
|
|
|
merged_appcfg = copy.deepcopy(appcfg)
|
|
|
- merged_appcfg.update(hwcfg)
|
|
|
+ #merged_appcfg.update(hwcfg) # this one don't update the dict recursively
|
|
|
+ dict_merge(merged_appcfg, hwcfg)
|
|
|
return merged_appcfg
|
|
|
|
|
|
-def merge_cmd_config(config, serport, baudrate, make_options):
|
|
|
+def merge_cmd_config(config, serport, baudrate, make_options, parallel=None):
|
|
|
if isinstance(config, dict) == False:
|
|
|
return None
|
|
|
new_config = copy.deepcopy(config)
|
|
|
@@ -237,6 +248,8 @@ def merge_cmd_config(config, serport, baudrate, make_options):
|
|
|
new_config["run_config"]["hardware"]["baudrate"] = int(baudrate)
|
|
|
else:
|
|
|
new_config["run_config"]["hardware"] = {"serport": "/dev/ttyUSB1", "baudrate": int(baudrate)}
|
|
|
+ if parallel is not None:
|
|
|
+ new_config["parallel"] = parallel
|
|
|
if make_options:
|
|
|
opt_splits=make_options.strip().split()
|
|
|
passed_buildcfg = dict()
|
|
|
@@ -263,6 +276,7 @@ if __name__ == '__main__':
|
|
|
parser.add_argument('--serport', help="Serial port for monitor, if not specified, it will use the specified by appcfg and hwcfg")
|
|
|
parser.add_argument('--baudrate', help="Serial port baudrate for monitor, it will use the specified by appcfg and hwcfg")
|
|
|
parser.add_argument('--make_options', help="Extra make options passed to overwrite default build configuration passed via appcfg and hwcfg")
|
|
|
+ parser.add_argument('--parallel', help="parallel value, such as -j4 or -j or -j8, default None")
|
|
|
parser.add_argument('--run', action='store_true', help="If specified, will do run not build process")
|
|
|
parser.add_argument('--verbose', action='store_true', help="If specified, will show detailed build/run messsage")
|
|
|
args = parser.parse_args()
|
|
|
@@ -278,13 +292,14 @@ if __name__ == '__main__':
|
|
|
# Merge appcfg and hwcfg, hwcfg has higher priority
|
|
|
config = merge_config(appcfg, hwcfg)
|
|
|
# Merge options passed by serport, baudrate, make_options
|
|
|
- config = merge_cmd_config(config, args.serport, args.baudrate, args.make_options)
|
|
|
+ config = merge_cmd_config(config, args.serport, args.baudrate, args.make_options, args.parallel)
|
|
|
|
|
|
nsdk_ext = nsdk_bench()
|
|
|
if args.run:
|
|
|
cmdsts, result = nsdk_ext.run_apps(config, args.verbose, args.logdir, False)
|
|
|
else:
|
|
|
cmdsts, result = nsdk_ext.build_apps(config, args.verbose, args.logdir, False)
|
|
|
+
|
|
|
runtime = round(time.time() - start_time, 2)
|
|
|
print("Applications specified in %s build or run status: %s, time cost %s seconds" % (args.appcfg, cmdsts, runtime))
|
|
|
ret = check_expected(result, config, args.run)
|
|
|
@@ -294,14 +309,18 @@ if __name__ == '__main__':
|
|
|
# Generate build or run report
|
|
|
rptfile = os.path.join(args.logdir, "report.md")
|
|
|
generate_report(config, result, rptfile, args.logdir, args.run)
|
|
|
- print("App, Case, build, run, total, text, data, bss")
|
|
|
+ csvfile = os.path.join(args.logdir, "result.csv")
|
|
|
+ csvstrings = "App, Case, build, run, total, text, data, bss\n"
|
|
|
for app in result:
|
|
|
size_of_all_cases = result[app]
|
|
|
for case in size_of_all_cases:
|
|
|
size = size_of_all_cases[case]["size"]
|
|
|
app_status = size_of_all_cases[case]["status"]
|
|
|
- print("%s, %s, %s, %s, %d, %d, %d, %d" % (app, case, app_status["build"], app_status.get("run", False), \
|
|
|
- size["total"], size["text"], size["data"], size["bss"]))
|
|
|
+ csvstrings += "%s, %s, %s, %s, %d, %d, %d, %d\n" % (app, case, app_status["build"], app_status.get("run", False), \
|
|
|
+ size["total"], size["text"], size["data"], size["bss"])
|
|
|
+ with open(csvfile, "w") as cf:
|
|
|
+ cf.write(csvstrings)
|
|
|
+ print(csvstrings)
|
|
|
# Exit with ret value
|
|
|
if ret:
|
|
|
sys.exit(0)
|