@@ -68,12 +68,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAGS} ${SHARED_FLAGS}")
6868option (ENABLE_LTO "Enable Link-Time Optimization (full)" OFF )
6969
7070if (ENABLE_LTO)
71- # Only support Linux
72- if (MACOS)
73- message (FATAL_ERROR "LTO is only supported on Linux" )
74- endif ()
75-
76- message (STATUS "LTO: Enabled (full LTO)" )
71+ message (STATUS "LTO: Enabled" )
7772
7873 # Detect compiler type
7974 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
@@ -84,17 +79,29 @@ if(ENABLE_LTO)
8479 message (FATAL_ERROR "LTO is only supported with Clang or GCC compilers" )
8580 endif ()
8681
87- # For Clang, we need llvm-ar instead of regular ar
82+ # For Clang, we need llvm-ar instead of regular ar. On macOS, try to find
83+ # llvm-ar, but it's optional as the system ar may work with AppleClang's LTO.
8884 if (USING_CLANG)
8985 find_program (LLVM_AR llvm-ar )
90- if (NOT LLVM_AR)
86+ if (LLVM_AR)
87+ set (CMAKE_AR ${LLVM_AR} )
88+ message (STATUS "LTO: Using llvm-ar: ${CMAKE_AR } " )
89+ elseif (MACOS)
90+ message (STATUS
91+ "LTO: Using system ar (llvm-ar not found,"
92+ " AppleClang may work with system ar)" )
93+ else ()
9194 message (FATAL_ERROR "llvm-ar is required for LTO with Clang but was not found" )
9295 endif ()
93- set (CMAKE_AR ${LLVM_AR} )
94- message (STATUS "LTO: Using llvm-ar: ${CMAKE_AR } " )
9596
96- set (LTO_FLAG "-flto" )
97- set (LTO_LINKER_FLAGS "-flto" )
97+ # Use ThinLTO on macOS for better performance and lower memory usage.
98+ if (MACOS)
99+ set (LTO_FLAG "-flto=thin" )
100+ set (LTO_LINKER_FLAGS "-flto=thin" )
101+ else ()
102+ set (LTO_FLAG "-flto" )
103+ set (LTO_LINKER_FLAGS "-flto" )
104+ endif ()
98105 elseif (USING_GCC)
99106 set (LTO_FLAG "-flto" )
100107 set (LTO_LINKER_FLAGS "-flto -fuse-linker-plugin -ffat-lto-objects" )
0 commit comments