properly select linker for modern clang compilers
This commit is contained in:
@ -21,22 +21,15 @@ if(ENABLE_TESTING)
|
|||||||
# also only verified with Fedora Linux > 30 and Ubuntu 18.04 or 22.04+(Ubuntu 20.04 fails)
|
# also only verified with Fedora Linux > 30 and Ubuntu 18.04 or 22.04+(Ubuntu 20.04 fails)
|
||||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if((CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
AND ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")))
|
AND ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")))
|
||||||
if(((CMAKE_LINUX_DISTRO STREQUAL "Ubuntu") AND
|
if(((CMAKE_LINUX_DISTRO STREQUAL "Ubuntu") AND (CMAKE_DISTRO_VERSION VERSION_GREATER_EQUAL 22.04))
|
||||||
((CMAKE_DISTRO_VERSION VERSION_LESS_EQUAL 18.04) OR (CMAKE_DISTRO_VERSION VERSION_GREATER_EQUAL 22.04)))
|
|
||||||
OR ((CMAKE_LINUX_DISTRO STREQUAL "Fedora") AND (CMAKE_DISTRO_VERSION VERSION_GREATER 30)))
|
OR ((CMAKE_LINUX_DISTRO STREQUAL "Fedora") AND (CMAKE_DISTRO_VERSION VERSION_GREATER 30)))
|
||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
set(CMAKE_CUSTOM_LINKER_DEFAULT default)
|
set(CMAKE_CUSTOM_LINKER_DEFAULT default)
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9))
|
check_cxx_compiler_flag(--ld-path=${CMAKE_LINKER} HAVE_LD_PATH_FLAG)
|
||||||
check_cxx_compiler_flag(--ld-path=mold HAVE_MOLD_LINKER_FLAG)
|
|
||||||
check_cxx_compiler_flag(--ld-path=lld HAVE_LLD_LINKER_FLAG)
|
|
||||||
check_cxx_compiler_flag(--ld-path=gold HAVE_GOLD_LINKER_FLAG)
|
|
||||||
check_cxx_compiler_flag(--ld-path=bfd HAVE_BFD_LINKER_FLAG)
|
|
||||||
else()
|
|
||||||
check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG)
|
check_cxx_compiler_flag(-fuse-ld=mold HAVE_MOLD_LINKER_FLAG)
|
||||||
check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG)
|
check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG)
|
||||||
check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG)
|
check_cxx_compiler_flag(-fuse-ld=gold HAVE_GOLD_LINKER_FLAG)
|
||||||
check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG)
|
check_cxx_compiler_flag(-fuse-ld=bfd HAVE_BFD_LINKER_FLAG)
|
||||||
endif()
|
|
||||||
find_program(HAVE_MOLD_LINKER_BIN ld.mold)
|
find_program(HAVE_MOLD_LINKER_BIN ld.mold)
|
||||||
find_program(HAVE_LLD_LINKER_BIN lld ld.lld)
|
find_program(HAVE_LLD_LINKER_BIN lld ld.lld)
|
||||||
find_program(HAVE_GOLD_LINKER_BIN ld.gold)
|
find_program(HAVE_GOLD_LINKER_BIN ld.gold)
|
||||||
@ -55,11 +48,18 @@ if(ENABLE_TESTING)
|
|||||||
validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES)
|
validate_option(CMAKE_CUSTOM_LINKER CMAKE_CUSTOM_LINKER_VALUES)
|
||||||
mark_as_advanced(CMAKE_CUSTOM_LINKER)
|
mark_as_advanced(CMAKE_CUSTOM_LINKER)
|
||||||
if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default")
|
if(NOT "${CMAKE_CUSTOM_LINKER}" STREQUAL "default")
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.9))
|
|
||||||
target_link_options(lammps PUBLIC --ld-path=${CMAKE_CUSTOM_LINKER})
|
|
||||||
else()
|
|
||||||
target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER})
|
target_link_options(lammps PUBLIC -fuse-ld=${CMAKE_CUSTOM_LINKER})
|
||||||
endif()
|
endif()
|
||||||
|
if(HAVE_LD_PATH_FLAG)
|
||||||
|
if("${CMAKE_CUSTOM_LINKER}" STREQUAL "mold")
|
||||||
|
target_link_options(lammps PUBLIC --ld-path=${HAVE_MOLD_LINKER_BIN})
|
||||||
|
elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "lld")
|
||||||
|
target_link_options(lammps PUBLIC --ld-path=${HAVE_LLD_LINKER_BIN})
|
||||||
|
elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "gold")
|
||||||
|
target_link_options(lammps PUBLIC --ld-path=${HAVE_GOLD_LINKER_BIN})
|
||||||
|
elseif("${CMAKE_CUSTOM_LINKER}" STREQUAL "bfd")
|
||||||
|
target_link_options(lammps PUBLIC --ld-path=${HAVE_BFD_LINKER_BIN})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user