From 8e717acf48573ee6bdbb2f321e41e48124731cf8 Mon Sep 17 00:00:00 2001 From: Emilien Bauer Date: Tue, 13 Sep 2022 10:37:58 +0200 Subject: [PATCH] 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. --- .gitignore | 3 +++ SConstruct | 9 ++++++++- binding_generator.py | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8589f20d..05e3fd08 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ src/gen logs/* *.log +# The default cache directory +cache/ + # Binaries *.o *.os diff --git a/SConstruct b/SConstruct index ef1a92a1..34d07bec 100644 --- a/SConstruct +++ b/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")]]]) diff --git a/binding_generator.py b/binding_generator.py index 3cf4ae57..cd61a57c 100644 --- a/binding_generator.py +++ b/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)