-
-
Notifications
You must be signed in to change notification settings - Fork 118
/
Linker.cmake
31 lines (26 loc) · 900 Bytes
/
Linker.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
macro(myproject_configure_linker project_name)
include(CheckCXXCompilerFlag)
set(USER_LINKER_OPTION
"lld"
CACHE STRING "Linker to be used")
set(USER_LINKER_OPTION_VALUES "lld" "gold" "bfd" "mold")
set_property(CACHE USER_LINKER_OPTION PROPERTY STRINGS ${USER_LINKER_OPTION_VALUES})
list(
FIND
USER_LINKER_OPTION_VALUES
${USER_LINKER_OPTION}
USER_LINKER_OPTION_INDEX)
if(${USER_LINKER_OPTION_INDEX} EQUAL -1)
message(
STATUS
"Using custom linker: '${USER_LINKER_OPTION}', explicitly supported entries are ${USER_LINKER_OPTION_VALUES}")
endif()
if(NOT ENABLE_USER_LINKER)
return()
endif()
set(LINKER_FLAG "-fuse-ld=${USER_LINKER_OPTION}")
check_cxx_compiler_flag(${LINKER_FLAG} CXX_SUPPORTS_USER_LINKER)
if(CXX_SUPPORTS_USER_LINKER)
target_compile_options(${project_name} INTERFACE ${LINKER_FLAG})
endif()
endmacro()