summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/release/3.20.rst4
-rw-r--r--Help/release/3.21.rst10
-rw-r--r--Help/variable/CMAKE_HIP_ARCHITECTURES.rst3
-rw-r--r--Help/variable/CMAKE_LANG_COMPILER_ID.rst1
-rw-r--r--Modules/CMakeCCompiler.cmake.in9
-rw-r--r--Modules/CMakeCXXCompiler.cmake.in9
-rw-r--r--Modules/CMakeCompilerIdDetection.cmake3
-rw-r--r--Modules/CMakeDetermineCCompiler.cmake5
-rw-r--r--Modules/CMakeDetermineCXXCompiler.cmake5
-rw-r--r--Modules/CMakeDetermineCompiler.cmake2
-rw-r--r--Modules/CMakeDetermineCompilerId.cmake35
-rw-r--r--Modules/CMakeDetermineFortranCompiler.cmake5
-rw-r--r--Modules/CMakeDetermineHIPCompiler.cmake95
-rw-r--r--Modules/CMakeFortranCompiler.cmake.in9
-rw-r--r--Modules/CMakeHIPCompiler.cmake.in1
-rw-r--r--Modules/CMakeHIPInformation.cmake11
-rw-r--r--Modules/CMakeHIPRuntime.cmake.in99
-rw-r--r--Modules/CMakeTestHIPCompiler.cmake21
-rw-r--r--Modules/Compiler/Clang-HIP.cmake2
-rw-r--r--Modules/Compiler/ROCMClang-ASM.cmake2
-rw-r--r--Modules/Compiler/ROCMClang-C.cmake7
-rw-r--r--Modules/Compiler/ROCMClang-CXX.cmake7
-rw-r--r--Modules/Compiler/ROCMClang-DetermineCompiler.cmake19
-rw-r--r--Modules/Compiler/ROCMClang-FindBinUtils.cmake1
-rw-r--r--Modules/Compiler/ROCMClang-HIP.cmake49
-rw-r--r--Modules/Compiler/ROCMClang-OBJC.cmake7
-rw-r--r--Modules/Compiler/ROCMClang-OBJCXX.cmake7
-rw-r--r--Modules/Compiler/ROCMClang.cmake35
-rw-r--r--Modules/Platform/Windows-Clang.cmake6
-rw-r--r--Modules/Platform/Windows-GNU.cmake44
-rw-r--r--Modules/WriteCompilerDetectionHeader.cmake1
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/cmCPluginAPI.cxx6
-rw-r--r--Source/cmCommonTargetGenerator.cxx13
-rw-r--r--Source/cmCurl.cxx6
-rw-r--r--Source/cmCurl.h2
-rw-r--r--Source/cmFileCommand.cxx4
-rw-r--r--Source/cmGeneratorTarget.cxx2
-rw-r--r--Source/cmGetPropertyCommand.cxx15
-rw-r--r--Source/cmGlobalGenerator.cxx4
-rw-r--r--Source/cmGlobalGenerator.h2
-rw-r--r--Source/cmGlobalJOMMakefileGenerator.cxx5
-rw-r--r--Source/cmGlobalJOMMakefileGenerator.h2
-rw-r--r--Source/cmGlobalNMakeMakefileGenerator.cxx2
-rw-r--r--Source/cmGlobalNMakeMakefileGenerator.h2
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx34
-rw-r--r--Source/cmGlobalVisualStudioGenerator.h2
-rw-r--r--Source/cmGlobalXCodeGenerator.h2
-rw-r--r--Source/cmLocalGenerator.cxx9
-rw-r--r--Source/cmMakefile.cxx4
-rw-r--r--Source/cmProperty.h8
-rw-r--r--Tests/CMakeLists.txt2
-rw-r--r--Tests/HIP/WithDefs/CMakeLists.txt2
-rw-r--r--Tests/MSManifest/Subdir/CMakeLists.txt4
-rw-r--r--Tests/MSManifest/Subdir2/CMakeLists.txt2
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)