From 6dbb67cc7379e18a535bfa44aa3ddb647290dd77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 8 Feb 2022 21:46:47 +0100 Subject: [PATCH] SCons: Make compilation database generation optional Saves around 3 s on incremental rebuilds to have it disabled by default. Can be enabled with `compiledb=yes`. (cherry picked from commit f94df6fa2b59f688761988362607ee40455e8e3b) --- SConstruct | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/SConstruct b/SConstruct index 099adc3823..cc37f3d5e3 100644 --- a/SConstruct +++ b/SConstruct @@ -133,6 +133,7 @@ opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursi # Advanced options opts.Add(BoolVariable("dev", "If yes, alias for verbose=yes warnings=extra werror=yes", False)) opts.Add(BoolVariable("fast_unsafe", "Enable unsafe options for faster rebuilds", False)) +opts.Add(BoolVariable("compiledb", "Generate compilation DB (`compile_commands.json`) for external tools", False)) opts.Add(BoolVariable("verbose", "Enable verbose output for the compilation", False)) opts.Add(BoolVariable("progress", "Show a progress indicator during compilation", True)) opts.Add(EnumVariable("warnings", "Level of compilation warnings", "all", ("extra", "all", "moderate", "no"))) @@ -360,14 +361,15 @@ if selected_platform in platform_list: else: env = env_base.Clone() - # Generating the compilation DB (`compile_commands.json`) requires SCons 4.0.0 or later. - from SCons import __version__ as scons_raw_version + if env["compiledb"]: + # Generating the compilation DB (`compile_commands.json`) requires SCons 4.0.0 or later. + from SCons import __version__ as scons_raw_version - scons_ver = env._get_major_minor_revision(scons_raw_version) + scons_ver = env._get_major_minor_revision(scons_raw_version) - if scons_ver >= (4, 0, 0): - env.Tool("compilation_db") - env.Alias("compiledb", env.CompilationDatabase()) + if scons_ver >= (4, 0, 0): + env.Tool("compilation_db") + env.Alias("compiledb", env.CompilationDatabase()) # 'dev' and 'production' are aliases to set default options if they haven't been set # manually by the user. @@ -720,6 +722,7 @@ elif selected_platform != "": # The following only makes sense when the 'env' is defined, and assumes it is. if "env" in locals(): + # FIXME: This method mixes both cosmetic progress stuff and cache handling... methods.show_progress(env) # TODO: replace this with `env.Dump(format="json")` # once we start requiring SCons 4.0 as min version.