LinkerId: Identify AIX and SunOS system linkers

Populate `CMAKE_<LANG>_COMPILER_LINKER_{ID,VERSION}` on these platforms.
This commit is contained in:
Brad King
2023-12-08 12:37:57 -05:00
parent c1e48a19a5
commit df025444b2
4 changed files with 13 additions and 1 deletions

View File

@@ -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.

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)