From df025444b216f69f57a6bf060a75ca883f5ddce8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 8 Dec 2023 12:37:57 -0500 Subject: LinkerId: Identify AIX and SunOS system linkers Populate `CMAKE__COMPILER_LINKER_{ID,VERSION}` on these platforms. --- Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst | 2 ++ Modules/CMakeParseImplicitLinkInfo.cmake | 2 +- Modules/Internal/CMakeDetermineLinkerId.cmake | 9 +++++++++ Modules/Platform/AIX-GNU.cmake | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst index 560f522..0607aea 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_LINKER_ID.rst @@ -19,6 +19,8 @@ Value Name ``MSVC`` `Microsoft Visual Studio`_ ``MOLD`` `mold: A Modern Linker`_ or, on Apple, `sold`_ linker +``AIX`` AIX system linker +``Solaris`` SunOS system linker =============================== =============================================== This variable is not guaranteed to be defined for all linkers or languages. diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index 0c92634..f62de4c 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -75,7 +75,7 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex) set(linker_regex "^( *|.*[/\\])(${linker}|${startfile}|([^/\\]+-)?ld|collect2)[^/\\]*( |$)") set(linker_exclude_regex "collect2 version |^[A-Za-z0-9_]+=|/ldfe ") set(linker_tool_regex "^[ \t]*(->|exec:|\")?[ \t]*(.*[/\\](${linker}))(\"|,| |$)") - set(linker_tool_exclude_regex "cuda-fake-ld|-fuse-ld=") + set(linker_tool_exclude_regex "cuda-fake-ld|-fuse-ld=|--with-ld=") set(linker_tool "NOTFOUND") set(link_line_parsed 0) string(APPEND log " link line regex: [${linker_regex}]\n") diff --git a/Modules/Internal/CMakeDetermineLinkerId.cmake b/Modules/Internal/CMakeDetermineLinkerId.cmake index 7311862..05c83d2 100644 --- a/Modules/Internal/CMakeDetermineLinkerId.cmake +++ b/Modules/Internal/CMakeDetermineLinkerId.cmake @@ -26,6 +26,7 @@ function(cmake_determine_linker_id lang linker) # Compute the linker ID and version. foreach(flags IN ITEMS "-v" # AppleClang, GNU, GNUgold, MOLD + "-V" # AIX, Solaris "--version" # LLD ) execute_process(COMMAND "${linker}" ${flags} @@ -72,6 +73,14 @@ function(cmake_determine_linker_id lang linker) set(linker_frontend "MSVC") set(linker_version "${CMAKE_MATCH_1}") break() + elseif (CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND linker_desc MATCHES "Solaris Link Editors: ([0-9.-]+)") + set(linker_id "Solaris") + set(linker_version "${CMAKE_MATCH_1}") + break() + elseif (CMAKE_SYSTEM_NAME STREQUAL "AIX" AND linker_desc MATCHES " LD ([0-9.]+)") + set(linker_id "AIX") + set(linker_version "${CMAKE_MATCH_1}") + break() endif() endforeach() if(NOT linker_id) diff --git a/Modules/Platform/AIX-GNU.cmake b/Modules/Platform/AIX-GNU.cmake index 106eaec..55a6680 100644 --- a/Modules/Platform/AIX-GNU.cmake +++ b/Modules/Platform/AIX-GNU.cmake @@ -14,6 +14,7 @@ macro(__aix_compiler_gnu lang) string(APPEND CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS " -Wl,-bnoipath") set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-bexpall") # CMP0065 old behavior set(CMAKE_${lang}_USE_IMPLICIT_LINK_DIRECTORIES_IN_RUNTIME_PATH 1) + set(CMAKE_${lang}_VERBOSE_LINK_FLAG "-Wl,-v") set(CMAKE_${lang}_LINK_FLAGS "-Wl,-bnoipath") set(CMAKE_${lang}_LINK_LIBRARIES_PROCESSING ORDER=REVERSE UNICITY=ALL) -- cgit v0.12