diff options
55 files changed, 205 insertions, 445 deletions
diff --git a/Help/release/3.20.rst b/Help/release/3.20.rst index da27174..42e95be 100644 --- a/Help/release/3.20.rst +++ b/Help/release/3.20.rst @@ -363,8 +363,8 @@ Changes made since CMake 3.20.0 include the following. The oneAPI 2021.2 Fortran compiler defines the proper identification macro and so is identified as ``IntelLLVM`` by all CMake 3.20 versions. -3.20.3, 3.20.4, 3.20.5 ----------------------- +3.20.3, 3.20.4, 3.20.5, 3.20.6 +------------------------------ These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes diff --git a/Help/release/3.21.rst b/Help/release/3.21.rst index 5d8c200..a468817 100644 --- a/Help/release/3.21.rst +++ b/Help/release/3.21.rst @@ -319,3 +319,13 @@ Changes made since CMake 3.21.0 include the following. * The :generator:`Visual Studio 17 2022` generator is now based on "Visual Studio 2022 Preview 4". Previously it was based on "Preview 3.1". + +* The AMD ROCm Platform ``hipcc`` compiler was identifed by CMake 3.21.0 + through 3.21.2 as a distinct compiler with id ``ROCMClang``. This has + been removed because it caused regressions. Instead: + + * ``hipcc`` may no longer be used as a ``HIP`` compiler because it + interferes with flags CMake needs to pass to Clang. Use Clang directly. + + * ``hipcc`` may once again be used as a ``CXX`` compiler, and is treated as + whatever compiler it selects underneath, as CMake 3.20 and below did. diff --git a/Help/variable/CMAKE_HIP_ARCHITECTURES.rst b/Help/variable/CMAKE_HIP_ARCHITECTURES.rst index 0cf0201..bcc6b35 100644 --- a/Help/variable/CMAKE_HIP_ARCHITECTURES.rst +++ b/Help/variable/CMAKE_HIP_ARCHITECTURES.rst @@ -5,7 +5,8 @@ CMAKE_HIP_ARCHITECTURES Default value for :prop_tgt:`HIP_ARCHITECTURES` property of targets. -This is initialized to the default architecture chosen by the compiler. +This is initialized to the architectures reported by ``rocm_agent_enumerator``, +if available, and otherwise to the default chosen by the compiler. This variable is used to initialize the :prop_tgt:`HIP_ARCHITECTURES` property on all targets. See the target property for additional information. diff --git a/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ID.rst index f23b7a2..0abedde 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ID.rst @@ -34,7 +34,6 @@ include: OpenWatcom = Open Watcom (openwatcom.org) PGI = The Portland Group (pgroup.com) PathScale = PathScale (pathscale.com) - ROCMClang = ROCm Toolkit Clang-based Compiler (rocmdocs.amd.com) SDCC = Small Device C Compiler (sdcc.sourceforge.net) SunPro = Oracle Solaris Studio (oracle.com) TI = Texas Instruments (ti.com) diff --git a/Modules/CMakeCCompiler.cmake.in b/Modules/CMakeCCompiler.cmake.in index 754f235..6818381 100644 --- a/Modules/CMakeCCompiler.cmake.in +++ b/Modules/CMakeCCompiler.cmake.in @@ -30,18 +30,9 @@ set(CMAKE_COMPILER_IS_GNUCC @CMAKE_COMPILER_IS_GNUCC@) set(CMAKE_C_COMPILER_LOADED 1) set(CMAKE_C_COMPILER_WORKS @CMAKE_C_COMPILER_WORKS@) set(CMAKE_C_ABI_COMPILED @CMAKE_C_ABI_COMPILED@) -set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) -set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) -if(CMAKE_COMPILER_IS_CYGWIN) - set(CYGWIN 1) - set(UNIX 1) -endif() set(CMAKE_C_COMPILER_ENV_VAR "CC") -if(CMAKE_COMPILER_IS_MINGW) - set(MINGW 1) -endif() set(CMAKE_C_COMPILER_ID_RUN 1) set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) diff --git a/Modules/CMakeCXXCompiler.cmake.in b/Modules/CMakeCXXCompiler.cmake.in index d0ce77a..7aad9e2 100644 --- a/Modules/CMakeCXXCompiler.cmake.in +++ b/Modules/CMakeCXXCompiler.cmake.in @@ -31,18 +31,9 @@ set(CMAKE_COMPILER_IS_GNUCXX @CMAKE_COMPILER_IS_GNUCXX@) set(CMAKE_CXX_COMPILER_LOADED 1) set(CMAKE_CXX_COMPILER_WORKS @CMAKE_CXX_COMPILER_WORKS@) set(CMAKE_CXX_ABI_COMPILED @CMAKE_CXX_ABI_COMPILED@) -set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) -set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) -if(CMAKE_COMPILER_IS_CYGWIN) - set(CYGWIN 1) - set(UNIX 1) -endif() set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") -if(CMAKE_COMPILER_IS_MINGW) - set(MINGW 1) -endif() set(CMAKE_CXX_COMPILER_ID_RUN 1) set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm) set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake index dd70d82..e6b3ee3 100644 --- a/Modules/CMakeCompilerIdDetection.cmake +++ b/Modules/CMakeCompilerIdDetection.cmake @@ -82,9 +82,6 @@ function(compiler_id_detection outvar lang) AppleClang ARMClang ) - if(NOT __skip_rocmclang) - list(APPEND ordered_compilers ROCMClang) - endif() list(APPEND ordered_compilers Clang GNU diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index 0f80f9c..15eab0f 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -128,11 +128,6 @@ if(NOT CMAKE_C_COMPILER_ID_RUN) if(CMAKE_C_COMPILER_ID STREQUAL "GNU") set(CMAKE_COMPILER_IS_GNUCC 1) endif() - if(CMAKE_C_PLATFORM_ID MATCHES "MinGW") - set(CMAKE_COMPILER_IS_MINGW 1) - elseif(CMAKE_C_PLATFORM_ID MATCHES "Cygwin") - set(CMAKE_COMPILER_IS_CYGWIN 1) - endif() else() if(NOT DEFINED CMAKE_C_COMPILER_FRONTEND_VARIANT) # Some toolchain files set our internal CMAKE_C_COMPILER_ID_RUN diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake index 556518f..72dc8d3 100644 --- a/Modules/CMakeDetermineCXXCompiler.cmake +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -125,11 +125,6 @@ if(NOT CMAKE_CXX_COMPILER_ID_RUN) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(CMAKE_COMPILER_IS_GNUCXX 1) endif() - if(CMAKE_CXX_PLATFORM_ID MATCHES "MinGW") - set(CMAKE_COMPILER_IS_MINGW 1) - elseif(CMAKE_CXX_PLATFORM_ID MATCHES "Cygwin") - set(CMAKE_COMPILER_IS_CYGWIN 1) - endif() else() if(NOT DEFINED CMAKE_CXX_COMPILER_FRONTEND_VARIANT) # Some toolchain files set our internal CMAKE_CXX_COMPILER_ID_RUN diff --git a/Modules/CMakeDetermineCompiler.cmake b/Modules/CMakeDetermineCompiler.cmake index 6430793..c967ab7 100644 --- a/Modules/CMakeDetermineCompiler.cmake +++ b/Modules/CMakeDetermineCompiler.cmake @@ -32,7 +32,7 @@ macro(_cmake_find_compiler lang) endif() # Look for directories containing compilers of reference languages. - set(_${lang}_COMPILER_HINTS) + set(_${lang}_COMPILER_HINTS "${CMAKE_${lang}_COMPILER_HINTS}") foreach(l ${_languages}) if(CMAKE_${l}_COMPILER AND IS_ABSOLUTE "${CMAKE_${l}_COMPILER}") get_filename_component(_hint "${CMAKE_${l}_COMPILER}" PATH) diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 16243c7..d54e2b0 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -150,41 +150,6 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src) endif() endif() - # When invoked with HIPCC we need to extract the path to the underlying - # clang compiler when possible. This fixes the following issues: - # env variables can change how hipcc behaves - # allows us to properly find the binutils bundled with hip - if(CMAKE_${lang}_COMPILER_ID STREQUAL "ROCMClang" - AND CMAKE_${lang}_COMPILER MATCHES ".*hipcc") - get_filename_component(_hipcc_dir "${CMAKE_${lang}_COMPILER}" DIRECTORY) - execute_process( - COMMAND "${_hipcc_dir}/hipconfig" - --hipclangpath - OUTPUT_VARIABLE output - RESULT_VARIABLE result - ) - if(result EQUAL 0 AND EXISTS "${output}") - if(lang STREQUAL "C") - set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${output}/clang") - set(CMAKE_${lang}_COMPILER "${output}/clang" PARENT_SCOPE) - else() - set_property(CACHE CMAKE_${lang}_COMPILER PROPERTY VALUE "${output}/clang++") - set(CMAKE_${lang}_COMPILER "${output}/clang++" PARENT_SCOPE) - endif() - endif() - if(lang STREQUAL "HIP") - execute_process( - COMMAND "${_hipcc_dir}/hipconfig" - --rocmpath - OUTPUT_VARIABLE output - RESULT_VARIABLE result - ) - if(result EQUAL 0) - set(_CMAKE_HIP_COMPILER_ROCM_ROOT "${output}" PARENT_SCOPE) - endif() - endif() - endif() - if (COMPILER_QNXNTO AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU") execute_process( COMMAND "${CMAKE_${lang}_COMPILER}" diff --git a/Modules/CMakeDetermineFortranCompiler.cmake b/Modules/CMakeDetermineFortranCompiler.cmake index d7d032c..6a8984b 100644 --- a/Modules/CMakeDetermineFortranCompiler.cmake +++ b/Modules/CMakeDetermineFortranCompiler.cmake @@ -235,11 +235,6 @@ if(NOT CMAKE_Fortran_COMPILER_ID_RUN) if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") set(CMAKE_COMPILER_IS_GNUG77 1) endif() - if(CMAKE_Fortran_PLATFORM_ID MATCHES "MinGW") - set(CMAKE_COMPILER_IS_MINGW 1) - elseif(CMAKE_Fortran_PLATFORM_ID MATCHES "Cygwin") - set(CMAKE_COMPILER_IS_CYGWIN 1) - endif() endif() if (NOT _CMAKE_TOOLCHAIN_LOCATION) diff --git a/Modules/CMakeDetermineHIPCompiler.cmake b/Modules/CMakeDetermineHIPCompiler.cmake index ed0110a..7b7d7a3 100644 --- a/Modules/CMakeDetermineHIPCompiler.cmake +++ b/Modules/CMakeDetermineHIPCompiler.cmake @@ -15,6 +15,13 @@ if(NOT CMAKE_HIP_COMPILER) # prefer the environment variable HIPCXX if(NOT $ENV{HIPCXX} STREQUAL "") + if("$ENV{HIPCXX}" MATCHES "hipcc") + message(FATAL_ERROR + "The HIPCXX environment variable is set to the hipcc wrapper:\n" + " $ENV{HIPCXX}\n" + "This is not supported. Use Clang directly, or let CMake pick a default." + ) + endif() get_filename_component(CMAKE_HIP_COMPILER_INIT $ENV{HIPCXX} PROGRAM PROGRAM_ARGS CMAKE_HIP_FLAGS_ENV_INIT) if(CMAKE_HIP_FLAGS_ENV_INIT) set(CMAKE_HIP_COMPILER_ARG1 "${CMAKE_HIP_FLAGS_ENV_INIT}" CACHE STRING "Arguments to CXX compiler") @@ -26,10 +33,25 @@ if(NOT CMAKE_HIP_COMPILER) # finally list compilers to try if(NOT CMAKE_HIP_COMPILER_INIT) - set(CMAKE_HIP_COMPILER_LIST hipcc clang++) + set(CMAKE_HIP_COMPILER_LIST clang++) + + # Look for the Clang coming with ROCm to support HIP. + execute_process(COMMAND hipconfig --hipclangpath + OUTPUT_VARIABLE _CMAKE_HIPCONFIG_CLANGPATH + RESULT_VARIABLE _CMAKE_HIPCONFIG_RESULT + ) + if(_CMAKE_HIPCONFIG_RESULT EQUAL 0 AND EXISTS "${_CMAKE_HIPCONFIG_CLANGPATH}") + set(CMAKE_HIP_COMPILER_HINTS "${_CMAKE_HIPCONFIG_CLANGPATH}") + endif() endif() _cmake_find_compiler(HIP) +elseif(CMAKE_HIP_COMPILER MATCHES "hipcc") + message(FATAL_ERROR + "CMAKE_HIP_COMPILER is set to the hipcc wrapper:\n" + " ${CMAKE_HIP_COMPILER}\n" + "This is not supported. Use Clang directly, or let CMake pick a default." + ) else() _cmake_find_compiler_path(HIP) endif() @@ -52,7 +74,40 @@ if(NOT CMAKE_HIP_COMPILER_ID_RUN) CMAKE_DETERMINE_COMPILER_ID(HIP HIPFLAGS CMakeHIPCompilerId.hip) _cmake_find_compiler_sysroot(HIP) +endif() +if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT AND CMAKE_HIP_COMPILER_ID STREQUAL "Clang") + execute_process(COMMAND "${CMAKE_HIP_COMPILER}" -v -print-targets + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _CMAKE_HIP_COMPILER_RESULT + OUTPUT_VARIABLE _CMAKE_HIP_COMPILER_STDOUT + ERROR_VARIABLE _CMAKE_HIP_COMPILER_STDERR + ) + + if(_CMAKE_HIP_COMPILER_RESULT EQUAL 0 AND _CMAKE_HIP_COMPILER_STDERR MATCHES "Found HIP installation: *([^,]*)[,\n]") + set(CMAKE_HIP_COMPILER_ROCM_ROOT "${CMAKE_MATCH_1}") + endif() +endif() +if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT) + execute_process( + COMMAND hipconfig --rocmpath + OUTPUT_VARIABLE _CMAKE_HIPCONFIG_ROCMPATH + RESULT_VARIABLE _CMAKE_HIPCONFIG_RESULT + ) + if(_CMAKE_HIPCONFIG_RESULT EQUAL 0 AND EXISTS "${_CMAKE_HIPCONFIG_ROCMPATH}") + set(CMAKE_HIP_COMPILER_ROCM_ROOT "${_CMAKE_HIPCONFIG_ROCMPATH}") + endif() +endif() +if(NOT CMAKE_HIP_COMPILER_ROCM_ROOT) + message(FATAL_ERROR "Failed to find ROCm root directory.") +endif() +if(NOT EXISTS "${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang/hip-lang-config.cmake") + message(FATAL_ERROR + "The ROCm root directory:\n" + " ${CMAKE_HIP_COMPILER_ROCM_ROOT}\n" + "does not contain the HIP runtime CMake package, expected at:\n" + " ${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang/hip-lang-config.cmake\n" + ) endif() if (NOT _CMAKE_TOOLCHAIN_LOCATION) @@ -85,12 +140,44 @@ if(MSVC_HIP_ARCHITECTURE_ID) endif() if(NOT DEFINED CMAKE_HIP_ARCHITECTURES) - # Analyze output from hipcc to get the current GPU architecture. - if(CMAKE_HIP_COMPILER_PRODUCED_OUTPUT MATCHES " -target-cpu ([a-z0-9]+) ") + # Use 'rocm_agent_enumerator' to get the current GPU architecture. + set(_CMAKE_HIP_ARCHITECTURES) + find_program(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR + NAMES rocm_agent_enumerator + HINTS "${CMAKE_HIP_COMPILER_ROCM_ROOT}/bin" + NO_CACHE) + if(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR) + execute_process(COMMAND "${_CMAKE_HIP_ROCM_AGENT_ENUMERATOR}" -t GPU + RESULT_VARIABLE _CMAKE_ROCM_AGENT_ENUMERATOR_RESULT + OUTPUT_VARIABLE _CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT + ERROR_VARIABLE _CMAKE_ROCM_AGENT_ENUMERATOR_STDERR + ) + if(_CMAKE_ROCM_AGENT_ENUMERATOR_RESULT EQUAL 0) + separate_arguments(_hip_archs NATIVE_COMMAND "${_CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT}") + foreach(_hip_arch ${_hip_archs}) + if(_hip_arch STREQUAL "gfx000") + continue() + endif() + string(FIND ${_hip_arch} ":" pos) + if(NOT pos STREQUAL "-1") + string(SUBSTRING ${_hip_arch} 0 ${pos} _hip_arch) + endif() + list(APPEND _CMAKE_HIP_ARCHITECTURES "${_hip_arch}") + endforeach() + endif() + unset(_CMAKE_ROCM_AGENT_ENUMERATOR_RESULT) + unset(_CMAKE_ROCM_AGENT_ENUMERATOR_STDOUT) + unset(_CMAKE_ROCM_AGENT_ENUMERATOR_STDERR) + endif() + unset(_CMAKE_HIP_ROCM_AGENT_ENUMERATOR) + if(_CMAKE_HIP_ARCHITECTURES) + set(CMAKE_HIP_ARCHITECTURES "${_CMAKE_HIP_ARCHITECTURES}" CACHE STRING "HIP architectures") + elseif(CMAKE_HIP_COMPILER_PRODUCED_OUTPUT MATCHES " -target-cpu ([a-z0-9]+) ") set(CMAKE_HIP_ARCHITECTURES "${CMAKE_MATCH_1}" CACHE STRING "HIP architectures") else() - message(FATAL_ERROR "Failed to find a working HIP architecture.") + message(FATAL_ERROR "Failed to find a default HIP architecture.") endif() + unset(_CMAKE_HIP_ARCHITECTURES) endif() # configure variables set in this file for fast reload later on diff --git a/Modules/CMakeFortranCompiler.cmake.in b/Modules/CMakeFortranCompiler.cmake.in index 06ee528..f690eb2 100644 --- a/Modules/CMakeFortranCompiler.cmake.in +++ b/Modules/CMakeFortranCompiler.cmake.in @@ -18,20 +18,11 @@ set(CMAKE_COMPILER_IS_GNUG77 @CMAKE_COMPILER_IS_GNUG77@) set(CMAKE_Fortran_COMPILER_LOADED 1) set(CMAKE_Fortran_COMPILER_WORKS @CMAKE_Fortran_COMPILER_WORKS@) set(CMAKE_Fortran_ABI_COMPILED @CMAKE_Fortran_ABI_COMPILED@) -set(CMAKE_COMPILER_IS_MINGW @CMAKE_COMPILER_IS_MINGW@) -set(CMAKE_COMPILER_IS_CYGWIN @CMAKE_COMPILER_IS_CYGWIN@) -if(CMAKE_COMPILER_IS_CYGWIN) - set(CYGWIN 1) - set(UNIX 1) -endif() set(CMAKE_Fortran_COMPILER_ENV_VAR "FC") set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 @CMAKE_Fortran_COMPILER_SUPPORTS_F90@) -if(CMAKE_COMPILER_IS_MINGW) - set(MINGW 1) -endif() set(CMAKE_Fortran_COMPILER_ID_RUN 1) set(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS f;F;fpp;FPP;f77;F77;f90;F90;for;For;FOR;f95;F95) set(CMAKE_Fortran_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) diff --git a/Modules/CMakeHIPCompiler.cmake.in b/Modules/CMakeHIPCompiler.cmake.in index 9a30a45..17633a8 100644 --- a/Modules/CMakeHIPCompiler.cmake.in +++ b/Modules/CMakeHIPCompiler.cmake.in @@ -16,6 +16,7 @@ set(CMAKE_HIP_COMPILER_FRONTEND_VARIANT "@CMAKE_HIP_COMPILER_FRONTEND_VARIANT@") set(CMAKE_HIP_SIMULATE_VERSION "@CMAKE_HIP_SIMULATE_VERSION@") @SET_MSVC_HIP_ARCHITECTURE_ID@ @_SET_CMAKE_HIP_COMPILER_SYSROOT@ +set(CMAKE_HIP_COMPILER_ROCM_ROOT "@CMAKE_HIP_COMPILER_ROCM_ROOT@") set(CMAKE_HIP_COMPILER_ENV_VAR "HIPCXX") diff --git a/Modules/CMakeHIPInformation.cmake b/Modules/CMakeHIPInformation.cmake index 9862f24..4c57677 100644 --- a/Modules/CMakeHIPInformation.cmake +++ b/Modules/CMakeHIPInformation.cmake @@ -141,8 +141,11 @@ endif() set(CMAKE_HIP_INFORMATION_LOADED 1) # Load the file and find the relevant HIP runtime. -# This file will only exist after all compiler detection has finished -include(${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake OPTIONAL) -if(COMMAND _CMAKE_FIND_HIP_RUNTIME) - _CMAKE_FIND_HIP_RUNTIME() +if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) + set(hip-lang_DIR "${CMAKE_HIP_COMPILER_ROCM_ROOT}/lib/cmake/hip-lang") + find_package(hip-lang CONFIG QUIET NO_DEFAULT_PATH) +endif() +if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) + list(APPEND CMAKE_HIP_RUNTIME_LIBRARIES_STATIC ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET}) + list(APPEND CMAKE_HIP_RUNTIME_LIBRARIES_SHARED ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET}) endif() diff --git a/Modules/CMakeHIPRuntime.cmake.in b/Modules/CMakeHIPRuntime.cmake.in deleted file mode 100644 index ade26bb..0000000 --- a/Modules/CMakeHIPRuntime.cmake.in +++ /dev/null @@ -1,99 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - - -function(_CMAKE_FIND_HIP_RUNTIME ) - # Determined when hipcc is the HIP compiler - set(_CMAKE_HIP_COMPILER_ROCM_ROOT "@_CMAKE_HIP_COMPILER_ROCM_ROOT@") - - # Forward facing value that can be provided by the user - set(CMAKE_HIP_COMPILER_TOOLKIT_ROOT @CMAKE_HIP_COMPILER_TOOLKIT_ROOT@) - - if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) - set(message_on_found TRUE) - endif() - - set(explicit_search_only FALSE) - set(rocm_root_dirs ) - if(DEFINED CMAKE_HIP_COMPILER_TOOLKIT_ROOT) - set(rocm_root_dirs "${CMAKE_HIP_COMPILER_TOOLKIT_ROOT}") - set(explicit_search_only TRUE) - set(error_message_location "the variable CMAKE_HIP_COMPILER_TOOLKIT_ROOT [\"${CMAKE_HIP_COMPILER_TOOLKIT_ROOT}\"]") - elseif(DEFINED ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT}) - set(rocm_root_dirs "$ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT}") - set(explicit_search_only TRUE) - set(error_message_location "CMAKE_HIP_COMPILER_TOOLKIT_ROOT") - set(error_message_location "the environment variable CMAKE_HIP_COMPILER_TOOLKIT_ROOT [\"$ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT}\"]") - elseif(DEFINED _CMAKE_HIP_COMPILER_ROCM_ROOT) - set(rocm_root_dirs "${_CMAKE_HIP_COMPILER_ROCM_ROOT}") - set(explicit_search_only TRUE) - set(error_message_location "the associated hipconfig --rocmpath [\"${_CMAKE_HIP_COMPILER_ROCM_ROOT}\"]") - endif() - - # Guess on where rocm is installed - if(NOT rocm_root_dirs AND (UNIX AND NOT APPLE)) - set(platform_base "/opt/rocm-") - - # Finad all default rocm installations - file(GLOB possible_paths "${platform_base}*") - - set(versions) - foreach(p ${possible_paths}) - # Extract version number from end of string - string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+$" p_version ${p}) - if(IS_DIRECTORY ${p} AND p_version) - list(APPEND versions ${p_version}) - endif() - endforeach() - - # Sort numerically in descending order, so we try the newest versions first. - list(SORT versions COMPARE NATURAL ORDER DESCENDING) - - # With a descending list of versions, populate possible paths to search. - set(rocm_root_dirs "/opt/rocm") - foreach(v IN LISTS versions) - list(APPEND rocm_root_dirs "${platform_base}${v}") - endforeach() - endif() - - set(search_rel_path "/lib/cmake/hip-lang/") - list(TRANSFORM rocm_root_dirs APPEND "${search_rel_path}") - - find_package(hip-lang - CONFIG - PATHS ${rocm_root_dirs} - QUIET - NO_DEFAULT_PATH - ) - if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET AND NOT explicit_search_only) - find_package(hip-lang CONFIG QUIET) - endif() - - if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) - set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC - ${CMAKE_HIP_RUNTIME_LIBRARIES_STATIC} - ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET} PARENT_SCOPE) - set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED - ${CMAKE_HIP_RUNTIME_LIBRARIES_SHARED} - ${_CMAKE_HIP_DEVICE_RUNTIME_TARGET} PARENT_SCOPE) - endif() - - if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET AND message_on_found) - message(STATUS "Found HIP runtime: ${hip-lang_DIR}") - elseif(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET) - if(explicit_search_only) - set(error_message "Failed to find the HIP runtime, Could not find hip-lang-config.cmake at the following location(s):\n") - foreach(p IN LISTS rocm_root_dirs) - string(APPEND error_message "\t${p}\n") - endforeach() - string(APPEND "which are computed from the location specified by ${error_message_location}. \ - Please specify CMAKE_HIP_COMPILER_TOOLKIT_ROOT to the location of") - message(FATAL_ERROR "${error_message}") - else() - message(FATAL_ERROR - "Failed to find the HIP runtime, Could not find hip-lang-config.cmake.\ - Try setting CMAKE_HIP_COMPILER_TOOLKIT_ROOT") - endif() - endif() - -endfunction() diff --git a/Modules/CMakeTestHIPCompiler.cmake b/Modules/CMakeTestHIPCompiler.cmake index 62f0657..5acd806 100644 --- a/Modules/CMakeTestHIPCompiler.cmake +++ b/Modules/CMakeTestHIPCompiler.cmake @@ -81,20 +81,6 @@ unset(__CMAKE_HIP_FLAGS) include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake) CMAKE_DETERMINE_COMPILE_FEATURES(HIP) - -# Setup the following: -# Configure the new template file CMakeHipRuntime.cmake to -# - ${CMAKE_PLATFORM_INFO_DIR}/ -# This file will do the actual find_package query. We than have -# CMakeHIPInformation.cmake include `CMakeHipRuntime` -# So it is included once system information has been finished -# -configure_file( - ${CMAKE_ROOT}/Modules/CMakeHIPRuntime.cmake.in - ${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake - @ONLY -) - # Re-configure to save learned information. configure_file( ${CMAKE_ROOT}/Modules/CMakeHIPCompiler.cmake.in @@ -113,10 +99,3 @@ endif() set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE}) unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE) unset(__CMAKE_HIP_COMPILER_OUTPUT) - -# Load the file and find the relevant HIP runtime. -# This file will only exist after all compiler detection has finished -include(${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake) -if(COMMAND _CMAKE_FIND_HIP_RUNTIME) - _CMAKE_FIND_HIP_RUNTIME() -endif() diff --git a/Modules/Compiler/Clang-HIP.cmake b/Modules/Compiler/Clang-HIP.cmake index 1030a43..4dbe2e8 100644 --- a/Modules/Compiler/Clang-HIP.cmake +++ b/Modules/Compiler/Clang-HIP.cmake @@ -15,6 +15,6 @@ set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED") set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "") set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "") -# Populated by CMakeHIPRuntime.cmake +# Populated by CMakeHIPInformation.cmake set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC "") set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED "") diff --git a/Modules/Compiler/ROCMClang-ASM.cmake b/Modules/Compiler/ROCMClang-ASM.cmake deleted file mode 100644 index 85d1110..0000000 --- a/Modules/Compiler/ROCMClang-ASM.cmake +++ /dev/null @@ -1,2 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(ASM) diff --git a/Modules/Compiler/ROCMClang-C.cmake b/Modules/Compiler/ROCMClang-C.cmake deleted file mode 100644 index cdfa95d..0000000 --- a/Modules/Compiler/ROCMClang-C.cmake +++ /dev/null @@ -1,7 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(C) - -set(_rocm_clang_ver "${CMAKE_C_COMPILER_VERSION_INTERNAL}") -set(CMAKE_C_COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION_INTERNAL}") -include(Compiler/Clang-C) -set(CMAKE_C_COMPILER_VERSION "${_rocm_clang_ver}") diff --git a/Modules/Compiler/ROCMClang-CXX.cmake b/Modules/Compiler/ROCMClang-CXX.cmake deleted file mode 100644 index 5739c8e..0000000 --- a/Modules/Compiler/ROCMClang-CXX.cmake +++ /dev/null @@ -1,7 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(CXX) - -set(_rocm_clang_ver "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}") -set(CMAKE_CXX_COMPILER_VERSION "${CMAKE_CXX_COMPILER_VERSION_INTERNAL}") -include(Compiler/Clang-CXX) -set(CMAKE_CXX_COMPILER_VERSION "${_rocm_clang_ver}") diff --git a/Modules/Compiler/ROCMClang-DetermineCompiler.cmake b/Modules/Compiler/ROCMClang-DetermineCompiler.cmake deleted file mode 100644 index c2fc99b..0000000 --- a/Modules/Compiler/ROCMClang-DetermineCompiler.cmake +++ /dev/null @@ -1,19 +0,0 @@ - -set(_compiler_id_pp_test "defined(__clang__) && __has_include(<hip/hip_version.h>)") - -set(_compiler_id_version_compute " -# if defined(__clang__) && __has_include(<hip/hip_version.h>) -# include <hip/hip_version.h> -# define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(HIP_VERSION_MAJOR) -# define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(HIP_VERSION_MINOR) -# define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(HIP_VERSION_PATCH) -# endif") - -set(_compiler_id_simulate " -# if defined(_MSC_VER) -# define @PREFIX@SIMULATE_ID \"MSVC\" -# elif defined(__clang__) -# define @PREFIX@SIMULATE_ID \"Clang\" -# elif defined(__GNUC__) -# define @PREFIX@SIMULATE_ID \"GNU\" -# endif") diff --git a/Modules/Compiler/ROCMClang-FindBinUtils.cmake b/Modules/Compiler/ROCMClang-FindBinUtils.cmake deleted file mode 100644 index e721c87..0000000 --- a/Modules/Compiler/ROCMClang-FindBinUtils.cmake +++ /dev/null @@ -1 +0,0 @@ -include(Compiler/Clang-FindBinUtils) diff --git a/Modules/Compiler/ROCMClang-HIP.cmake b/Modules/Compiler/ROCMClang-HIP.cmake deleted file mode 100644 index 7af7699..0000000 --- a/Modules/Compiler/ROCMClang-HIP.cmake +++ /dev/null @@ -1,49 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(HIP) - -set(_CMAKE_COMPILE_AS_HIP_FLAG "-x hip") -set(_CMAKE_HIP_RDC_FLAG "-fgpu-rdc") - -if(NOT "x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC") - set(CMAKE_HIP_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden") - string(APPEND CMAKE_HIP_FLAGS_DEBUG_INIT " -O") -endif() - -if(CMAKE_HIP_SIMULATE_ID STREQUAL "GNU") - set(CMAKE_HIP_LINKER_WRAPPER_FLAG "-Wl,") - set(CMAKE_HIP_LINKER_WRAPPER_FLAG_SEP ",") -elseif(CMAKE_HIP_SIMULATE_ID STREQUAL "Clang") - set(CMAKE_HIP_LINKER_WRAPPER_FLAG "-Xlinker" " ") - set(CMAKE_HIP_LINKER_WRAPPER_FLAG_SEP) -endif() - -if(NOT CMAKE_HIP_COMPILER_VERSION VERSION_LESS 1.0) - set(CMAKE_HIP98_STANDARD_COMPILE_OPTION "-std=c++98") - set(CMAKE_HIP98_EXTENSION_COMPILE_OPTION "-std=gnu++98") - set(CMAKE_HIP98_STANDARD__HAS_FULL_SUPPORT ON) - - set(CMAKE_HIP11_STANDARD_COMPILE_OPTION "-std=c++11") - set(CMAKE_HIP11_EXTENSION_COMPILE_OPTION "-std=gnu++11") - set(CMAKE_HIP11_STANDARD__HAS_FULL_SUPPORT ON) - - set(CMAKE_HIP14_STANDARD_COMPILE_OPTION "-std=c++14") - set(CMAKE_HIP14_EXTENSION_COMPILE_OPTION "-std=gnu++14") - set(CMAKE_HIP14_STANDARD__HAS_FULL_SUPPORT ON) - - set(CMAKE_HIP17_STANDARD_COMPILE_OPTION "-std=c++17") - set(CMAKE_HIP17_EXTENSION_COMPILE_OPTION "-std=gnu++17") - set(CMAKE_HIP17_STANDARD__HAS_FULL_SUPPORT ON) - - set(CMAKE_HIP20_STANDARD_COMPILE_OPTION "-std=c++20") - set(CMAKE_HIP20_EXTENSION_COMPILE_OPTION "-std=gnu++20") -endif() - -set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED") -set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "") -set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "") - -# Populated by CMakeHIPRuntime.cmake -set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC "") -set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED "") - -__compiler_check_default_language_standard(HIP 3.5 11) diff --git a/Modules/Compiler/ROCMClang-OBJC.cmake b/Modules/Compiler/ROCMClang-OBJC.cmake deleted file mode 100644 index 794973d..0000000 --- a/Modules/Compiler/ROCMClang-OBJC.cmake +++ /dev/null @@ -1,7 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(OBJC) - -set(_rocm_clang_ver "${CMAKE_OBJC_COMPILER_VERSION_INTERNAL}") -set(CMAKE_OBJC_COMPILER_VERSION "${CMAKE_OBJC_COMPILER_VERSION_INTERNAL}") -include(Compiler/Clang-OBJC) -set(CMAKE_OBJC_COMPILER_VERSION "${_rocm_clang_ver}") diff --git a/Modules/Compiler/ROCMClang-OBJCXX.cmake b/Modules/Compiler/ROCMClang-OBJCXX.cmake deleted file mode 100644 index 82238e1..0000000 --- a/Modules/Compiler/ROCMClang-OBJCXX.cmake +++ /dev/null @@ -1,7 +0,0 @@ -include(Compiler/ROCMClang) -__compiler_rocmclang(OBJCXX) - -set(_rocm_clang_ver "${CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL}") -set(CMAKE_OBJCXX_COMPILER_VERSION "${CMAKE_OBJCXX_COMPILER_VERSION_INTERNAL}") -include(Compiler/Clang-OBJCXX) -set(CMAKE_OBJCXX_COMPILER_VERSION "${_rocm_clang_ver}") diff --git a/Modules/Compiler/ROCMClang.cmake b/Modules/Compiler/ROCMClang.cmake deleted file mode 100644 index 6b38c2d..0000000 --- a/Modules/Compiler/ROCMClang.cmake +++ /dev/null @@ -1,35 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - - -# This module is shared by multiple languages; use include blocker. -include_guard() - -include(Compiler/CMakeCommonCompilerMacros) - -macro(__compiler_rocmclang lang) - - set(CMAKE_${lang}_VERBOSE_FLAG "-v") - - if(NOT "x${CMAKE_${lang}_SIMULATE_ID}" STREQUAL "xMSVC") - # Feature flags. - set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-fPIC") - set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE") - set(CMAKE_HIP_COMPILE_OPTIONS_VISIBILITY -fvisibility=) - - string(APPEND CMAKE_HIP_FLAGS_INIT " ") - string(APPEND CMAKE_HIP_FLAGS_DEBUG_INIT " -g") - string(APPEND CMAKE_HIP_FLAGS_RELEASE_INIT " -O3 -DNDEBUG") - string(APPEND CMAKE_HIP_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG") - string(APPEND CMAKE_HIP_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG") - endif() - - set(CMAKE_SHARED_LIBRARY_CREATE_HIP_FLAGS -shared) - set(CMAKE_INCLUDE_SYSTEM_FLAG_HIP "-isystem ") - - set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1) - set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_LIBRARIES 1) - set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1) - set(CMAKE_${lang}_RESPONSE_FILE_FLAG "@") - set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "@") -endmacro() diff --git a/Modules/Platform/Windows-Clang.cmake b/Modules/Platform/Windows-Clang.cmake index 373be76..1c32018 100644 --- a/Modules/Platform/Windows-Clang.cmake +++ b/Modules/Platform/Windows-Clang.cmake @@ -38,6 +38,8 @@ macro(__windows_compiler_clang_gnu lang) set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ") set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP) + set(CMAKE_${lang}_LINKER_MANIFEST_FLAG " -Xlinker /MANIFESTINPUT:") + if("${CMAKE_${lang}_SIMULATE_VERSION}" MATCHES "^([0-9]+)\\.([0-9]+)") math(EXPR MSVC_VERSION "${CMAKE_MATCH_1}*100 + ${CMAKE_MATCH_2}") endif() @@ -66,10 +68,10 @@ macro(__windows_compiler_clang_gnu lang) set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") set(CMAKE_${lang}_CREATE_SHARED_LIBRARY - "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES>") + "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <OBJECTS> <LINK_LIBRARIES> <MANIFESTS>") set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY}) set(CMAKE_${lang}_LINK_EXECUTABLE - "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES>") + "<CMAKE_${lang}_COMPILER> -fuse-ld=lld-link -nostartfiles -nostdlib <FLAGS> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> -Xlinker /MANIFEST:EMBED -Xlinker /implib:<TARGET_IMPLIB> -Xlinker /pdb:<TARGET_PDB> -Xlinker /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> ${CMAKE_GNULD_IMAGE_VERSION} <LINK_LIBRARIES> <MANIFESTS>") set(CMAKE_${lang}_CREATE_WIN32_EXE "-Xlinker /subsystem:windows") set(CMAKE_${lang}_CREATE_CONSOLE_EXE "-Xlinker /subsystem:console") diff --git a/Modules/Platform/Windows-GNU.cmake b/Modules/Platform/Windows-GNU.cmake index d000380..3ca5053 100644 --- a/Modules/Platform/Windows-GNU.cmake +++ b/Modules/Platform/Windows-GNU.cmake @@ -8,6 +8,8 @@ if(__WINDOWS_GNU) endif() set(__WINDOWS_GNU 1) +set(MINGW 1) + set(CMAKE_IMPORT_LIBRARY_PREFIX "lib") set(CMAKE_SHARED_LIBRARY_PREFIX "lib") set(CMAKE_SHARED_MODULE_PREFIX "lib") @@ -19,16 +21,12 @@ set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") set(CMAKE_SHARED_MODULE_SUFFIX ".dll") set(CMAKE_STATIC_LIBRARY_SUFFIX ".a") -if(MSYS OR MINGW) - set(CMAKE_EXTRA_LINK_EXTENSIONS ".lib") # MinGW can also link to a MS .lib -endif() +set(CMAKE_EXTRA_LINK_EXTENSIONS ".lib") # MinGW can also link to a MS .lib -if(MINGW) - set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") - set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib") - set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32") - set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") -endif() +set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib") +set(CMAKE_C_STANDARD_LIBRARIES_INIT "-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32") +set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") set(CMAKE_DL_LIBS "") set(CMAKE_LIBRARY_PATH_FLAG "-L") @@ -48,21 +46,19 @@ endif() macro(__windows_compiler_gnu lang) - if(MSYS OR MINGW) - # Create archiving rules to support large object file lists for static libraries. - set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") - - # Initialize C link type selection flags. These flags are used when - # building a shared library, shared module, or executable that links - # to other libraries to select whether to use the static or shared - # versions of the libraries. - foreach(type SHARED_LIBRARY SHARED_MODULE EXE) - set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic") - set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic") - endforeach() - endif() + # Create archiving rules to support large object file lists for static libraries. + set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_${lang}_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_${lang}_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") + + # Initialize C link type selection flags. These flags are used when + # building a shared library, shared module, or executable that links + # to other libraries to select whether to use the static or shared + # versions of the libraries. + foreach(type SHARED_LIBRARY SHARED_MODULE EXE) + set(CMAKE_${type}_LINK_STATIC_${lang}_FLAGS "-Wl,-Bstatic") + set(CMAKE_${type}_LINK_DYNAMIC_${lang}_FLAGS "-Wl,-Bdynamic") + endforeach() # No -fPIC on Windows set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "") diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index 54eb40e..0e4e028 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -384,7 +384,6 @@ elseif(_WCDH_policy STREQUAL "") ) endif() -set(__skip_rocmclang TRUE) include(${CMAKE_CURRENT_LIST_DIR}/CMakeCompilerIdDetection.cmake) function(_load_compiler_variables CompilerId lang) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index bbc32b3..caa4806 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 21) -set(CMake_VERSION_PATCH 20210918) +set(CMake_VERSION_PATCH 20210921) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Source/cmCPluginAPI.cxx b/Source/cmCPluginAPI.cxx index e922ee5..e460031 100644 --- a/Source/cmCPluginAPI.cxx +++ b/Source/cmCPluginAPI.cxx @@ -140,7 +140,7 @@ const char* CCONV cmGetCurrentOutputDirectory(void* arg) const char* CCONV cmGetDefinition(void* arg, const char* def) { cmMakefile* mf = static_cast<cmMakefile*>(arg); - return cmToCStr(mf->GetDefinition(def)); + return mf->GetDefinition(def).GetCStr(); } int CCONV cmIsOn(void* arg, const char* name) @@ -592,12 +592,12 @@ const char* CCONV cmSourceFileGetProperty(void* arg, const char* prop) { cmCPluginAPISourceFile* sf = static_cast<cmCPluginAPISourceFile*>(arg); if (cmSourceFile* rsf = sf->RealSourceFile) { - return cmToCStr(rsf->GetProperty(prop)); + return rsf->GetProperty(prop).GetCStr(); } if (!strcmp(prop, "LOCATION")) { return sf->FullPath.c_str(); } - return cmToCStr(sf->Properties.GetPropertyValue(prop)); + return sf->Properties.GetPropertyValue(prop).GetCStr(); } int CCONV cmSourceFileGetPropertyAsBool(void* arg, const char* prop) diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx index 59e4141..4e7f50d 100644 --- a/Source/cmCommonTargetGenerator.cxx +++ b/Source/cmCommonTargetGenerator.cxx @@ -240,11 +240,16 @@ std::string cmCommonTargetGenerator::GetManifests(const std::string& config) std::vector<std::string> manifests; manifests.reserve(manifest_srcs.size()); + + std::string lang = this->GeneratorTarget->GetLinkerLanguage(config); + std::string const& manifestFlag = + this->Makefile->GetDefinition("CMAKE_" + lang + "_LINKER_MANIFEST_FLAG"); for (cmSourceFile const* manifest_src : manifest_srcs) { - manifests.push_back(this->LocalCommonGenerator->ConvertToOutputFormat( - this->LocalCommonGenerator->MaybeRelativeToWorkDir( - manifest_src->GetFullPath()), - cmOutputConverter::SHELL)); + manifests.push_back(manifestFlag + + this->LocalCommonGenerator->ConvertToOutputFormat( + this->LocalCommonGenerator->MaybeRelativeToWorkDir( + manifest_src->GetFullPath()), + cmOutputConverter::SHELL)); } return cmJoin(manifests, " "); diff --git a/Source/cmCurl.cxx b/Source/cmCurl.cxx index fa001d2..28ee24d 100644 --- a/Source/cmCurl.cxx +++ b/Source/cmCurl.cxx @@ -31,11 +31,11 @@ } \ } while (false) -std::string cmCurlSetCAInfo(::CURL* curl, const char* cafile) +std::string cmCurlSetCAInfo(::CURL* curl, const std::string& cafile) { std::string e; - if (cafile && *cafile) { - ::CURLcode res = ::curl_easy_setopt(curl, CURLOPT_CAINFO, cafile); + if (!cafile.empty()) { + ::CURLcode res = ::curl_easy_setopt(curl, CURLOPT_CAINFO, cafile.c_str()); check_curl_result(res, "Unable to set TLS/SSL Verify CAINFO: "); } #ifdef CMAKE_FIND_CAFILE diff --git a/Source/cmCurl.h b/Source/cmCurl.h index 9c1e337..b5134f4 100644 --- a/Source/cmCurl.h +++ b/Source/cmCurl.h @@ -8,7 +8,7 @@ #include <cm3p/curl/curl.h> -std::string cmCurlSetCAInfo(::CURL* curl, const char* cafile = nullptr); +std::string cmCurlSetCAInfo(::CURL* curl, const std::string& cafile = {}); std::string cmCurlSetNETRCOption(::CURL* curl, const std::string& netrc_level, const std::string& netrc_file); std::string cmCurlFixFileURL(std::string url); diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 1223d2a..bdfec02 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -1986,7 +1986,7 @@ bool HandleDownloadCommand(std::vector<std::string> const& args, // check to see if a CAINFO file has been specified // command arg comes first - std::string const& cainfo_err = cmCurlSetCAInfo(curl, cmToCStr(cainfo)); + std::string const& cainfo_err = cmCurlSetCAInfo(curl, cainfo); if (!cainfo_err.empty()) { status.SetError(cainfo_err); return false; @@ -2304,7 +2304,7 @@ bool HandleUploadCommand(std::vector<std::string> const& args, // check to see if a CAINFO file has been specified // command arg comes first - std::string const& cainfo_err = cmCurlSetCAInfo(curl, cmToCStr(cainfo)); + std::string const& cainfo_err = cmCurlSetCAInfo(curl, cainfo); if (!cainfo_err.empty()) { status.SetError(cainfo_err); return false; diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 4bad7ab..d52dfaf 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -5727,7 +5727,7 @@ const char* getTypedProperty<const char*>( cmProp value = tgt->GetProperty(prop); if (genexInterpreter == nullptr) { - return cmToCStr(value); + return value.GetCStr(); } return genexInterpreter->Evaluate(value ? *value : "", prop).c_str(); diff --git a/Source/cmGetPropertyCommand.cxx b/Source/cmGetPropertyCommand.cxx index 4b380c0..5f20075 100644 --- a/Source/cmGetPropertyCommand.cxx +++ b/Source/cmGetPropertyCommand.cxx @@ -2,6 +2,8 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmGetPropertyCommand.h" +#include <cstddef> + #include "cmExecutionStatus.h" #include "cmGlobalGenerator.h" #include "cmInstalledFile.h" @@ -32,10 +34,6 @@ enum OutType OutSet }; -// Implementation of result storage. -bool StoreResult(OutType infoType, cmMakefile& makefile, - const std::string& variable, const char* value); - // Implementation of each property type. bool HandleGlobalMode(cmExecutionStatus& status, const std::string& name, OutType infoType, const std::string& variable, @@ -253,8 +251,10 @@ bool cmGetPropertyCommand(std::vector<std::string> const& args, namespace { +// Implementation of result storage. +template <typename ValueType> bool StoreResult(OutType infoType, cmMakefile& makefile, - const std::string& variable, const char* value) + const std::string& variable, ValueType value) { if (infoType == OutSet) { makefile.AddDefinition(variable, value ? "1" : "0"); @@ -268,10 +268,11 @@ bool StoreResult(OutType infoType, cmMakefile& makefile, } return true; } +template <> bool StoreResult(OutType infoType, cmMakefile& makefile, - const std::string& variable, cmProp value) + const std::string& variable, std::nullptr_t value) { - return StoreResult(infoType, makefile, variable, value.GetCStr()); + return StoreResult(infoType, makefile, variable, cmProp(value)); } bool HandleGlobalMode(cmExecutionStatus& status, const std::string& name, diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index fd1a197..1c3d2c2 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -838,7 +838,7 @@ void cmGlobalGenerator::EnableLanguage( cmSystemTools::RemoveFile(compilerLangFile); if (!this->CMakeInstance->GetIsInTryCompile()) { this->PrintCompilerAdvice(noCompiler, lang, - cmToCStr(mf->GetDefinition(compilerEnv))); + mf->GetDefinition(compilerEnv)); mf->IssueMessage(MessageType::FATAL_ERROR, noCompiler.str()); fatalError = true; } @@ -922,7 +922,7 @@ void cmGlobalGenerator::EnableLanguage( void cmGlobalGenerator::PrintCompilerAdvice(std::ostream& os, std::string const& lang, - const char* envVar) const + cmProp envVar) const { // Subclasses override this method if they do not support this advice. os << "Tell CMake where to find the compiler by setting "; diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 34646d9..49a1a26 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -550,7 +550,7 @@ protected: virtual bool CheckLanguages(std::vector<std::string> const& languages, cmMakefile* mf) const; virtual void PrintCompilerAdvice(std::ostream& os, std::string const& lang, - const char* envVar) const; + cmProp envVar) const; virtual bool ComputeTargetDepends(); diff --git a/Source/cmGlobalJOMMakefileGenerator.cxx b/Source/cmGlobalJOMMakefileGenerator.cxx index fc3123a..0d474e5 100644 --- a/Source/cmGlobalJOMMakefileGenerator.cxx +++ b/Source/cmGlobalJOMMakefileGenerator.cxx @@ -39,8 +39,9 @@ void cmGlobalJOMMakefileGenerator::GetDocumentation( entry.Brief = "Generates JOM makefiles."; } -void cmGlobalJOMMakefileGenerator::PrintCompilerAdvice( - std::ostream& os, std::string const& lang, const char* envVar) const +void cmGlobalJOMMakefileGenerator::PrintCompilerAdvice(std::ostream& os, + std::string const& lang, + cmProp envVar) const { if (lang == "CXX" || lang == "C") { /* clang-format off */ diff --git a/Source/cmGlobalJOMMakefileGenerator.h b/Source/cmGlobalJOMMakefileGenerator.h index 2d58f91..cc581df 100644 --- a/Source/cmGlobalJOMMakefileGenerator.h +++ b/Source/cmGlobalJOMMakefileGenerator.h @@ -50,5 +50,5 @@ protected: private: void PrintCompilerAdvice(std::ostream& os, std::string const& lang, - const char* envVar) const override; + cmProp envVar) const override; }; diff --git a/Source/cmGlobalNMakeMakefileGenerator.cxx b/Source/cmGlobalNMakeMakefileGenerator.cxx index 5ca8d52..2bc668c 100644 --- a/Source/cmGlobalNMakeMakefileGenerator.cxx +++ b/Source/cmGlobalNMakeMakefileGenerator.cxx @@ -81,7 +81,7 @@ void cmGlobalNMakeMakefileGenerator::GetDocumentation( } void cmGlobalNMakeMakefileGenerator::PrintCompilerAdvice( - std::ostream& os, std::string const& lang, const char* envVar) const + std::ostream& os, std::string const& lang, cmProp envVar) const { if (lang == "CXX" || lang == "C") { /* clang-format off */ diff --git a/Source/cmGlobalNMakeMakefileGenerator.h b/Source/cmGlobalNMakeMakefileGenerator.h index 402b89f..a48a55e 100644 --- a/Source/cmGlobalNMakeMakefileGenerator.h +++ b/Source/cmGlobalNMakeMakefileGenerator.h @@ -61,5 +61,5 @@ private: void CheckNMakeFeatures(); void PrintCompilerAdvice(std::ostream& os, std::string const& lang, - const char* envVar) const override; + cmProp envVar) const override; }; diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 6279d68..768c045 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -928,29 +928,21 @@ void cmGlobalNinjaGenerator::EnableLanguage( continue; } this->ResolveLanguageCompiler(l, mf, optional); - } #ifdef _WIN32 - const bool clangGnuMode = - ((mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") == "Clang") && - (mf->GetSafeDefinition("CMAKE_C_COMPILER_FRONTEND_VARIANT") == "GNU")) || - ((mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID") == "Clang") && - (mf->GetSafeDefinition("CMAKE_CXX_COMPILER_FRONTEND_VARIANT") == "GNU")); - - if (clangGnuMode || - ((mf->GetSafeDefinition("CMAKE_C_SIMULATE_ID") != "MSVC") && - (mf->GetSafeDefinition("CMAKE_CXX_SIMULATE_ID") != "MSVC") && - (mf->IsOn("CMAKE_COMPILER_IS_MINGW") || - (mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") == "GNU") || - (mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID") == "GNU") || - (mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") == "Clang") || - (mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID") == "Clang") || - (mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") == "ARMClang") || - (mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID") == "ARMClang") || - (mf->GetSafeDefinition("CMAKE_C_COMPILER_ID") == "QCC") || - (mf->GetSafeDefinition("CMAKE_CXX_COMPILER_ID") == "QCC")))) { - this->UsingGCCOnWindows = true; - } + std::string const& compilerId = + mf->GetSafeDefinition(cmStrCat("CMAKE_", l, "_COMPILER_ID")); + std::string const& simulateId = + mf->GetSafeDefinition(cmStrCat("CMAKE_", l, "_SIMULATE_ID")); + std::string const& compilerFrontendVariant = mf->GetSafeDefinition( + cmStrCat("CMAKE_", l, "_COMPILER_FRONTEND_VARIANT")); + if ((compilerId == "Clang" && compilerFrontendVariant == "GNU") || + (simulateId != "MSVC" && + (compilerId == "GNU" || compilerId == "QCC" || + cmHasLiteralSuffix(compilerId, "Clang")))) { + this->UsingGCCOnWindows = true; + } #endif + } } // Implemented by: diff --git a/Source/cmGlobalVisualStudioGenerator.h b/Source/cmGlobalVisualStudioGenerator.h index 151f39f..57ada62 100644 --- a/Source/cmGlobalVisualStudioGenerator.h +++ b/Source/cmGlobalVisualStudioGenerator.h @@ -201,7 +201,7 @@ protected: private: virtual std::string GetVSMakeProgram() = 0; void PrintCompilerAdvice(std::ostream&, std::string const&, - const char*) const override + cmProp) const override { } diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h index 1e1b344..e54818e 100644 --- a/Source/cmGlobalXCodeGenerator.h +++ b/Source/cmGlobalXCodeGenerator.h @@ -327,7 +327,7 @@ private: bool XcodeBuildCommandInitialized; void PrintCompilerAdvice(std::ostream&, std::string const&, - const char*) const override + cmProp) const override { } diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 4c3e8ec..e2e0d8e 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -856,19 +856,18 @@ std::string cmLocalGenerator::GetIncludeFlags( std::string const& includeFlag = this->Makefile->GetSafeDefinition(cmStrCat("CMAKE_INCLUDE_FLAG_", lang)); - const char* sep = cmToCStr( - this->Makefile->GetDefinition(cmStrCat("CMAKE_INCLUDE_FLAG_SEP_", lang))); bool quotePaths = false; if (this->Makefile->GetDefinition("CMAKE_QUOTE_INCLUDE_PATHS")) { quotePaths = true; } + std::string sep = " "; bool repeatFlag = true; // should the include flag be repeated like ie. -IA -IB - if (!sep) { - sep = " "; - } else { + if (cmProp incSep = this->Makefile->GetDefinition( + cmStrCat("CMAKE_INCLUDE_FLAG_SEP_", lang))) { // if there is a separator then the flag is not repeated but is only // given once i.e. -classpath a:b:c + sep = incSep; repeatFlag = false; } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index f9b2562..78c7246 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -2453,7 +2453,7 @@ const char* cmMakefile::GetSONameFlag(const std::string& language) const name += language; } name += "_FLAG"; - return cmToCStr(this->GetDefinition(name)); + return this->GetDefinition(name).GetCStr(); } bool cmMakefile::CanIWriteThisFile(std::string const& fileName) const @@ -2531,7 +2531,7 @@ cmProp cmMakefile::GetDefinition(const std::string& name) const vv->VariableAccessed(name, def ? cmVariableWatch::VARIABLE_READ_ACCESS : cmVariableWatch::UNKNOWN_VARIABLE_READ_ACCESS, - cmToCStr(def), this); + def.GetCStr(), this); if (watch_function_executed) { // A callback was executed and may have caused re-allocation of the diff --git a/Source/cmProperty.h b/Source/cmProperty.h index 4179187..9d83df4 100644 --- a/Source/cmProperty.h +++ b/Source/cmProperty.h @@ -229,11 +229,3 @@ inline bool operator>=(cmProp l, std::nullptr_t) noexcept { return l.Compare(cmProp{}) >= 0; } - -/** - * Temporary wrapper - */ -inline const char* cmToCStr(cmProp p) -{ - return p.GetCStr(); -} diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 4ccbfeb..da6b670 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1656,6 +1656,8 @@ if(BUILD_TESTING) "${CMake_SOURCE_DIR}/Tests/CMakeLists.txt" # random source file that exists "${CMake_BINARY_DIR}/Tests/try_to_create_symlink" # random target file in existing directory RESULT_VARIABLE _symlink_result + OUTPUT_VARIABLE _symlink_stdout + ERROR_VARIABLE _symlink_stderr ) if(_symlink_result EQUAL 0) file(REMOVE "${CMake_BINARY_DIR}/Tests/try_to_create_symlink") diff --git a/Tests/HIP/WithDefs/CMakeLists.txt b/Tests/HIP/WithDefs/CMakeLists.txt index e2db182..270f957 100644 --- a/Tests/HIP/WithDefs/CMakeLists.txt +++ b/Tests/HIP/WithDefs/CMakeLists.txt @@ -19,7 +19,7 @@ target_compile_options(HIPOnlyWithDefs PRIVATE --offload-arch=gfx900 -DFLAG_COMPILE_LANG_$<COMPILE_LANGUAGE> - $<$<HIP_COMPILER_ID:ROCMClang>:-DFLAG_LANG_IS_HIP=$<COMPILE_LANGUAGE:HIP>> # Host-only defines are possible only on NVCC. + $<$<HIP_COMPILER_ID:Clang>:-DFLAG_LANG_IS_HIP=$<COMPILE_LANGUAGE:HIP>> # Host-only defines are possible only on NVCC. ) target_compile_definitions(HIPOnlyWithDefs diff --git a/Tests/MSManifest/Subdir/CMakeLists.txt b/Tests/MSManifest/Subdir/CMakeLists.txt index 8664572..3b4fccc 100644 --- a/Tests/MSManifest/Subdir/CMakeLists.txt +++ b/Tests/MSManifest/Subdir/CMakeLists.txt @@ -7,4 +7,8 @@ if(MSVC AND NOT MSVC_VERSION LESS 1400) -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake) add_executable(MSManifestNone main.c) set_property(TARGET MSManifestNone PROPERTY LINK_FLAGS "/MANIFEST:NO") +elseif(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang") + add_test(NAME MSManifest.Single COMMAND + ${CMAKE_COMMAND} -Dexe=$<TARGET_FILE:MSManifest> + -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake) endif() diff --git a/Tests/MSManifest/Subdir2/CMakeLists.txt b/Tests/MSManifest/Subdir2/CMakeLists.txt index 19d8de7..0d960ad 100644 --- a/Tests/MSManifest/Subdir2/CMakeLists.txt +++ b/Tests/MSManifest/Subdir2/CMakeLists.txt @@ -6,7 +6,7 @@ add_executable(MSMultipleManifest main.c ${CMAKE_CURRENT_BINARY_DIR}/test_manifest2.manifest ${CMAKE_CURRENT_BINARY_DIR}/test_manifest3.manifest) -if(MSVC AND NOT MSVC_VERSION LESS 1400) +if((MSVC AND NOT MSVC_VERSION LESS 1400) OR (WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang") ) add_test(NAME MSManifest.Multiple COMMAND ${CMAKE_COMMAND} -Dexe=$<TARGET_FILE:MSMultipleManifest> -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake) |