From 7ae11ea4e74341caf36f095d8adbee4582758d16 Mon Sep 17 00:00:00 2001 From: Undefine Date: Mon, 30 Jun 2025 23:01:57 +0200 Subject: [PATCH] Platform: Add compiler platform modules for BSDs These set variables required for CMAKE_LINKER_TYPE to work Fixes: #27037 --- Modules/Platform/FreeBSD-Clang-ASM.cmake | 1 + Modules/Platform/FreeBSD-Clang-C.cmake | 1 + Modules/Platform/FreeBSD-Clang-CXX.cmake | 1 + Modules/Platform/FreeBSD-GNU-ASM.cmake | 2 ++ Modules/Platform/FreeBSD-GNU-C.cmake | 2 ++ Modules/Platform/FreeBSD-GNU-CXX.cmake | 2 ++ Modules/Platform/FreeBSD-GNU-Fortran.cmake | 2 ++ Modules/Platform/FreeBSD-GNU.cmake | 16 ++++++++++++++++ Modules/Platform/MirBSD-GNU-ASM.cmake | 2 ++ Modules/Platform/MirBSD-GNU-C.cmake | 2 ++ Modules/Platform/MirBSD-GNU-CXX.cmake | 2 ++ Modules/Platform/MirBSD-GNU-Fortran.cmake | 2 ++ Modules/Platform/MirBSD-GNU.cmake | 7 +++++++ Modules/Platform/NetBSD-Clang-ASM.cmake | 1 + Modules/Platform/NetBSD-Clang-C.cmake | 1 + Modules/Platform/NetBSD-Clang-CXX.cmake | 1 + Modules/Platform/NetBSD-GNU-ASM.cmake | 2 ++ Modules/Platform/NetBSD-GNU-C.cmake | 2 ++ Modules/Platform/NetBSD-GNU-CXX.cmake | 2 ++ Modules/Platform/NetBSD-GNU-Fortran.cmake | 2 ++ Modules/Platform/NetBSD-GNU.cmake | 16 ++++++++++++++++ Modules/Platform/OpenBSD-Clang-ASM.cmake | 1 + Modules/Platform/OpenBSD-Clang-C.cmake | 1 + Modules/Platform/OpenBSD-Clang-CXX.cmake | 1 + Modules/Platform/OpenBSD-GNU-ASM.cmake | 2 ++ Modules/Platform/OpenBSD-GNU-C.cmake | 2 ++ Modules/Platform/OpenBSD-GNU-CXX.cmake | 2 ++ Modules/Platform/OpenBSD-GNU-Fortran.cmake | 2 ++ Modules/Platform/OpenBSD-GNU.cmake | 7 +++++++ Tests/RunCMake/CMakeLists.txt | 2 +- 30 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 Modules/Platform/FreeBSD-Clang-ASM.cmake create mode 100644 Modules/Platform/FreeBSD-Clang-C.cmake create mode 100644 Modules/Platform/FreeBSD-Clang-CXX.cmake create mode 100644 Modules/Platform/FreeBSD-GNU-ASM.cmake create mode 100644 Modules/Platform/FreeBSD-GNU-C.cmake create mode 100644 Modules/Platform/FreeBSD-GNU-CXX.cmake create mode 100644 Modules/Platform/FreeBSD-GNU-Fortran.cmake create mode 100644 Modules/Platform/FreeBSD-GNU.cmake create mode 100644 Modules/Platform/MirBSD-GNU-ASM.cmake create mode 100644 Modules/Platform/MirBSD-GNU-C.cmake create mode 100644 Modules/Platform/MirBSD-GNU-CXX.cmake create mode 100644 Modules/Platform/MirBSD-GNU-Fortran.cmake create mode 100644 Modules/Platform/MirBSD-GNU.cmake create mode 100644 Modules/Platform/NetBSD-Clang-ASM.cmake create mode 100644 Modules/Platform/NetBSD-Clang-C.cmake create mode 100644 Modules/Platform/NetBSD-Clang-CXX.cmake create mode 100644 Modules/Platform/NetBSD-GNU-ASM.cmake create mode 100644 Modules/Platform/NetBSD-GNU-C.cmake create mode 100644 Modules/Platform/NetBSD-GNU-CXX.cmake create mode 100644 Modules/Platform/NetBSD-GNU-Fortran.cmake create mode 100644 Modules/Platform/NetBSD-GNU.cmake create mode 100644 Modules/Platform/OpenBSD-Clang-ASM.cmake create mode 100644 Modules/Platform/OpenBSD-Clang-C.cmake create mode 100644 Modules/Platform/OpenBSD-Clang-CXX.cmake create mode 100644 Modules/Platform/OpenBSD-GNU-ASM.cmake create mode 100644 Modules/Platform/OpenBSD-GNU-C.cmake create mode 100644 Modules/Platform/OpenBSD-GNU-CXX.cmake create mode 100644 Modules/Platform/OpenBSD-GNU-Fortran.cmake create mode 100644 Modules/Platform/OpenBSD-GNU.cmake diff --git a/Modules/Platform/FreeBSD-Clang-ASM.cmake b/Modules/Platform/FreeBSD-Clang-ASM.cmake new file mode 100644 index 0000000000..d9557d65a9 --- /dev/null +++ b/Modules/Platform/FreeBSD-Clang-ASM.cmake @@ -0,0 +1 @@ +include(Platform/FreeBSD-GNU-ASM) diff --git a/Modules/Platform/FreeBSD-Clang-C.cmake b/Modules/Platform/FreeBSD-Clang-C.cmake new file mode 100644 index 0000000000..bf7349b1dd --- /dev/null +++ b/Modules/Platform/FreeBSD-Clang-C.cmake @@ -0,0 +1 @@ +include(Platform/FreeBSD-GNU-C) diff --git a/Modules/Platform/FreeBSD-Clang-CXX.cmake b/Modules/Platform/FreeBSD-Clang-CXX.cmake new file mode 100644 index 0000000000..ceed6b6a38 --- /dev/null +++ b/Modules/Platform/FreeBSD-Clang-CXX.cmake @@ -0,0 +1 @@ +include(Platform/FreeBSD-GNU-CXX) diff --git a/Modules/Platform/FreeBSD-GNU-ASM.cmake b/Modules/Platform/FreeBSD-GNU-ASM.cmake new file mode 100644 index 0000000000..8da5100150 --- /dev/null +++ b/Modules/Platform/FreeBSD-GNU-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/FreeBSD-GNU) +__freebsd_compiler_gnu(ASM) diff --git a/Modules/Platform/FreeBSD-GNU-C.cmake b/Modules/Platform/FreeBSD-GNU-C.cmake new file mode 100644 index 0000000000..f19c60b3a2 --- /dev/null +++ b/Modules/Platform/FreeBSD-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/FreeBSD-GNU) +__freebsd_compiler_gnu(C) diff --git a/Modules/Platform/FreeBSD-GNU-CXX.cmake b/Modules/Platform/FreeBSD-GNU-CXX.cmake new file mode 100644 index 0000000000..9589dad763 --- /dev/null +++ b/Modules/Platform/FreeBSD-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/FreeBSD-GNU) +__freebsd_compiler_gnu(CXX) diff --git a/Modules/Platform/FreeBSD-GNU-Fortran.cmake b/Modules/Platform/FreeBSD-GNU-Fortran.cmake new file mode 100644 index 0000000000..d37a355bba --- /dev/null +++ b/Modules/Platform/FreeBSD-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/FreeBSD-GNU) +__freebsd_compiler_gnu(Fortran) diff --git a/Modules/Platform/FreeBSD-GNU.cmake b/Modules/Platform/FreeBSD-GNU.cmake new file mode 100644 index 0000000000..36ba12681d --- /dev/null +++ b/Modules/Platform/FreeBSD-GNU.cmake @@ -0,0 +1,16 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +include_guard() + +macro(__freebsd_compiler_gnu lang) + # linker selection + set(CMAKE_${lang}_USING_LINKER_SYSTEM "") + set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld") + set(CMAKE_${lang}_USING_LINKER_BFD "-fuse-ld=bfd") + set(CMAKE_${lang}_USING_LINKER_GOLD "-fuse-ld=gold") + if(NOT CMAKE_${lang}_COMPILER_ID STREQUAL "GNU" + OR CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1") + set(CMAKE_${lang}_USING_LINKER_MOLD "-fuse-ld=mold") + endif() +endmacro() diff --git a/Modules/Platform/MirBSD-GNU-ASM.cmake b/Modules/Platform/MirBSD-GNU-ASM.cmake new file mode 100644 index 0000000000..812fc960de --- /dev/null +++ b/Modules/Platform/MirBSD-GNU-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/MirBSD-GNU) +__mirbsd_compiler_gnu(ASM) diff --git a/Modules/Platform/MirBSD-GNU-C.cmake b/Modules/Platform/MirBSD-GNU-C.cmake new file mode 100644 index 0000000000..c1c66d7348 --- /dev/null +++ b/Modules/Platform/MirBSD-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/MirBSD-GNU) +__mirbsd_compiler_gnu(C) diff --git a/Modules/Platform/MirBSD-GNU-CXX.cmake b/Modules/Platform/MirBSD-GNU-CXX.cmake new file mode 100644 index 0000000000..bf021574e8 --- /dev/null +++ b/Modules/Platform/MirBSD-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/MirBSD-GNU) +__mirbsd_compiler_gnu(CXX) diff --git a/Modules/Platform/MirBSD-GNU-Fortran.cmake b/Modules/Platform/MirBSD-GNU-Fortran.cmake new file mode 100644 index 0000000000..52ba2cb15c --- /dev/null +++ b/Modules/Platform/MirBSD-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/MirBSD-GNU) +__mirbsd_compiler_gnu(Fortran) diff --git a/Modules/Platform/MirBSD-GNU.cmake b/Modules/Platform/MirBSD-GNU.cmake new file mode 100644 index 0000000000..9025c36de9 --- /dev/null +++ b/Modules/Platform/MirBSD-GNU.cmake @@ -0,0 +1,7 @@ +include_guard() + +include(Platform/OpenBSD-GNU) + +macro(__mirbsd_compiler_gnu lang) + __openbsd_compiler_gnu(${lang}) +endmacro() diff --git a/Modules/Platform/NetBSD-Clang-ASM.cmake b/Modules/Platform/NetBSD-Clang-ASM.cmake new file mode 100644 index 0000000000..b7c7b2db8f --- /dev/null +++ b/Modules/Platform/NetBSD-Clang-ASM.cmake @@ -0,0 +1 @@ +include(Platform/NetBSD-GNU-ASM) diff --git a/Modules/Platform/NetBSD-Clang-C.cmake b/Modules/Platform/NetBSD-Clang-C.cmake new file mode 100644 index 0000000000..86b6a01983 --- /dev/null +++ b/Modules/Platform/NetBSD-Clang-C.cmake @@ -0,0 +1 @@ +include(Platform/NetBSD-GNU-C) diff --git a/Modules/Platform/NetBSD-Clang-CXX.cmake b/Modules/Platform/NetBSD-Clang-CXX.cmake new file mode 100644 index 0000000000..b1a5d10e83 --- /dev/null +++ b/Modules/Platform/NetBSD-Clang-CXX.cmake @@ -0,0 +1 @@ +include(Platform/NetBSD-GNU-CXX) diff --git a/Modules/Platform/NetBSD-GNU-ASM.cmake b/Modules/Platform/NetBSD-GNU-ASM.cmake new file mode 100644 index 0000000000..6b7d012661 --- /dev/null +++ b/Modules/Platform/NetBSD-GNU-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/NetBSD-GNU) +__netbsd_compiler_gnu(ASM) diff --git a/Modules/Platform/NetBSD-GNU-C.cmake b/Modules/Platform/NetBSD-GNU-C.cmake new file mode 100644 index 0000000000..815644aeee --- /dev/null +++ b/Modules/Platform/NetBSD-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/NetBSD-GNU) +__netbsd_compiler_gnu(C) diff --git a/Modules/Platform/NetBSD-GNU-CXX.cmake b/Modules/Platform/NetBSD-GNU-CXX.cmake new file mode 100644 index 0000000000..55ad6b05f3 --- /dev/null +++ b/Modules/Platform/NetBSD-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/NetBSD-GNU) +__netbsd_compiler_gnu(CXX) diff --git a/Modules/Platform/NetBSD-GNU-Fortran.cmake b/Modules/Platform/NetBSD-GNU-Fortran.cmake new file mode 100644 index 0000000000..eb85ecb0dc --- /dev/null +++ b/Modules/Platform/NetBSD-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/NetBSD-GNU) +__netbsd_compiler_gnu(Fortran) diff --git a/Modules/Platform/NetBSD-GNU.cmake b/Modules/Platform/NetBSD-GNU.cmake new file mode 100644 index 0000000000..37abdeb196 --- /dev/null +++ b/Modules/Platform/NetBSD-GNU.cmake @@ -0,0 +1,16 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file LICENSE.rst or https://cmake.org/licensing for details. + +include_guard() + +macro(__netbsd_compiler_gnu lang) + # linker selection + set(CMAKE_${lang}_USING_LINKER_SYSTEM "") + set(CMAKE_${lang}_USING_LINKER_LLD "-fuse-ld=lld") + set(CMAKE_${lang}_USING_LINKER_BFD "-fuse-ld=bfd") + set(CMAKE_${lang}_USING_LINKER_GOLD "-fuse-ld=gold") + if(NOT CMAKE_${lang}_COMPILER_ID STREQUAL "GNU" + OR CMAKE_${lang}_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1") + set(CMAKE_${lang}_USING_LINKER_MOLD "-fuse-ld=mold") + endif() +endmacro() diff --git a/Modules/Platform/OpenBSD-Clang-ASM.cmake b/Modules/Platform/OpenBSD-Clang-ASM.cmake new file mode 100644 index 0000000000..500eb68a86 --- /dev/null +++ b/Modules/Platform/OpenBSD-Clang-ASM.cmake @@ -0,0 +1 @@ +include(Platform/OpenBSD-GNU-ASM) diff --git a/Modules/Platform/OpenBSD-Clang-C.cmake b/Modules/Platform/OpenBSD-Clang-C.cmake new file mode 100644 index 0000000000..86e511a1e9 --- /dev/null +++ b/Modules/Platform/OpenBSD-Clang-C.cmake @@ -0,0 +1 @@ +include(Platform/OpenBSD-GNU-C) diff --git a/Modules/Platform/OpenBSD-Clang-CXX.cmake b/Modules/Platform/OpenBSD-Clang-CXX.cmake new file mode 100644 index 0000000000..3faf012a7e --- /dev/null +++ b/Modules/Platform/OpenBSD-Clang-CXX.cmake @@ -0,0 +1 @@ +include(Platform/OpenBSD-GNU-CXX) diff --git a/Modules/Platform/OpenBSD-GNU-ASM.cmake b/Modules/Platform/OpenBSD-GNU-ASM.cmake new file mode 100644 index 0000000000..f4eed41563 --- /dev/null +++ b/Modules/Platform/OpenBSD-GNU-ASM.cmake @@ -0,0 +1,2 @@ +include(Platform/OpenBSD-GNU) +__openbsd_compiler_gnu(ASM) diff --git a/Modules/Platform/OpenBSD-GNU-C.cmake b/Modules/Platform/OpenBSD-GNU-C.cmake new file mode 100644 index 0000000000..ab94c4ce25 --- /dev/null +++ b/Modules/Platform/OpenBSD-GNU-C.cmake @@ -0,0 +1,2 @@ +include(Platform/OpenBSD-GNU) +__openbsd_compiler_gnu(C) diff --git a/Modules/Platform/OpenBSD-GNU-CXX.cmake b/Modules/Platform/OpenBSD-GNU-CXX.cmake new file mode 100644 index 0000000000..5829eb9dec --- /dev/null +++ b/Modules/Platform/OpenBSD-GNU-CXX.cmake @@ -0,0 +1,2 @@ +include(Platform/OpenBSD-GNU) +__openbsd_compiler_gnu(CXX) diff --git a/Modules/Platform/OpenBSD-GNU-Fortran.cmake b/Modules/Platform/OpenBSD-GNU-Fortran.cmake new file mode 100644 index 0000000000..57fe66ca3e --- /dev/null +++ b/Modules/Platform/OpenBSD-GNU-Fortran.cmake @@ -0,0 +1,2 @@ +include(Platform/OpenBSD-GNU) +__openbsd_compiler_gnu(Fortran) diff --git a/Modules/Platform/OpenBSD-GNU.cmake b/Modules/Platform/OpenBSD-GNU.cmake new file mode 100644 index 0000000000..be4b1b4ab7 --- /dev/null +++ b/Modules/Platform/OpenBSD-GNU.cmake @@ -0,0 +1,7 @@ +include_guard() + +include(Platform/NetBSD-GNU) + +macro(__openbsd_compiler_gnu lang) + __netbsd_compiler_gnu(${lang}) +endmacro() diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index b2eb35c151..9da42f7e4b 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -939,7 +939,7 @@ if((CMAKE_C_COMPILER_ID STREQUAL "AppleClang" endif() endif() -if (CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin|Windows)" +if (CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin|Windows|OpenBSD|FreeBSD|NetBSD|MirBSD)" AND CMAKE_C_COMPILER_ID MATCHES "^(AppleClang|Clang|GNU|MSVC|NVIDIA)$" AND NOT CMAKE_GENERATOR STREQUAL "Green Hills MULTI") add_RunCMake_test(LinkerSelection -DCMake_TEST_CUDA=${CMake_TEST_CUDA}