summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRené Bertin <rjvbertin@gmail.com>2024-04-24 19:35:23 (GMT)
committerBrad King <brad.king@kitware.com>2024-04-24 20:57:36 (GMT)
commitf65a6d2cb18c0614e3adb27e007687cde570e8ec (patch)
treee895b56dff415ab093682a8b7724cd8ccabf1888
parent7dac16498e070eac26073e9940b067d33a5f9256 (diff)
downloadCMake-f65a6d2cb18c0614e3adb27e007687cde570e8ec.zip
CMake-f65a6d2cb18c0614e3adb27e007687cde570e8ec.tar.gz
CMake-f65a6d2cb18c0614e3adb27e007687cde570e8ec.tar.bz2
GNU: Do not use "fat-lto-objects" flags for IPO on Apple platforms
Fat LTO objects contain both traditional object code and the LTO bitcode IR, but the GNU compiler does not support them on Apple platforms. A compile error is raised when `-f[no-]fat-lto-objects` flags are used, so avoid them. This also implies that static Fortran libraries cannot be built with IPO. Fixes: #25931
-rw-r--r--Modules/Compiler/GNU.cmake2
-rw-r--r--Modules/FortranCInterface/CMakeLists.txt8
2 files changed, 7 insertions, 3 deletions
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index 1113e9a..857399c 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -151,7 +151,7 @@ macro(__compiler_gnu lang)
list(APPEND __lto_flags -flto)
endif()
- if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
+ if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7 AND NOT APPLE)
# '-ffat-lto-objects' introduced since GCC 4.7:
# * https://gcc.gnu.org/onlinedocs/gcc-4.6.4/gcc/Option-Summary.html (no)
# * https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Option-Summary.html (yes)
diff --git a/Modules/FortranCInterface/CMakeLists.txt b/Modules/FortranCInterface/CMakeLists.txt
index a0f1862..2e8e14f 100644
--- a/Modules/FortranCInterface/CMakeLists.txt
+++ b/Modules/FortranCInterface/CMakeLists.txt
@@ -113,11 +113,15 @@ target_link_libraries(FortranCInterface PUBLIC symbols)
if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 12)
target_compile_options(FortranCInterface PRIVATE "-fno-lto")
- target_compile_options(myfort PRIVATE "-flto=auto" "-ffat-lto-objects")
+ if(NOT APPLE)
+ target_compile_options(myfort PRIVATE "-flto=auto" "-ffat-lto-objects")
+ endif()
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND
CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12)
- target_compile_options(symbols PRIVATE "-flto=auto" "-ffat-lto-objects")
+ if(NOT APPLE)
+ target_compile_options(symbols PRIVATE "-flto=auto" "-ffat-lto-objects")
+ endif()
endif()
file(GENERATE OUTPUT exe-$<CONFIG>.cmake CONTENT [[