diff options
32 files changed, 169 insertions, 14 deletions
diff --git a/Help/command/add_compile_definitions.rst b/Help/command/add_compile_definitions.rst index ad1fc43..b2eb2af 100644 --- a/Help/command/add_compile_definitions.rst +++ b/Help/command/add_compile_definitions.rst @@ -21,6 +21,9 @@ Function-style definitions are not supported. CMake will automatically escape the value correctly for the native build system (note that CMake language syntax may require escapes to specify some values). +.. versionadded:: 3.26 + Any leading ``-D`` on an item will be removed. + .. |command_name| replace:: ``add_compile_definitions`` .. include:: GENEX_NOTE.txt diff --git a/Help/prop_dir/COMPILE_DEFINITIONS.rst b/Help/prop_dir/COMPILE_DEFINITIONS.rst index 18f4567..5a12c1e 100644 --- a/Help/prop_dir/COMPILE_DEFINITIONS.rst +++ b/Help/prop_dir/COMPILE_DEFINITIONS.rst @@ -19,6 +19,9 @@ directory's parent. CMake will automatically drop some definitions that are not supported by the native build tool. +.. versionadded:: 3.26 + Any leading ``-D`` on an item will be removed. + .. include:: /include/COMPILE_DEFINITIONS_DISCLAIMER.txt Contents of ``COMPILE_DEFINITIONS`` may use "generator expressions" with diff --git a/Help/prop_sf/COMPILE_DEFINITIONS.rst b/Help/prop_sf/COMPILE_DEFINITIONS.rst index 6317690..2af896e 100644 --- a/Help/prop_sf/COMPILE_DEFINITIONS.rst +++ b/Help/prop_sf/COMPILE_DEFINITIONS.rst @@ -16,6 +16,9 @@ CMake will automatically drop some definitions that are not supported by the native build tool. Xcode does not support per-configuration definitions on source files. +.. versionadded:: 3.26 + Any leading ``-D`` on an item will be removed. + .. include:: /include/COMPILE_DEFINITIONS_DISCLAIMER.txt Contents of ``COMPILE_DEFINITIONS`` may use :manual:`cmake-generator-expressions(7)` diff --git a/Help/prop_tgt/COMPILE_DEFINITIONS.rst b/Help/prop_tgt/COMPILE_DEFINITIONS.rst index 059f913..c128a9b 100644 --- a/Help/prop_tgt/COMPILE_DEFINITIONS.rst +++ b/Help/prop_tgt/COMPILE_DEFINITIONS.rst @@ -13,6 +13,9 @@ values). CMake will automatically drop some definitions that are not supported by the native build tool. +.. versionadded:: 3.26 + Any leading ``-D`` on an item will be removed. + .. include:: /include/COMPILE_DEFINITIONS_DISCLAIMER.txt Contents of ``COMPILE_DEFINITIONS`` may use "generator expressions" with the diff --git a/Help/release/3.25.rst b/Help/release/3.25.rst index fdf8a94..e76a308 100644 --- a/Help/release/3.25.rst +++ b/Help/release/3.25.rst @@ -246,3 +246,9 @@ Changes made since CMake 3.25.0 include the following. command no longer accepts ``.a`` file names. This behavior was added in CMake 3.25.0, but has been reverted due finding GNU-ABI libraries in cases we did not previously. + +3.25.2 +------ + +* CUDA language level 20 (corresponding to C++20) is now supported with + NVCC 12.0 and above. diff --git a/Help/release/dev/COMPILE_DEFINITIONS-property-cleanup.rst b/Help/release/dev/COMPILE_DEFINITIONS-property-cleanup.rst new file mode 100644 index 0000000..e24bc26 --- /dev/null +++ b/Help/release/dev/COMPILE_DEFINITIONS-property-cleanup.rst @@ -0,0 +1,6 @@ +COMPILE_DEFINITIONS-property-cleanup +------------------------------------ + +* For all ``COMPILE_DEFINITIONS`` properties, any leading ``-D`` on an item + will be removed regardless how to was defined: as is or inside a generator + expression. diff --git a/Modules/Compiler/NVIDIA-CUDA.cmake b/Modules/Compiler/NVIDIA-CUDA.cmake index 34dd09a..0823954 100644 --- a/Modules/Compiler/NVIDIA-CUDA.cmake +++ b/Modules/Compiler/NVIDIA-CUDA.cmake @@ -119,6 +119,13 @@ if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC") endif() endif() + if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 12.0) + if(CMAKE_CUDA_SIMULATE_VERSION VERSION_GREATER_EQUAL 19.11.25505) + set(CMAKE_CUDA20_STANDARD_COMPILE_OPTION "-std=c++20") + set(CMAKE_CUDA20_EXTENSION_COMPILE_OPTION "-std=c++20") + endif() + endif() + else() set(CMAKE_CUDA03_STANDARD_COMPILE_OPTION "") set(CMAKE_CUDA03_EXTENSION_COMPILE_OPTION "") @@ -138,6 +145,11 @@ else() set(CMAKE_CUDA17_EXTENSION_COMPILE_OPTION "-std=c++17") endif() + if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 12.0) + set(CMAKE_CUDA20_STANDARD_COMPILE_OPTION "-std=c++20") + set(CMAKE_CUDA20_EXTENSION_COMPILE_OPTION "-std=c++20") + endif() + endif() if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.0") diff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake index 5df31da..f104bfc 100644 --- a/Modules/FindCUDAToolkit.cmake +++ b/Modules/FindCUDAToolkit.cmake @@ -380,6 +380,18 @@ Targets Created: - ``CUDA::nvrtc`` +.. _`cuda_toolkit_nvjitlink`: + +nvJitLink +""""""""" + +The `nvJItLink <https://docs.nvidia.com/cuda/>`_ (Runtime LTO Linking) library. + +Targets Created: + +- ``CUDA::nvJitLink`` starting in CUDA 12.0 +- ``CUDA::nvJitLink_static`` starting in CUDA 12.0 + .. _`cuda_toolkit_nvml`: nvidia-ML @@ -1094,6 +1106,11 @@ if(CUDAToolkit_FOUND) endif() endif() + if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 12.0.0) + _CUDAToolkit_find_and_add_import_lib(nvJitLink DEPS cuda_driver) + _CUDAToolkit_find_and_add_import_lib(nvJitLink_static DEPS cuda_driver) + endif() + _CUDAToolkit_find_and_add_import_lib(nvml ALT nvidia-ml nvml) if(WIN32) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index a980320..b7bd660 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,7 +1,7 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 25) -set(CMake_VERSION_PATCH 20221209) +set(CMake_VERSION_PATCH 20221214) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx index f7c6a9c..5c48cbf 100644 --- a/Source/CTest/cmCTestCoverageHandler.cxx +++ b/Source/CTest/cmCTestCoverageHandler.cxx @@ -73,6 +73,7 @@ public: bool StartProcess() { std::vector<const char*> args; + args.reserve(this->CommandLineStrings.size()); for (std::string const& cl : this->CommandLineStrings) { args.push_back(cl.c_str()); } diff --git a/Source/cmCMakePresetsGraphReadJSON.cxx b/Source/cmCMakePresetsGraphReadJSON.cxx index eec53c1..a96ab58 100644 --- a/Source/cmCMakePresetsGraphReadJSON.cxx +++ b/Source/cmCMakePresetsGraphReadJSON.cxx @@ -518,9 +518,7 @@ cmCMakePresetsGraph::ReadFileResult cmCMakePresetsGraph::ReadJSONFile( PresetPair<ConfigurePreset> presetPair; presetPair.Unexpanded = preset; presetPair.Expanded = cm::nullopt; - if (!this->ConfigurePresets - .emplace(std::make_pair(preset.Name, presetPair)) - .second) { + if (!this->ConfigurePresets.emplace(preset.Name, presetPair).second) { return ReadFileResult::DUPLICATE_PRESETS; } diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx index 56221a5..d3683d4 100644 --- a/Source/cmFileAPICodemodel.cxx +++ b/Source/cmFileAPICodemodel.cxx @@ -448,6 +448,7 @@ class Target JBTs<T> ToJBTs(BTs<T> const& bts) { std::vector<JBTIndex> ids; + ids.reserve(bts.Backtraces.size()); for (cmListFileBacktrace const& backtrace : bts.Backtraces) { ids.emplace_back(this->Backtraces.Add(backtrace)); } diff --git a/Source/cmFileLockPool.cxx b/Source/cmFileLockPool.cxx index 99f6885..c23a99c 100644 --- a/Source/cmFileLockPool.cxx +++ b/Source/cmFileLockPool.cxx @@ -15,7 +15,7 @@ cmFileLockPool::~cmFileLockPool() = default; void cmFileLockPool::PushFunctionScope() { - this->FunctionScopes.push_back(ScopePool()); + this->FunctionScopes.emplace_back(); } void cmFileLockPool::PopFunctionScope() @@ -26,7 +26,7 @@ void cmFileLockPool::PopFunctionScope() void cmFileLockPool::PushFileScope() { - this->FileScopes.push_back(ScopePool()); + this->FileScopes.emplace_back(); } void cmFileLockPool::PopFileScope() diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index cfe4c7c..c24b1e3 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -2098,6 +2098,7 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) } std::vector<std::string> byproducts; + byproducts.reserve(this->CrossConfigs.size()); for (auto const& config : this->CrossConfigs) { byproducts.push_back( this->BuildAlias(GetByproductsForCleanTargetName(), config)); diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 6751efd..f19dfd5 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -3623,7 +3623,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target) } // Add a pair of config and item to target-item map auto& itemVector = targetItemMap[libName]; - itemVector.emplace_back(ConfigItemPair(configName, &libItem)); + itemVector.emplace_back(configName, &libItem); // Add product file-name to a lib-product map auto productName = cmSystemTools::GetFilenameName(libItem.Value.Value); @@ -4381,7 +4381,7 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( cmXCodeObject* config = this->CreateObject(cmXCodeObject::XCBuildConfiguration); config->AddAttribute("name", this->CreateString(name)); - configs.push_back(std::make_pair(name, config)); + configs.emplace_back(name, config); } if (defaultConfigName.empty()) { defaultConfigName = "Debug"; @@ -4995,7 +4995,13 @@ void cmGlobalXCodeGenerator::AppendDefines( std::string def; for (auto const& define : defines) { // Start with -D if requested. - def = cmStrCat(dflag ? "-D" : "", define); + if (dflag && !cmHasLiteralPrefix(define, "-D")) { + def = cmStrCat("-D", define); + } else if (!dflag && cmHasLiteralPrefix(define, "-D")) { + def = define.substr(2); + } else { + def = define; + } // Append the flag with needed escapes. std::string tmp; diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 5bf9d32..cedb367 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -3377,7 +3377,12 @@ void cmLocalGenerator::AppendDefines( if (!this->CheckDefinition(d.Value)) { continue; } - defines.insert(d); + // remove any leading -D + if (cmHasLiteralPrefix(d.Value, "-D")) { + defines.emplace(d.Value.substr(2), d.Backtrace); + } else { + defines.insert(d); + } } } diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 6f78a46..66e591e 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -970,8 +970,7 @@ bool cmQtAutoGenInitializer::InitScanFiles() uiHeader, uiHeaderGenex, cmStrCat(this->Dir.Build, "/include"_s), uiHeaderFilePath); - this->Uic.UiHeaders.emplace_back( - std::make_pair(uiHeader, uiHeaderGenex)); + this->Uic.UiHeaders.emplace_back(uiHeader, uiHeaderGenex); } else { // Register skipped .ui file this->Uic.SkipUi.insert(fullPath); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index d73e7cf..37f9e98 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2661,9 +2661,9 @@ cmFileSet* cmTarget::GetFileSet(const std::string& name) std::pair<cmFileSet*, bool> cmTarget::GetOrCreateFileSet( const std::string& name, const std::string& type, cmFileSetVisibility vis) { - auto result = this->impl->FileSets.emplace(std::make_pair( + auto result = this->impl->FileSets.emplace( name, - cmFileSet(*this->GetMakefile()->GetCMakeInstance(), name, type, vis))); + cmFileSet(*this->GetMakefile()->GetCMakeInstance(), name, type, vis)); if (result.second) { auto bt = this->impl->Makefile->GetBacktrace(); if (type == this->impl->HeadersFileSets.TypeName) { diff --git a/Source/cmUVProcessChain.cxx b/Source/cmUVProcessChain.cxx index 6040fd8..3faf2f6 100644 --- a/Source/cmUVProcessChain.cxx +++ b/Source/cmUVProcessChain.cxx @@ -241,6 +241,7 @@ bool cmUVProcessChain::InternalData::AddCommand( options.file = config.Arguments[0].c_str(); std::vector<const char*> arguments; + arguments.reserve(config.Arguments.size()); for (auto const& arg : config.Arguments) { arguments.push_back(arg.c_str()); } diff --git a/Tests/Cuda/Toolkit/CMakeLists.txt b/Tests/Cuda/Toolkit/CMakeLists.txt index e6b298d..b67aa32 100644 --- a/Tests/Cuda/Toolkit/CMakeLists.txt +++ b/Tests/Cuda/Toolkit/CMakeLists.txt @@ -22,6 +22,9 @@ set(cuda_libs cudart cuda_driver cublas cufft cufftw curand cusolver cusparse) if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 10.1) list(APPEND cuda_libs cublasLt) endif() +if(CUDAToolkit_VERSION_MAJOR VERSION_GREATER 11) + list(APPEND cuda_libs nvJitLink) +endif() if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11) list(APPEND cuda_libs nvgraph) endif() diff --git a/Tests/CudaOnly/Toolkit/CMakeLists.txt b/Tests/CudaOnly/Toolkit/CMakeLists.txt index ddf940b..e0801a3 100644 --- a/Tests/CudaOnly/Toolkit/CMakeLists.txt +++ b/Tests/CudaOnly/Toolkit/CMakeLists.txt @@ -20,10 +20,14 @@ set(cuda_libs cudart cuda_driver cublas cufft cufftw curand cusolver cusparse) if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 10.1) list(APPEND cuda_libs cublasLt) endif() +if(CUDAToolkit_VERSION_MAJOR VERSION_GREATER 11) + list(APPEND cuda_libs nvJitLink) +endif() if(CUDAToolkit_VERSION_MAJOR VERSION_LESS 11) list(APPEND cuda_libs nvgraph) endif() + # Verify that all the CUDA:: targets and variables exist foreach (cuda_lib IN LISTS cuda_libs) if(NOT CUDA_${cuda_lib}_LIBRARY) diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 78615d9..d5c07dd 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -693,6 +693,7 @@ add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_I set_property(TEST RunCMake.target_link_options APPEND PROPERTY LABELS "CUDA") +add_RunCMake_test(add_compile_definitions) add_RunCMake_test(target_compile_definitions) add_RunCMake_test(target_compile_features) add_RunCMake_test(target_compile_options diff --git a/Tests/RunCMake/CompileDefinitions/RemoveLeadingMinusD.cmake b/Tests/RunCMake/CompileDefinitions/RemoveLeadingMinusD.cmake new file mode 100644 index 0000000..3db6cff1f --- /dev/null +++ b/Tests/RunCMake/CompileDefinitions/RemoveLeadingMinusD.cmake @@ -0,0 +1,11 @@ + +enable_language(C) + +set_property(SOURCE foo.c PROPERTY COMPILE_DEFINITIONS -DDEF0 "$<1:-DDEF1>") + +add_library(lib1 foo.c) +set_property(TARGET lib1 PROPERTY COMPILE_DEFINITIONS -DDEF2 "$<1:-DDEF3>") +set_property(TARGET lib1 PROPERTY INTERFACE_COMPILE_DEFINITIONS -DDEF4 "$<1:-DDEF5>") + +add_library(lib2 foo.c) +target_link_libraries(lib2 PRIVATE lib1) diff --git a/Tests/RunCMake/CompileDefinitions/RunCMakeTest.cmake b/Tests/RunCMake/CompileDefinitions/RunCMakeTest.cmake index 233fe34..eebcd22 100644 --- a/Tests/RunCMake/CompileDefinitions/RunCMakeTest.cmake +++ b/Tests/RunCMake/CompileDefinitions/RunCMakeTest.cmake @@ -1,3 +1,16 @@ include(RunCMake) run_cmake(SetEmpty) + + +macro(run_cmake_build test) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test} ${CMAKE_COMMAND} --build . --config Release) + + unset(RunCMake_TEST_BINARY_DIR) + unset(RunCMake_TEST_NO_CLEAN) +endmacro() + +run_cmake(RemoveLeadingMinusD) +run_cmake_build(RemoveLeadingMinusD) diff --git a/Tests/RunCMake/CompileDefinitions/foo.c b/Tests/RunCMake/CompileDefinitions/foo.c new file mode 100644 index 0000000..74a86e1 --- /dev/null +++ b/Tests/RunCMake/CompileDefinitions/foo.c @@ -0,0 +1,4 @@ + +void foo() +{ +} diff --git a/Tests/RunCMake/add_compile_definitions/CMakeLists.txt b/Tests/RunCMake/add_compile_definitions/CMakeLists.txt new file mode 100644 index 0000000..14ef56e --- /dev/null +++ b/Tests/RunCMake/add_compile_definitions/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.11) + +project(${RunCMake_TEST} LANGUAGES NONE) + +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/add_compile_definitions/RunCMakeTest.cmake b/Tests/RunCMake/add_compile_definitions/RunCMakeTest.cmake new file mode 100644 index 0000000..27d77ef --- /dev/null +++ b/Tests/RunCMake/add_compile_definitions/RunCMakeTest.cmake @@ -0,0 +1,13 @@ +include(RunCMake) + +macro(run_cmake_build test) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test} ${CMAKE_COMMAND} --build . --config Release) + + unset(RunCMake_TEST_BINARY_DIR) + unset(RunCMake_TEST_NO_CLEAN) +endmacro() + +run_cmake(remove_leading_minusD) +run_cmake_build(remove_leading_minusD) diff --git a/Tests/RunCMake/add_compile_definitions/foo.c b/Tests/RunCMake/add_compile_definitions/foo.c new file mode 100644 index 0000000..74a86e1 --- /dev/null +++ b/Tests/RunCMake/add_compile_definitions/foo.c @@ -0,0 +1,4 @@ + +void foo() +{ +} diff --git a/Tests/RunCMake/add_compile_definitions/remove_leading_minusD.cmake b/Tests/RunCMake/add_compile_definitions/remove_leading_minusD.cmake new file mode 100644 index 0000000..0d94340 --- /dev/null +++ b/Tests/RunCMake/add_compile_definitions/remove_leading_minusD.cmake @@ -0,0 +1,6 @@ + +enable_language(C) + +add_compile_definitions(-DDEF0 "$<1:-DDEF1>") + +add_library(lib1 foo.c) diff --git a/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake b/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake index a419cc9..4dd01db 100644 --- a/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake +++ b/Tests/RunCMake/target_compile_definitions/RunCMakeTest.cmake @@ -2,3 +2,16 @@ include(RunCMake) run_cmake(empty_keyword_args) run_cmake(unknown_imported_target) + + +macro(run_cmake_build test) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${test} ${CMAKE_COMMAND} --build . --config Release) + + unset(RunCMake_TEST_BINARY_DIR) + unset(RunCMake_TEST_NO_CLEAN) +endmacro() + +run_cmake(remove_leading_minusD) +run_cmake_build(remove_leading_minusD) diff --git a/Tests/RunCMake/target_compile_definitions/foo.c b/Tests/RunCMake/target_compile_definitions/foo.c new file mode 100644 index 0000000..74a86e1 --- /dev/null +++ b/Tests/RunCMake/target_compile_definitions/foo.c @@ -0,0 +1,4 @@ + +void foo() +{ +} diff --git a/Tests/RunCMake/target_compile_definitions/remove_leading_minusD.cmake b/Tests/RunCMake/target_compile_definitions/remove_leading_minusD.cmake new file mode 100644 index 0000000..53c03c1 --- /dev/null +++ b/Tests/RunCMake/target_compile_definitions/remove_leading_minusD.cmake @@ -0,0 +1,9 @@ + +enable_language(C) + +add_library(lib1 foo.c) +target_compile_definitions(lib1 PRIVATE -DDEF0 "$<1:-DDEF1>") +target_compile_definitions(lib1 PUBLIC -DDEF2 "$<1:-DDEF3>") + +add_library(lib2 foo.c) +target_link_libraries(lib2 PRIVATE lib1) |