[flang-rt] Use --as-needed for linking flang-rt libraries. (#130856)
This change makes sure that there is no unnecessary library dependencies like libc++/libstdc++.
This commit is contained in:
parent
fdb4b89bc0
commit
eeb27331dc
@ -244,6 +244,12 @@ check_cxx_compiler_flag("-UTESTFLAG" FLANG_RT_SUPPORTS_UNDEFINE_FLAG)
|
|||||||
# Check whether -fno-lto is supported.
|
# Check whether -fno-lto is supported.
|
||||||
check_cxx_compiler_flag(-fno-lto FLANG_RT_HAS_FNO_LTO_FLAG)
|
check_cxx_compiler_flag(-fno-lto FLANG_RT_HAS_FNO_LTO_FLAG)
|
||||||
|
|
||||||
|
# Check whether -Wl,--as-needed is supported.
|
||||||
|
check_linker_flag(C "LINKER:--as-needed" LINKER_SUPPORTS_AS_NEEDED)
|
||||||
|
if (LINKER_SUPPORTS_AS_NEEDED)
|
||||||
|
set(LINKER_AS_NEEDED_OPT "LINKER:--as-needed")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Different platform may have different name for the POSIX thread library.
|
# Different platform may have different name for the POSIX thread library.
|
||||||
# For example, libpthread.a on AIX. Search for it as it is needed when
|
# For example, libpthread.a on AIX. Search for it as it is needed when
|
||||||
# building the shared flang_rt.runtime.so.
|
# building the shared flang_rt.runtime.so.
|
||||||
|
@ -145,6 +145,20 @@ function (add_flangrt_library name)
|
|||||||
if (Threads_FOUND)
|
if (Threads_FOUND)
|
||||||
target_link_libraries(${name_shared} PUBLIC Threads::Threads)
|
target_link_libraries(${name_shared} PUBLIC Threads::Threads)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# Special dependencies handling for shared libraries only:
|
||||||
|
#
|
||||||
|
# flang-rt libraries must not depend on libc++/libstdc++,
|
||||||
|
# so set the linker language to C to avoid the unnecessary
|
||||||
|
# library dependence. Note that libc++/libstdc++ may still
|
||||||
|
# come through CMAKE_CXX_IMPLICIT_LINK_LIBRARIES.
|
||||||
|
set_target_properties(${name_shared} PROPERTIES LINKER_LANGUAGE C)
|
||||||
|
# Use --as-needed to avoid unnecessary dependencies.
|
||||||
|
if (LINKER_AS_NEEDED_OPT)
|
||||||
|
target_link_options(${name_shared} BEFORE PRIVATE
|
||||||
|
"${LINKER_AS_NEEDED_OPT}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (libtargets)
|
if (libtargets)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user