From 9ffd4130087ac60424d5b71708e5e1c47dafb475 Mon Sep 17 00:00:00 2001 From: Ankit Meel Date: Wed, 12 Apr 2023 17:01:53 +0530 Subject: [PATCH] macOS/Linker: support mold and lld If someone buys "sold", mold should work on macOS too. With lld, Blender (700 MB) intel i5: 26s -> 17s. Pull Request #106843 --- CMakeLists.txt | 8 +++--- .../cmake/platform/platform_apple.cmake | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f8e3460f09..a31a8e92485 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -645,15 +645,15 @@ if(WIN32) endif() # Compiler tool-chain. -if(UNIX AND NOT APPLE) +if(UNIX) if(CMAKE_COMPILER_IS_GNUCC) option(WITH_LINKER_GOLD "Use ld.gold linker which is usually faster than ld.bfd" ON) mark_as_advanced(WITH_LINKER_GOLD) - option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF) - mark_as_advanced(WITH_LINKER_LLD) endif() if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") - option(WITH_LINKER_MOLD "Use ld.mold linker which is usually faster than ld.gold & ld.lld." OFF) + option(WITH_LINKER_LLD "Use ld.lld linker which is usually faster than ld.gold" OFF) + mark_as_advanced(WITH_LINKER_LLD) + option(WITH_LINKER_MOLD "Use ld.mold linker which is usually faster than ld.gold & ld.lld. Needs \"sold\" subscription on macOS." OFF) mark_as_advanced(WITH_LINKER_MOLD) endif() endif() diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 942e86f617d..20114191c52 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -451,6 +451,31 @@ if(WITH_COMPILER_CCACHE) endif() endif() +unset(_custom_LINKER_FUSE_FLAG) +if(WITH_LINKER_LLD) + find_program(LLD_PROGRAM ld.lld) + if(LLD_PROGRAM) + set(_custom_LINKER_FUSE_FLAG "-fuse-ld=lld") + else() + message(WARNING "LLD linker NOT found, disabling WITH_LINKER_LLD") + set(WITH_LINKER_LLD OFF) + endif() +endif() +if(WITH_LINKER_MOLD) + find_program(MOLD_PROGRAM mold) + if(MOLD_PROGRAM) + set(_custom_LINKER_FUSE_FLAG "-fuse-ld=mold") + else() + message(WARNING "Mold linker NOT found, disabling WITH_LINKER_MOLD") + set(WITH_LINKER_MOLD OFF) + endif() +endif() + +if(_custom_LINKER_FUSE_FLAG) + add_link_options(${_custom_LINKER_FUSE_FLAG}) +endif() + + if(WITH_COMPILER_ASAN) list(APPEND PLATFORM_BUNDLED_LIBRARIES ${COMPILER_ASAN_LIBRARY}) endif()