diff --git a/platformio/builder/main.py b/platformio/builder/main.py index ea8b202b3e..543b14cf3a 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -148,7 +148,7 @@ click.echo("Verbose mode can be enabled via `-v, --verbose` option") # Dynamically load dependent tools -if "compiledb" in COMMAND_LINE_TARGETS: +if "compiledb" or "compiledbtc" in COMMAND_LINE_TARGETS: env.Tool("compilation_db") if not os.path.isdir(env.subst("$BUILD_DIR")): @@ -195,6 +195,9 @@ if "compiledb" in COMMAND_LINE_TARGETS: env.Alias("compiledb", env.CompilationDatabase("$COMPILATIONDB_PATH")) +if "compiledbtc" in COMMAND_LINE_TARGETS: + env.Alias("compiledbtc", env.CompilationDatabase("$COMPILATIONDB_PATH")) + # Print configured protocols env.AddPreAction( "upload", diff --git a/platformio/builder/tools/piobuild.py b/platformio/builder/tools/piobuild.py index b3d650a5d7..0885e72dac 100644 --- a/platformio/builder/tools/piobuild.py +++ b/platformio/builder/tools/piobuild.py @@ -127,25 +127,39 @@ def _append_pio_macros(): env.ProcessUnFlags(env.get("BUILD_UNFLAGS")) env.ProcessCompileDbToolchainOption() + env.ProcessCompileDbIncludeToolchainOption() + + +def ProccessCompileDb(env, include_toolchain=False): + # Resolve absolute path of toolchain + for cmd in ("CC", "CXX", "AS"): + if cmd not in env: + continue + if os.path.isabs(env[cmd]): + continue + env[cmd] = where_is_program( + env.subst("$%s" % cmd), env.subst("${ENV['PATH']}") + ) + + if include_toolchain: + for scope, includes in env.DumpIntegrationIncludes().items(): + if scope in ("toolchain",): + env.Append(CPPPATH=includes) def ProcessCompileDbToolchainOption(env): if "compiledb" in COMMAND_LINE_TARGETS: - # Resolve absolute path of toolchain - for cmd in ("CC", "CXX", "AS"): - if cmd not in env: - continue - if os.path.isabs(env[cmd]): - continue - env[cmd] = where_is_program( - env.subst("$%s" % cmd), env.subst("${ENV['PATH']}") - ) + ProccessCompileDb(env) + + if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"): + print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping") + print("Use 'pio run -t compiledbtc' instead.") + ProccessCompileDb(env, include_toolchain=True) + - if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"): - print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping") - for scope, includes in env.DumpIntegrationIncludes().items(): - if scope in ("toolchain",): - env.Append(CPPPATH=includes) +def ProcessCompileDbIncludeToolchainOption(env): + if "compiledbtc" in COMMAND_LINE_TARGETS: + ProccessCompileDb(env, include_toolchain=True) def ProcessProjectDeps(env): @@ -382,6 +396,7 @@ def generate(env): env.AddMethod(BuildProgram) env.AddMethod(ProcessProgramDeps) env.AddMethod(ProcessCompileDbToolchainOption) + env.AddMethod(ProcessCompileDbIncludeToolchainOption) env.AddMethod(ProcessProjectDeps) env.AddMethod(ParseFlagsExtended) env.AddMethod(ProcessFlags) diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index ca9c9f1e04..6a3f71341f 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -497,6 +497,7 @@ def build(self): self.env.PrependUnique(CPPPATH=self.get_include_dirs()) self.env.ProcessCompileDbToolchainOption() + self.env.ProcessCompileDbIncludeToolchainOption() if self.lib_ldf_mode == "off": for lb in self.env.GetLibBuilders(): diff --git a/platformio/builder/tools/piomaxlen.py b/platformio/builder/tools/piomaxlen.py index 8d45317cc2..1656a13304 100644 --- a/platformio/builder/tools/piomaxlen.py +++ b/platformio/builder/tools/piomaxlen.py @@ -70,7 +70,7 @@ def _file_long_data(env, data): def exists(env): - return "compiledb" not in COMMAND_LINE_TARGETS and not env.IsIntegrationDump() + return "compiledb" and "compiledbtc" not in COMMAND_LINE_TARGETS and not env.IsIntegrationDump() def generate(env):