diff --git a/Modules/CMakeASMCompiler.cmake.in b/Modules/CMakeASMCompiler.cmake.in index c7dbfae970..a0434752e7 100644 --- a/Modules/CMakeASMCompiler.cmake.in +++ b/Modules/CMakeASMCompiler.cmake.in @@ -7,10 +7,10 @@ set(CMAKE_ASM@ASM_DIALECT@_COMPILER_RANLIB "@_CMAKE_ASM_COMPILER_RANLIB@") set(CMAKE_LINKER "@CMAKE_LINKER@") set(CMAKE_LINKER_LINK "@CMAKE_LINKER_LINK@") set(CMAKE_LINKER_LLD "@CMAKE_LINKER_LLD@") -set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER "@CMAKE_ASM_COMPILER_LINKER@") -set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_ID "@CMAKE_ASM_COMPILER_LINKER_ID@") -set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_VERSION @CMAKE_ASM_COMPILER_LINKER_VERSION@) -set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_FRONTEND_VARIANT @CMAKE_ASM_COMPILER_LINKER_FRONTEND_VARIANT@) +set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER "@_CMAKE_ASM_COMPILER_LINKER@") +set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_ID "@_CMAKE_ASM_COMPILER_LINKER_ID@") +set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_VERSION @_CMAKE_ASM_COMPILER_LINKER_VERSION@) +set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LINKER_FRONTEND_VARIANT @_CMAKE_ASM_COMPILER_LINKER_FRONTEND_VARIANT@) set(CMAKE_MT "@CMAKE_MT@") set(CMAKE_TAPI "@CMAKE_TAPI@") set(CMAKE_ASM@ASM_DIALECT@_COMPILER_LOADED 1) @@ -23,6 +23,6 @@ set(CMAKE_ASM@ASM_DIALECT@_COMPILER_ENV_VAR "@_CMAKE_ASM_COMPILER_ENV_VAR@") set(CMAKE_ASM@ASM_DIALECT@_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) set(CMAKE_ASM@ASM_DIALECT@_LINKER_PREFERENCE 0) -set(CMAKE_ASM@ASM_DIALECT@_LINKER_DEPFILE_SUPPORTED @CMAKE_ASM_LINKER_DEPFILE_SUPPORTED@) +set(CMAKE_ASM@ASM_DIALECT@_LINKER_DEPFILE_SUPPORTED @_CMAKE_ASM_LINKER_DEPFILE_SUPPORTED@) @CMAKE_ASM_COMPILER_CUSTOM_CODE@ diff --git a/Modules/Internal/CMakeInspectASM-ATTLinker.cmake b/Modules/Internal/CMakeInspectASM-ATTLinker.cmake new file mode 100644 index 0000000000..3c3a36d6e8 --- /dev/null +++ b/Modules/Internal/CMakeInspectASM-ATTLinker.cmake @@ -0,0 +1,7 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Load the generic ASM test file: +set(ASM_DIALECT "-ATT") +include(Internal/CMakeInspectASMLinker) +set(ASM_DIALECT) diff --git a/Modules/Internal/CMakeInspectASMLinker.cmake b/Modules/Internal/CMakeInspectASMLinker.cmake new file mode 100644 index 0000000000..b59763eb9e --- /dev/null +++ b/Modules/Internal/CMakeInspectASMLinker.cmake @@ -0,0 +1,26 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +block() + foreach(_var IN ITEMS + COMPILER + COMPILER_ID + COMPILER_ARG1 + COMPILER_ENV_VAR + COMPILER_AR + COMPILER_RANLIB + COMPILER_VERSION + COMPILER_LINKER + COMPILER_LINKER_ID + COMPILER_LINKER_VERSION + COMPILER_LINKER_FRONTEND_VARIANT + LINKER_DEPFILE_SUPPORTED + ) + set(_CMAKE_ASM_${_var} "${CMAKE_ASM${ASM_DIALECT}_${_var}}") + endforeach() + configure_file( + ${CMAKE_ROOT}/Modules/CMakeASMCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeASM${ASM_DIALECT}Compiler.cmake + @ONLY) +endblock() diff --git a/Modules/Internal/CMakeInspectASM_MARMASMLinker.cmake b/Modules/Internal/CMakeInspectASM_MARMASMLinker.cmake new file mode 100644 index 0000000000..bea7af1c24 --- /dev/null +++ b/Modules/Internal/CMakeInspectASM_MARMASMLinker.cmake @@ -0,0 +1,7 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Load the generic ASM test file: +set(ASM_DIALECT "_MARMASM") +include(Internal/CMakeInspectASMLinker) +set(ASM_DIALECT) diff --git a/Modules/Internal/CMakeInspectASM_MASMLinker.cmake b/Modules/Internal/CMakeInspectASM_MASMLinker.cmake new file mode 100644 index 0000000000..b6c377f0e1 --- /dev/null +++ b/Modules/Internal/CMakeInspectASM_MASMLinker.cmake @@ -0,0 +1,7 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Load the generic ASM test file: +set(ASM_DIALECT "_MASM") +include(Internal/CMakeInspectASMLinker) +set(ASM_DIALECT) diff --git a/Modules/Internal/CMakeInspectASM_NASMLinker.cmake b/Modules/Internal/CMakeInspectASM_NASMLinker.cmake new file mode 100644 index 0000000000..53e9ad61e9 --- /dev/null +++ b/Modules/Internal/CMakeInspectASM_NASMLinker.cmake @@ -0,0 +1,7 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Load the generic ASM test file: +set(ASM_DIALECT "_NASM") +include(Internal/CMakeInspectASMLinker) +set(ASM_DIALECT) diff --git a/Modules/Internal/CMakeInspectCLinker.cmake b/Modules/Internal/CMakeInspectCLinker.cmake new file mode 100644 index 0000000000..fcec2e2019 --- /dev/null +++ b/Modules/Internal/CMakeInspectCLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeCCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeCCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectCUDALinker.cmake b/Modules/Internal/CMakeInspectCUDALinker.cmake new file mode 100644 index 0000000000..d1d5e7758a --- /dev/null +++ b/Modules/Internal/CMakeInspectCUDALinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeCUDACompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeCUDACompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectCXXLinker.cmake b/Modules/Internal/CMakeInspectCXXLinker.cmake new file mode 100644 index 0000000000..6af7337861 --- /dev/null +++ b/Modules/Internal/CMakeInspectCXXLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeCXXCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeCXXCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectFortranLinker.cmake b/Modules/Internal/CMakeInspectFortranLinker.cmake new file mode 100644 index 0000000000..0323d81522 --- /dev/null +++ b/Modules/Internal/CMakeInspectFortranLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeFortranCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeFortranCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectHIPLinker.cmake b/Modules/Internal/CMakeInspectHIPLinker.cmake new file mode 100644 index 0000000000..2320abcb26 --- /dev/null +++ b/Modules/Internal/CMakeInspectHIPLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeHIPCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectOBJCLinker.cmake b/Modules/Internal/CMakeInspectOBJCLinker.cmake new file mode 100644 index 0000000000..e9e3e7caba --- /dev/null +++ b/Modules/Internal/CMakeInspectOBJCLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeOBJCCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectOBJCXXLinker.cmake b/Modules/Internal/CMakeInspectOBJCXXLinker.cmake new file mode 100644 index 0000000000..2b3acf2022 --- /dev/null +++ b/Modules/Internal/CMakeInspectOBJCXXLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeOBJCXXCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeOBJCXXCompiler.cmake + @ONLY) diff --git a/Modules/Internal/CMakeInspectSwiftLinker.cmake b/Modules/Internal/CMakeInspectSwiftLinker.cmake new file mode 100644 index 0000000000..818d4e9aa8 --- /dev/null +++ b/Modules/Internal/CMakeInspectSwiftLinker.cmake @@ -0,0 +1,8 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +# Re-configure to save learned information. +configure_file( + ${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake + @ONLY) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index e361ad26a5..eced1608ba 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -963,9 +963,9 @@ void cmGlobalGenerator::EnableLanguage( } // end if in try compile } // end need test language - // load linker configuration, if required - if (mf->GetDefinition(cmStrCat("CMAKE_", lang, "_USE_LINKER_INFORMATION")) - .IsOn()) { + // load linker configuration, if required + if (mf->IsOn(cmStrCat("CMAKE_", lang, "_COMPILER_WORKS")) && + mf->IsOn(cmStrCat("CMAKE_", lang, "_USE_LINKER_INFORMATION"))) { std::string langLinkerLoadedVar = cmStrCat("CMAKE_", lang, "_LINKER_INFORMATION_LOADED"); if (!mf->GetDefinition(langLinkerLoadedVar)) { @@ -982,6 +982,18 @@ void cmGlobalGenerator::EnableLanguage( "Could not process cmake module file: ", informationFile)); } } + + if (needTestLanguage[lang]) { + if (!this->CMakeInstance->GetIsInTryCompile()) { + std::string testLang = + cmStrCat("Internal/CMakeInspect", lang, "Linker.cmake"); + std::string ifpath = mf->GetModulesFile(testLang); + if (!mf->ReadListFile(ifpath)) { + cmSystemTools::Error( + cmStrCat("Could not find cmake module file: ", testLang)); + } + } + } } // Store the shared library flags so that we can satisfy CMP0018