File tree Expand file tree Collapse file tree 2 files changed +29
-1
lines changed
Expand file tree Collapse file tree 2 files changed +29
-1
lines changed Original file line number Diff line number Diff line change @@ -11,3 +11,20 @@ set(CMAKE_C_ARCHIVE_FINISH "")
1111set (CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> crs <TARGET> <LINK_FLAGS> <OBJECTS>" )
1212set (CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> qs <TARGET> <LINK_FLAGS> <OBJECTS>" )
1313set (CMAKE_CXX_ARCHIVE_FINISH "" )
14+
15+ # When archiving LTO-based .o files with ar/ranlib/libtool on Darwin, the tools
16+ # use libLTO.dylib to inspect the bitcode files. However, by default the
17+ # "host" libLTO.dylib is loaded, which might be too old and not understand our
18+ # just-built bitcode format. So let's instead ask ar/ranlib/libtool to use the
19+ # just-built libLTO.dylib from the toolchain that we're using to build.
20+ if (APPLE AND SWIFT_NATIVE_CLANG_TOOLS_PATH)
21+ set (liblto_path "${SWIFT_NATIVE_CLANG_TOOLS_PATH} /../lib/libLTO.dylib" )
22+
23+ set (CMAKE_C_ARCHIVE_CREATE "${CMAKE_COMMAND} -E env LIBLTO_PATH=${liblto_path} <CMAKE_AR> crs <TARGET> <LINK_FLAGS> <OBJECTS>" )
24+ set (CMAKE_C_ARCHIVE_APPEND "${CMAKE_COMMAND} -E env LIBLTO_PATH=${liblto_path} <CMAKE_AR> qs <TARGET> <LINK_FLAGS> <OBJECTS>" )
25+ set (CMAKE_C_ARCHIVE_FINISH "" )
26+
27+ set (CMAKE_CXX_ARCHIVE_CREATE "${CMAKE_COMMAND} -E env LIBLTO_PATH=${liblto_path} <CMAKE_AR> crs <TARGET> <LINK_FLAGS> <OBJECTS>" )
28+ set (CMAKE_CXX_ARCHIVE_APPEND "${CMAKE_COMMAND} -E env LIBLTO_PATH=${liblto_path} <CMAKE_AR> qs <TARGET> <LINK_FLAGS> <OBJECTS>" )
29+ set (CMAKE_CXX_ARCHIVE_FINISH "" )
30+ endif ()
Original file line number Diff line number Diff line change @@ -546,9 +546,20 @@ function(_add_swift_lipo_target)
546546 if (LIPO_CODESIGN)
547547 set (codesign_command COMMAND "codesign" "-f" "-s" "-" "${LIPO_OUTPUT} " )
548548 endif ()
549+
550+ set (lipo_lto_env)
551+ # When lipo-ing LTO-based libraries with lipo on Darwin, the tool uses
552+ # libLTO.dylib to inspect the bitcode files. However, by default the "host"
553+ # libLTO.dylib is loaded, which might be too old and not understand the
554+ # just-built bitcode format. Let's ask lipo to use the just-built
555+ # libLTO.dylib from the toolchain that we're using to build.
556+ if (APPLE AND SWIFT_NATIVE_CLANG_TOOLS_PATH)
557+ set (lipo_lto_env "LIBLTO_PATH=${SWIFT_NATIVE_CLANG_TOOLS_PATH} /../lib/libLTO.dylib" )
558+ endif ()
559+
549560 # Use lipo to create the final binary.
550561 add_custom_command_target(unused_var
551- COMMAND "${SWIFT_LIPO} " "-create" "-output" "${LIPO_OUTPUT} " ${source_binaries}
562+ COMMAND "${CMAKE_COMMAND} " "-E" "env" ${lipo_lto_env} " ${ SWIFT_LIPO} " "-create" "-output" "${LIPO_OUTPUT} " ${source_binaries}
552563 ${codesign_command}
553564 CUSTOM_TARGET_NAME "${LIPO_TARGET} "
554565 OUTPUT "${LIPO_OUTPUT} "
You can’t perform that action at this time.
0 commit comments