diff --git a/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt index 3027982f05ab21..0bc8879470db75 100644 --- a/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/Full/CMakeLists.txt @@ -32,6 +32,27 @@ if(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES) # libunwind implementation symbols are resolved before localization. The # localize list is generated only from the bundled libunwind source objects. set(NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOL_OBJECTS "$,EXCLUDE,.*(UnwindHelpers|UnixNativeCodeManager)\\.cpp\\.o$>") + set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${CMAKE_LINKER}") + get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" NAME) + if(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_NAME MATCHES "^llvm-link(-[0-9.]+)?(\\.exe)?$") + set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION "${CMAKE_MATCH_1}") + set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION "${CMAKE_MATCH_2}") + get_filename_component(NATIVEAOT_PRIVATE_LIBUNWIND_TOOL_DIR "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" DIRECTORY) + find_program(NATIVEAOT_PRIVATE_LIBUNWIND_LD_LLD + NAMES "ld.lld${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_VERSION}${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER_EXTENSION}" ld.lld + PATHS "${NATIVEAOT_PRIVATE_LIBUNWIND_TOOL_DIR}" + NO_DEFAULT_PATH) + if(NATIVEAOT_PRIVATE_LIBUNWIND_LD_LLD) + set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${NATIVEAOT_PRIVATE_LIBUNWIND_LD_LLD}") + else() + find_program(NATIVEAOT_PRIVATE_LIBUNWIND_LD NAMES ld) + if(NATIVEAOT_PRIVATE_LIBUNWIND_LD) + set(NATIVEAOT_PRIVATE_LIBUNWIND_LINKER "${NATIVEAOT_PRIVATE_LIBUNWIND_LD}") + else() + message(FATAL_ERROR "ld.lld (preferred) or ld is required to privatize NativeAOT libunwind symbols") + endif() + endif() + endif() add_custom_command( OUTPUT "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" @@ -48,7 +69,7 @@ if(NATIVEAOT_PRIVATE_LIBUNWIND_SOURCES) "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" COMMAND "${CMAKE_COMMAND}" -E rm -f "${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS_UNSORTED}" - COMMAND "${CMAKE_LINKER}" -r $ -o "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" + COMMAND "${NATIVEAOT_PRIVATE_LIBUNWIND_LINKER}" -r $ -o "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}" COMMAND "${CMAKE_OBJCOPY}" "--localize-symbols=${NATIVEAOT_PRIVATE_LIBUNWIND_SYMBOLS}" "${NATIVEAOT_PRIVATE_LIBUNWIND_OBJECT}"