From 1835c5174ac58e3bfa9ce7ac373a934911558861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Rodr=C3=ADguez?= Date: Thu, 20 Nov 2025 09:18:30 -0800 Subject: [PATCH] [CMake] Explicitly disable LTO if no LTO option is provided When compiling Swift as an LLVM external project (not the non-unified workflow from the build-script), if one tries to enable LTO for LLVM projects it will end up affecting Swift and the Swift standard library, even if the options `SWIFT_TOOLS_ENABLE_LTO` and `SWIFT_STDLIB_ENABLE_LTO` are disabled or using their default values, because [HandleLLVMOptions] modifies the `CMAKE_C/CXX_FLAGS` globally. By setting `-fno-lto` explicitly when those options are disabled or using their default values, the options from `CMAKE_C/CXX_FLAGS` are overriden, and the `SWIFT_*_ENABLE_LTO` controls the usage or not of LTO optimizations and the presence of bitcode in the object files. [HandleLLVMOptions]: https://github.com/swiftlang/llvm-project/blob/b58b2a34d5094928c4ee1b94a7d5412b14540c01/llvm/cmake/modules/HandleLLVMOptions.cmake#L1278-L1310 --- cmake/modules/AddSwift.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake index 289716edfd496..078ada591e962 100644 --- a/cmake/modules/AddSwift.cmake +++ b/cmake/modules/AddSwift.cmake @@ -58,6 +58,8 @@ function(_compute_lto_flag option out_var) set(${out_var} "-flto=full" PARENT_SCOPE) elseif (lowercase_option STREQUAL "thin") set(${out_var} "-flto=thin" PARENT_SCOPE) + else() + set(${out_var} "-fno-lto" PARENT_SCOPE) endif() endfunction()