diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-08 16:56:21 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-08 16:56:21 +0200 |
commit | 2757c2a495713e48d3d72fbddf3f8d593f9ee669 (patch) | |
tree | 293b81f8bb86e02670e0f7a154b546064820abf6 | |
parent | 60d6e14323ed83ba9eb390b10099a0035b31c15d (diff) | |
parent | 7b830ebdc1ddb7b8ee8345f2aaf755d551f734f6 (diff) | |
download | redot-engine-2757c2a495713e48d3d72fbddf3f8d593f9ee669.tar.gz |
Merge pull request #78959 from lawnjelly/scu_limit
SCons : Add "scu_limit" argument
-rw-r--r-- | SConstruct | 12 | ||||
-rw-r--r-- | scu_builders.py | 23 |
2 files changed, 23 insertions, 12 deletions
diff --git a/SConstruct b/SConstruct index f82c9c656e..6968967380 100644 --- a/SConstruct +++ b/SConstruct @@ -220,6 +220,7 @@ opts.Add( ) opts.Add(BoolVariable("use_precise_math_checks", "Math checks use very precise epsilon (debug option)", False)) opts.Add(BoolVariable("scu_build", "Use single compilation unit build", False)) +opts.Add("scu_limit", "Max includes per SCU file when using scu_build (determines RAM use)", "0") # Thirdparty libraries opts.Add(BoolVariable("builtin_brotli", "Use the built-in Brotli library", True)) @@ -551,7 +552,16 @@ if selected_platform in platform_list: # Run SCU file generation script if in a SCU build. if env["scu_build"]: - methods.set_scu_folders(scu_builders.generate_scu_files(env["verbose"], env_base.dev_build == False)) + max_includes_per_scu = 8 + if env_base.dev_build == True: + max_includes_per_scu = 1024 + + read_scu_limit = int(env["scu_limit"]) + read_scu_limit = max(0, min(read_scu_limit, 1024)) + if read_scu_limit != 0: + max_includes_per_scu = read_scu_limit + + methods.set_scu_folders(scu_builders.generate_scu_files(env["verbose"], max_includes_per_scu)) # Must happen after the flags' definition, as configure is when most flags # are actually handled to change compile options, etc. diff --git a/scu_builders.py b/scu_builders.py index 5f7821655b..e76a58bd88 100644 --- a/scu_builders.py +++ b/scu_builders.py @@ -8,8 +8,8 @@ from os.path import normpath, basename base_folder_path = str(Path(__file__).parent) + "/" base_folder_only = os.path.basename(os.path.normpath(base_folder_path)) _verbose = False -_is_release_build = False _scu_folders = set() +_max_includes_per_scu = 1024 def clear_out_existing_files(output_folder, extension): @@ -197,13 +197,14 @@ def process_folder(folders, sought_exceptions=[], includes_per_scu=0, extension= # adjust number of output files according to whether DEV or release num_output_files = 1 - if _is_release_build: - # always have a maximum in release - includes_per_scu = 8 - num_output_files = max(math.ceil(total_lines / float(includes_per_scu)), 1) + + if includes_per_scu == 0: + includes_per_scu = _max_includes_per_scu else: - if includes_per_scu > 0: - num_output_files = max(math.ceil(total_lines / float(includes_per_scu)), 1) + if includes_per_scu > _max_includes_per_scu: + includes_per_scu = _max_includes_per_scu + + num_output_files = max(math.ceil(total_lines / float(includes_per_scu)), 1) lines_per_file = math.ceil(total_lines / float(num_output_files)) lines_per_file = max(lines_per_file, 1) @@ -241,15 +242,15 @@ def process_folder(folders, sought_exceptions=[], includes_per_scu=0, extension= ) -def generate_scu_files(verbose, is_release_build): +def generate_scu_files(verbose, max_includes_per_scu): print("=============================") print("Single Compilation Unit Build") print("=============================") - print("Generating SCU build files") global _verbose _verbose = verbose - global _is_release_build - _is_release_build = is_release_build + global _max_includes_per_scu + _max_includes_per_scu = max_includes_per_scu + print("Generating SCU build files... (max includes per scu " + str(_max_includes_per_scu) + ")") curr_folder = os.path.abspath("./") |