Skip to content

Commit a3f3a7b

Browse files
committed
Support for CMake 3.20-3.23
1 parent c829f91 commit a3f3a7b

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

flang-rt/CMakeLists.txt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,42 @@ set(FLANGRT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
1616
set(FLANGRT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
1717
set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
1818

19+
20+
# CMake 3.24 is the first version of CMake that directly recognizes Flang.
21+
# LLVM's requirement is only CMake 3.20, teach CMake 3.20-3.23 how to use Flang.
22+
if (CMAKE_VERSION VERSION_LESS "3.24")
23+
cmake_path(GET CMAKE_Fortran_COMPILER STEM _Fortran_COMPILER_STEM)
24+
if (_Fortran_COMPILER_STEM STREQUAL "flang-new" OR _Fortran_COMPILER_STEM STREQUAL "flang")
25+
include(CMakeForceCompiler)
26+
CMAKE_FORCE_Fortran_COMPILER("${CMAKE_Fortran_COMPILER}" "LLVMFlang")
27+
28+
set(CMAKE_Fortran_COMPILER_ID "LLVMFlang")
29+
set(CMAKE_Fortran_COMPILER_VERSION "20.0")
30+
31+
set(CMAKE_Fortran_SUBMODULE_SEP "-")
32+
set(CMAKE_Fortran_SUBMODULE_EXT ".mod")
33+
34+
set(CMAKE_Fortran_PREPROCESS_SOURCE
35+
"<CMAKE_Fortran_COMPILER> -cpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
36+
37+
set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form")
38+
set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form")
39+
40+
set(CMAKE_Fortran_MODDIR_FLAG "-module-dir")
41+
42+
set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "-cpp")
43+
set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "-nocpp")
44+
set(CMAKE_Fortran_POSTPROCESS_FLAG "-ffixed-line-length-72")
45+
46+
set(CMAKE_Fortran_COMPILE_OPTIONS_TARGET "--target=")
47+
48+
set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Wl,")
49+
set(CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP ",")
50+
endif ()
51+
endif ()
1952
enable_language(Fortran)
2053

54+
2155
list(APPEND CMAKE_MODULE_PATH
2256
"${FLANGRT_SOURCE_DIR}/cmake/modules"
2357
"${FLANG_SOURCE_DIR}/cmake/modules"
@@ -67,6 +101,7 @@ endif ()
67101

68102
option(FLANG_RT_INCLUDE_TESTS "Generate build targets for the flang-rt unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
69103

104+
70105
set(FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT "" CACHE STRING "Compile flang-rt with GPU support (CUDA or OpenMP)")
71106
set_property(CACHE FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT PROPERTY STRINGS
72107
""
@@ -84,6 +119,7 @@ else ()
84119
message(FATAL_ERROR "Invalid value '${FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT}' for FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT; must be empty, 'CUDA', or 'OpenMP'")
85120
endif ()
86121

122+
87123
option(FLANG_RT_ENABLE_CUF "Compile CUDA Fortran runtime sources" OFF)
88124
if (FLANG_RT_ENABLE_CUF)
89125
find_package(CUDAToolkit REQUIRED)
@@ -124,6 +160,13 @@ if (WIN32)
124160
endif ()
125161

126162

163+
# Check whether the compiler can undefine a macro using the "-U" flag.
164+
# Aternatively, we could use
165+
# CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU"
166+
# but some older versions of CMake don't define it for GCC itself.
167+
check_cxx_compiler_flag("-UTESTFLAG" FLANG_RT_SUPPORTS_UNDEFINE_FLAG)
168+
169+
127170
#####################
128171
# Build Preparation #
129172
#####################

flang-rt/cmake/modules/AddFlangRT.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ function (add_flangrt_library name)
8888

8989
# Disable libstdc++/libc++ assertions, even in an LLVM_ENABLE_ASSERTIONS
9090
# build, to avoid an unwanted dependency on libstdc++/libc++.so.
91-
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
91+
if (FLANG_RT_SUPPORTS_UNDEFINE_FLAG)
9292
target_compile_options(${name} PUBLIC -U_GLIBCXX_ASSERTIONS)
9393
target_compile_options(${name} PUBLIC -U_LIBCPP_ENABLE_ASSERTIONS)
9494
endif ()

0 commit comments

Comments
 (0)