From fe95f96096838fdcdb0b9f8d160f552d4ba026d2 Mon Sep 17 00:00:00 2001 From: Tyler Yankee Date: Sun, 25 Oct 2026 19:31:05 -0400 Subject: [PATCH] Ninja Multi-Config: Fix cross-config codegen target suffix The target that runs codegen for all cross-configs was named `codegen:codegen`. Name it `codegen:all` to follow the documented `:all` convention, as the `all` target already does. Amends commit 197cb419d1 (add_custom_command: Add CODEGEN support, 2024-05-27, v3.31.0-rc1~394^2). --- Source/cmGlobalNinjaGenerator.cxx | 3 +-- Tests/RunCMake/Codegen/RunCMakeTest.cmake | 17 +++++++++++++++++ .../Codegen/per-config-all-build-check.cmake | 6 ++++++ .../per-config-default-build-check.cmake | 5 +++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/Codegen/per-config-all-build-check.cmake create mode 100644 Tests/RunCMake/Codegen/per-config-default-build-check.cmake diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 9cc1eaae2a..2815cc46b8 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -1959,8 +1959,7 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os) build.ExplicitDeps.push_back( this->BuildAlias(buildDirCodegenTarget, config)); } - build.Outputs.front() = - this->BuildAlias(buildDirCodegenTarget, "codegen"); + build.Outputs.front() = this->BuildAlias(buildDirCodegenTarget, "all"); this->WriteBuild(os, build); } } diff --git a/Tests/RunCMake/Codegen/RunCMakeTest.cmake b/Tests/RunCMake/Codegen/RunCMakeTest.cmake index cec1dc7610..eaeb2bfb96 100644 --- a/Tests/RunCMake/Codegen/RunCMakeTest.cmake +++ b/Tests/RunCMake/Codegen/RunCMakeTest.cmake @@ -32,10 +32,27 @@ run_codegen("add-dependencies-not-all") block() if(RunCMake_GENERATOR_IS_MULTI_CONFIG) set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release") + if(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config") + list(APPEND RunCMake_TEST_OPTIONS + -DCMAKE_CROSS_CONFIGS=all + -DCMAKE_DEFAULT_BUILD_TYPE=Release + ) + endif() else() set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug) endif() run_codegen("per-config") + + if(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config") + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/per-config-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(per-config-default-build ${CMAKE_COMMAND} --build . --target codegen) + file(REMOVE_RECURSE + ${RunCMake_TEST_BINARY_DIR}/Debug + ${RunCMake_TEST_BINARY_DIR}/Release + ) + run_cmake_command(per-config-all-build ${CMAKE_COMMAND} --build . --target codegen:all) + endif() endblock() # Error handling diff --git a/Tests/RunCMake/Codegen/per-config-all-build-check.cmake b/Tests/RunCMake/Codegen/per-config-all-build-check.cmake new file mode 100644 index 0000000000..3a319ac9cd --- /dev/null +++ b/Tests/RunCMake/Codegen/per-config-all-build-check.cmake @@ -0,0 +1,6 @@ +foreach(config IN ITEMS Debug Release) + set(filename "${RunCMake_TEST_BINARY_DIR}/${config}/generated.h") + if (NOT EXISTS "${filename}") + string(APPEND RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}\n") + endif() +endforeach() diff --git a/Tests/RunCMake/Codegen/per-config-default-build-check.cmake b/Tests/RunCMake/Codegen/per-config-default-build-check.cmake new file mode 100644 index 0000000000..e3e3cb9d93 --- /dev/null +++ b/Tests/RunCMake/Codegen/per-config-default-build-check.cmake @@ -0,0 +1,5 @@ +set(filename "${RunCMake_TEST_BINARY_DIR}/Release/generated.h") +if (NOT EXISTS "${filename}") + set(RunCMake_TEST_FAILED "expected file NOT created:\n ${filename}") + return() +endif()