浏览代码

Add options to use scons caching for faster iteration.

Sort the sets in source generation so they are generated consistently between runs; otherwise caching is useless.
Emilien Bauer 2 年之前
父节点
当前提交
8e717acf48
共有 3 个文件被更改,包括 21 次插入1 次删除
  1. 3 0
      .gitignore
  2. 8 1
      SConstruct
  3. 10 0
      binding_generator.py

+ 3 - 0
.gitignore

@@ -12,6 +12,9 @@ src/gen
 logs/*
 *.log
 
+# The default cache directory
+cache/
+
 # Binaries
 *.o
 *.os

+ 8 - 1
SConstruct

@@ -168,12 +168,19 @@ else:
     json_api_file = os.path.join(os.getcwd(), env["headers_dir"], "extension_api.json")
 
 bindings = env.GenerateBindings(
-    env.Dir("."), [json_api_file, os.path.join(env["headers_dir"], "godot", "gdnative_interface.h")]
+    env.Dir("."),
+    [json_api_file, os.path.join(env["headers_dir"], "godot", "gdnative_interface.h"), "binding_generator.py"],
 )
 
+scons_cache_path = os.environ.get("SCONS_CACHE")
+if scons_cache_path is not None:
+    CacheDir(scons_cache_path)
+    Decider("MD5")
+
 # Forces bindings regeneration.
 if env["generate_bindings"]:
     AlwaysBuild(bindings)
+    NoCache(bindings)
 
 # Includes
 env.Append(CPPPATH=[[env.Dir(d) for d in [env["headers_dir"], "include", os.path.join("gen", "include")]]])

+ 10 - 0
binding_generator.py

@@ -204,6 +204,11 @@ def generate_builtin_bindings(api, output_dir, build_config):
             if type_name in used_classes:
                 used_classes.remove(type_name)
 
+        used_classes = list(used_classes)
+        used_classes.sort()
+        fully_used_classes = list(fully_used_classes)
+        fully_used_classes.sort()
+
         with header_filename.open("w+") as header_file:
             header_file.write(generate_builtin_class_header(builtin_api, size, used_classes, fully_used_classes))
 
@@ -888,6 +893,11 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
             if type_name in used_classes:
                 used_classes.remove(type_name)
 
+        used_classes = list(used_classes)
+        used_classes.sort()
+        fully_used_classes = list(fully_used_classes)
+        fully_used_classes.sort()
+
         with header_filename.open("w+") as header_file:
             header_file.write(
                 generate_engine_class_header(class_api, used_classes, fully_used_classes, use_template_get_node)