Browse Source

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)
Rémi Verschelde 3 years ago
parent
commit
6dbb67cc73
1 changed files with 9 additions and 6 deletions
  1. 9 6
      SConstruct

+ 9 - 6
SConstruct

@@ -133,6 +133,7 @@ opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursi
 # Advanced options
 # Advanced options
 opts.Add(BoolVariable("dev", "If yes, alias for verbose=yes warnings=extra werror=yes", False))
 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("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("verbose", "Enable verbose output for the compilation", False))
 opts.Add(BoolVariable("progress", "Show a progress indicator during compilation", True))
 opts.Add(BoolVariable("progress", "Show a progress indicator during compilation", True))
 opts.Add(EnumVariable("warnings", "Level of compilation warnings", "all", ("extra", "all", "moderate", "no")))
 opts.Add(EnumVariable("warnings", "Level of compilation warnings", "all", ("extra", "all", "moderate", "no")))
@@ -360,14 +361,15 @@ if selected_platform in platform_list:
     else:
     else:
         env = env_base.Clone()
         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
     # 'dev' and 'production' are aliases to set default options if they haven't been set
     # manually by the user.
     # 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.
 # The following only makes sense when the 'env' is defined, and assumes it is.
 if "env" in locals():
 if "env" in locals():
+    # FIXME: This method mixes both cosmetic progress stuff and cache handling...
     methods.show_progress(env)
     methods.show_progress(env)
     # TODO: replace this with `env.Dump(format="json")`
     # TODO: replace this with `env.Dump(format="json")`
     # once we start requiring SCons 4.0 as min version.
     # once we start requiring SCons 4.0 as min version.