From 0c29a6f295a21a005dc0688cb765f3d24820ee92 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Sat, 17 Dec 2022 15:37:49 +0100 Subject: [PATCH] Use builder instead of direct function call for generating unity sources. --- unity_build.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/unity_build.py b/unity_build.py index 05ff320..b822ff7 100644 --- a/unity_build.py +++ b/unity_build.py @@ -55,6 +55,13 @@ def generate(env : Environment): env.AddMethod(_make_generator(env.Library), 'UnityLibrary') env.AddMethod(_make_generator(env.StaticLibrary), 'UnityStaticLibrary') env.AddMethod(_make_generator(env.SharedLibrary), 'UnitySharedLibrary') + + # build for generating the unity source files + unity_source_builder = env.Builder( + action = Action.Action(_generate_unity_file, _generate_unity_file_msg) + ) + env.Append(BUILDERS = {'UnitySource': unity_source_builder}) + env.SetDefault(UNITY_CACHE_DIR = '.unity') env.SetDefault(UNITY_MAX_SOURCES = 15) env.SetDefault(UNITY_MIN_FILES = env.GetOption('num_jobs')) @@ -85,7 +92,10 @@ def _make_generator(base_generator): unity_source_files.append(unity_filename) begin = sources_per_file*idx end = sources_per_file*(idx+1) - _generate_unity_file(unity_filename, source_files[begin:end]) + env.UnitySource( + target = unity_filename, + source = source_files[begin:end] + ) if len(other_nodes) > 0: print(f'Exluded {len(other_nodes)} node(s) from Unity build.') @@ -109,10 +119,15 @@ def _flatten_source(source : list): return source_files, other_nodes -def _generate_unity_file(unity_filename : str, sources : list): - print(f'Generating {unity_filename} from {len(sources)} source files.') +def _generate_unity_file_msg(target, source, env : Environment): + assert(len(target) == 1) + return f'Generating {str(target[0])} from {len(source)} source files.' +def _generate_unity_file(target, source, env : Environment): + assert(len(target) == 1) + + unity_filename = target[0].abspath with open(unity_filename, 'w') as f: - for source in sources: - fpath = os.path.abspath(source).replace("\\", "\\\\") + for source_file in source: + fpath = source_file.abspath.replace("\\", "\\\\") f.write(f'#include "{fpath}"\n')