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)