FASTBuild: generate compile_commands

If `CMAKE_EXPORT_COMPILE_COMMANDS` is set use FASTBuild's `-compdb`
option in order to generate `compile_commands.json` file.

Fixes: #27345
This commit is contained in:
Eduard Voronkin
2025-10-29 12:05:15 -07:00
committed by Brad King
parent d98c9bf2cc
commit 5e25ee691a
3 changed files with 14 additions and 4 deletions

View File

@@ -477,11 +477,18 @@ void cmGlobalFastbuildGenerator::Generate()
this->GetCMakeInstance()->GetIsInTryCompile()) {
return;
}
std::string const workingDir =
this->GetCMakeInstance()->GetHomeOutputDirectory();
// Make "rebuild-bff" target up-to-date after the generation.
// This is actually a noop, it just asks CMake to touch the generated file
// so FASTBuild would consider the target as up-to-date.
AskCMakeToMakeRebuildBFFUpToDate(
this->GetCMakeInstance()->GetHomeOutputDirectory());
AskCMakeToMakeRebuildBFFUpToDate(workingDir);
if (this->GlobalSettingIsOn("CMAKE_EXPORT_COMPILE_COMMANDS")) {
std::string output;
ExecuteFastbuildTarget(workingDir, FASTBUILD_ALL_TARGET_NAME, output,
{ "-compdb" });
}
}
void cmGlobalFastbuildGenerator::AskCMakeToMakeRebuildBFFUpToDate(

View File

@@ -407,7 +407,7 @@ add_RunCMake_test(Configure -DMSVC_IDE=${MSVC_IDE})
add_RunCMake_test(CpsExportImportBuild)
add_RunCMake_test(CpsExportImportInstall)
add_RunCMake_test(DisallowedCommands)
if("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
if("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja|FASTBuild")
add_RunCMake_test(ExportCompileCommands)
endif()
add_RunCMake_test(ExcludeFromAll)

View File

@@ -9,4 +9,7 @@ endif()
run_cmake_with_options(BeforeProject -DCMAKE_PROJECT_INCLUDE_BEFORE=BeforeProjectBEFORE.cmake)
run_cmake(CustomCompileRule)
run_cmake(Properties)
run_cmake(PropertiesGenerateCommand)
if(NOT RunCMake_GENERATOR STREQUAL "FASTBuild")
run_cmake(PropertiesGenerateCommand)
endif()