瀏覽代碼

Merge pull request #78959 from lawnjelly/scu_limit

SCons : Add "scu_limit" argument
Rémi Verschelde 2 年之前
父節點
當前提交
2757c2a495
共有 2 個文件被更改,包括 23 次插入12 次删除
  1. 11 1
      SConstruct
  2. 12 11
      scu_builders.py

+ 11 - 1
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("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(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
 # Thirdparty libraries
 opts.Add(BoolVariable("builtin_brotli", "Use the built-in Brotli library", True))
 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.
     # Run SCU file generation script if in a SCU build.
     if env["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
     # Must happen after the flags' definition, as configure is when most flags
     # are actually handled to change compile options, etc.
     # are actually handled to change compile options, etc.

+ 12 - 11
scu_builders.py

@@ -8,8 +8,8 @@ from os.path import normpath, basename
 base_folder_path = str(Path(__file__).parent) + "/"
 base_folder_path = str(Path(__file__).parent) + "/"
 base_folder_only = os.path.basename(os.path.normpath(base_folder_path))
 base_folder_only = os.path.basename(os.path.normpath(base_folder_path))
 _verbose = False
 _verbose = False
-_is_release_build = False
 _scu_folders = set()
 _scu_folders = set()
+_max_includes_per_scu = 1024
 
 
 
 
 def clear_out_existing_files(output_folder, extension):
 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
     # adjust number of output files according to whether DEV or release
     num_output_files = 1
     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:
     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 = math.ceil(total_lines / float(num_output_files))
     lines_per_file = max(lines_per_file, 1)
     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("=============================")
     print("Single Compilation Unit Build")
     print("Single Compilation Unit Build")
     print("=============================")
     print("=============================")
-    print("Generating SCU build files")
     global _verbose
     global _verbose
     _verbose = 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("./")
     curr_folder = os.path.abspath("./")