Skip to content

Commit 7085552

Browse files
committed
merge main into amd-staging
# Conflicts: # flang-rt/CMakeLists.txt # flang-rt/lib/CMakeLists.txt # flang-rt/lib/runtime/CMakeLists.txt # flang-rt/lib/runtime/f90deviceio.f90 # flang/test/Lower/OpenMP/target-enter-data-default-openmp52.f90 # flang/tools/f18/CMakeLists.txt # llvm/runtimes/CMakeLists.txt
2 parents 5308ae5 + 7675fc7 commit 7085552

File tree

70 files changed

+877
-479
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+877
-479
lines changed

clang/include/clang/Driver/ToolChain.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,10 @@ class ToolChain {
543543
// Returns Triple without the OSs version.
544544
llvm::Triple getTripleWithoutOSVersion() const;
545545

546+
/// Returns the target-specific path for Flang's intrinsic modules in the
547+
/// resource directory if it exists.
548+
std::optional<std::string> getDefaultIntrinsicModuleDir() const;
549+
546550
// Returns the target specific runtime path if it exists.
547551
std::optional<std::string> getRuntimePath() const;
548552

clang/include/clang/Options/Options.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6257,7 +6257,7 @@ def prebind : Flag<["-"], "prebind">;
62576257
def preload : Flag<["-"], "preload">;
62586258
def print_file_name_EQ : Joined<["-", "--"], "print-file-name=">,
62596259
HelpText<"Print the full library path of <file>">, MetaVarName<"<file>">,
6260-
Visibility<[ClangOption, CLOption]>;
6260+
Visibility<[ClangOption, FlangOption, CLOption]>;
62616261
def print_ivar_layout : Flag<["-"], "print-ivar-layout">,
62626262
Visibility<[ClangOption, CC1Option]>,
62636263
HelpText<"Enable Objective-C Ivar layout bitmap print trace">,

clang/lib/Driver/Driver.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6655,6 +6655,17 @@ std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const {
66556655
if (llvm::sys::fs::exists(Twine(P)))
66566656
return std::string(P);
66576657

6658+
// With Flang, also look for instrinsic modules
6659+
if (IsFlangMode()) {
6660+
if (std::optional<std::string> IntrPath =
6661+
TC.getDefaultIntrinsicModuleDir()) {
6662+
SmallString<128> P(*IntrPath);
6663+
llvm::sys::path::append(P, Name);
6664+
if (llvm::sys::fs::exists(Twine(P)))
6665+
return std::string(P);
6666+
}
6667+
}
6668+
66586669
SmallString<128> D(Dir);
66596670
llvm::sys::path::append(D, "..", Name);
66606671
if (llvm::sys::fs::exists(Twine(D)))

clang/lib/Driver/ToolChain.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,12 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
10201020
return {};
10211021
}
10221022

1023+
std::optional<std::string> ToolChain::getDefaultIntrinsicModuleDir() const {
1024+
SmallString<128> P(D.ResourceDir);
1025+
llvm::sys::path::append(P, "finclude", "flang");
1026+
return getTargetSubDirPath(P);
1027+
}
1028+
10231029
std::optional<std::string> ToolChain::getRuntimePath() const {
10241030
SmallString<128> P(D.ResourceDir);
10251031
llvm::sys::path::append(P, "lib");

clang/lib/Driver/ToolChains/AMDGPU.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,8 @@ void AMDGPUToolChain::addClangTargetOptions(
891891
// Default to "hidden" visibility, as object level linking will not be
892892
// supported for the foreseeable future.
893893
if (!DriverArgs.hasArg(options::OPT_fvisibility_EQ,
894-
options::OPT_fvisibility_ms_compat)) {
894+
options::OPT_fvisibility_ms_compat) &&
895+
!getDriver().IsFlangMode()) {
895896
CC1Args.push_back("-fvisibility=hidden");
896897
CC1Args.push_back("-fapply-global-visibility-to-externs");
897898
}

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,6 +1086,14 @@ void Flang::ConstructJob(Compilation &C, const JobAction &JA,
10861086
CmdArgs.push_back("-resource-dir");
10871087
CmdArgs.push_back(D.ResourceDir.c_str());
10881088

1089+
// Default intrinsic module dirs must be added after any user-provided
1090+
// -fintrinsic-modules-path to have lower precedence
1091+
if (std::optional<std::string> IntrModPath =
1092+
TC.getDefaultIntrinsicModuleDir()) {
1093+
CmdArgs.push_back("-fintrinsic-modules-path");
1094+
CmdArgs.push_back(Args.MakeArgString(*IntrModPath));
1095+
}
1096+
10891097
// Offloading related options
10901098
addOffloadOptions(C, Inputs, JA, Args, CmdArgs);
10911099

clang/lib/Driver/ToolChains/HIPAMD.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ void HIPAMDToolChain::addClangTargetOptions(
288288
// Default to "hidden" visibility, as object level linking will not be
289289
// supported for the foreseeable future.
290290
if (!DriverArgs.hasArg(options::OPT_fvisibility_EQ,
291-
options::OPT_fvisibility_ms_compat)) {
291+
options::OPT_fvisibility_ms_compat) &&
292+
!getDriver().IsFlangMode()) {
292293
CC1Args.append({"-fvisibility=hidden"});
293294
CC1Args.push_back("-fapply-global-visibility-to-externs");
294295
}

clang/lib/Driver/ToolChains/HIPSPV.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ void HIPSPVToolChain::addClangTargetOptions(
145145
// Default to "hidden" visibility, as object level linking will not be
146146
// supported for the foreseeable future.
147147
if (!DriverArgs.hasArg(options::OPT_fvisibility_EQ,
148-
options::OPT_fvisibility_ms_compat))
148+
options::OPT_fvisibility_ms_compat) &&
149+
!getDriver().IsFlangMode())
149150
CC1Args.append(
150151
{"-fvisibility=hidden", "-fapply-global-visibility-to-externs"});
151152

flang-rt/cmake/modules/GetToolchainDirs.cmake renamed to cmake/Modules/GetToolchainDirs.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ function (get_toolchain_library_subdir outvar)
4747
endfunction ()
4848

4949

50+
# Corresponds to Flang's ToolChain::getDefaultIntrinsicModuleDir().
51+
function (get_toolchain_module_subdir outvar)
52+
set(outval "finclude/flang")
53+
54+
get_toolchain_arch_dirname(arch_dirname)
55+
set(outval "${outval}/${arch_dirname}")
56+
57+
set(${outvar} "${outval}" PARENT_SCOPE)
58+
endfunction ()
59+
60+
5061
# Corresponds to Clang's ToolChain::getOSLibName(). Adapted from Compiler-RT.
5162
function (get_toolchain_os_dirname outvar)
5263
if (ANDROID)

flang-rt/CMakeLists.txt

Lines changed: 27 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -23,40 +23,6 @@ set(FLANG_RT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
2323
set(FLANG_RT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
2424
set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
2525

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

6127
list(APPEND CMAKE_MODULE_PATH
6228
"${FLANG_RT_SOURCE_DIR}/cmake/modules"
@@ -65,69 +31,22 @@ list(APPEND CMAKE_MODULE_PATH
6531
include(AddFlangRT)
6632
include(GetToolchainDirs)
6733
include(FlangCommon)
34+
include(FlangRTIntrospection)
6835
include(HandleCompilerRT)
6936
include(ExtendPath)
37+
include(CheckFortranSourceCompiles)
38+
include(CMakePushCheckState)
7039

7140

7241
############################
7342
# Build Mode Introspection #
7443
############################
7544

76-
# Determine whether we are in the runtimes/runtimes-bins directory of a
77-
# bootstrap build.
78-
set(LLVM_TREE_AVAILABLE OFF)
79-
if (LLVM_LIBRARY_OUTPUT_INTDIR AND LLVM_RUNTIME_OUTPUT_INTDIR AND PACKAGE_VERSION)
80-
set(LLVM_TREE_AVAILABLE ON)
81-
endif()
82-
8345
# Path to LLVM development tools (FileCheck, llvm-lit, not, ...)
8446
set(LLVM_TOOLS_DIR "${LLVM_BINARY_DIR}/bin")
8547

86-
# Determine build and install paths.
87-
# The build path is absolute, but the install dir is relative, CMake's install
88-
# command has to apply CMAKE_INSTALL_PREFIX itself.
89-
get_toolchain_library_subdir(toolchain_lib_subdir)
90-
if (LLVM_TREE_AVAILABLE)
91-
# In a bootstrap build emit the libraries into a default search path in the
92-
# build directory of the just-built compiler. This allows using the
93-
# just-built compiler without specifying paths to runtime libraries.
94-
#
95-
# Despite Clang in the name, get_clang_resource_dir does not depend on Clang
96-
# being added to the build. Flang uses the same resource dir as clang.
97-
include(GetClangResourceDir)
98-
get_clang_resource_dir(FLANG_RT_OUTPUT_RESOURCE_DIR PREFIX "${LLVM_LIBRARY_OUTPUT_INTDIR}/..")
99-
get_clang_resource_dir(FLANG_RT_INSTALL_RESOURCE_PATH_DEFAULT)
100-
101-
extend_path(FLANG_RT_OUTPUT_RESOURCE_LIB_DIR "${FLANG_RT_OUTPUT_RESOURCE_DIR}" "${toolchain_lib_subdir}")
102-
else ()
103-
# In a standalone runtimes build, do not write into LLVM_BINARY_DIR. It may be
104-
# read-only and/or shared by multiple runtimes with different build
105-
# configurations (e.g. Debug/Release). Use the runtime's own lib dir like any
106-
# non-toolchain library.
107-
# For the install prefix, still use the resource dir assuming that Flang will
108-
# be installed there using the same prefix. This is to not have a difference
109-
# between bootstrap and standalone runtimes builds.
110-
set(FLANG_RT_OUTPUT_RESOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
111-
set(FLANG_RT_INSTALL_RESOURCE_PATH_DEFAULT "lib${LLVM_LIBDIR_SUFFIX}/clang/${LLVM_VERSION_MAJOR}")
112-
113-
extend_path(FLANG_RT_OUTPUT_RESOURCE_LIB_DIR "${FLANG_RT_OUTPUT_RESOURCE_DIR}" "lib${LLVM_LIBDIR_SUFFIX}")
114-
endif ()
115-
set(FLANG_RT_INSTALL_RESOURCE_PATH "${FLANG_RT_INSTALL_RESOURCE_PATH_DEFAULT}"
116-
CACHE PATH "Path to install runtime libraries to (default: clang resource dir)")
117-
extend_path(FLANG_RT_INSTALL_RESOURCE_LIB_PATH "${FLANG_RT_INSTALL_RESOURCE_PATH}" "${toolchain_lib_subdir}")
118-
cmake_path(NORMAL_PATH FLANG_RT_OUTPUT_RESOURCE_DIR)
119-
cmake_path(NORMAL_PATH FLANG_RT_INSTALL_RESOURCE_PATH)
120-
# FIXME: For the libflang_rt.so, the toolchain resource lib dir is not a good
121-
# destination because it is not a ld.so default search path.
122-
# The machine where the executable is eventually executed may not be the
123-
# machine where the Flang compiler and its resource dir is installed, so
124-
# setting RPath by the driver is not an solution. It should belong into
125-
# /usr/lib/<triple>/libflang_rt.so, like e.g. libgcc_s.so.
126-
# But the linker as invoked by the Flang driver also requires
127-
# libflang_rt.so to be found when linking and the resource lib dir is
128-
# the only reliable location.
129-
cmake_path(NORMAL_PATH FLANG_RT_OUTPUT_RESOURCE_LIB_DIR)
130-
cmake_path(NORMAL_PATH FLANG_RT_INSTALL_RESOURCE_LIB_PATH)
48+
# Fortran compiler not optional for building Flang-RT
49+
enable_language(Fortran)
13150

13251

13352
#################
@@ -137,8 +56,6 @@ cmake_path(NORMAL_PATH FLANG_RT_INSTALL_RESOURCE_LIB_PATH)
13756
# Important: flang-rt user options must be prefixed with "FLANG_RT_". Variables
13857
# with this prefix will be forwarded in bootstrap builds.
13958

140-
option(FLANG_RT_INCLUDE_TESTS "Generate build targets for the flang-rt unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
141-
14259
# Provide an interface to link against the LLVM libc/libc++ projects directly.
14360
set(FLANG_RT_SUPPORTED_PROVIDERS system llvm)
14461
set(FLANG_RT_LIBC_PROVIDER "system" CACHE STRING "Specify C library to use. Supported values are ${FLANG_RT_SUPPORTED_PROVIDERS}.")
@@ -151,7 +68,14 @@ if (NOT "${FLANG_RT_LIBCXX_PROVIDER}" IN_LIST FLANG_RT_SUPPORTED_PROVIDERS)
15168
message(FATAL_ERROR "Unsupported library: '${FLANG_RT_LIBCXX_PROVIDER}'. Supported values are ${FLANG_RT_SUPPORTED_PROVIDERS}.")
15269
endif ()
15370

154-
option(FLANG_RT_ENABLE_STATIC "Build Flang-RT as a static library." ON)
71+
if (LLVM_RUNTIMES_TARGET MATCHES "^amdgcn|^nvptx")
72+
# Compiling libraries for offload targets is currently experimental;
73+
# Only build the builtin modules by default.
74+
set(FLANG_RT_ENABLE_STATIC_default OFF)
75+
else ()
76+
set(FLANG_RT_ENABLE_STATIC_default ON)
77+
endif ()
78+
option(FLANG_RT_ENABLE_STATIC "Build Flang-RT as a static library." "${FLANG_RT_ENABLE_STATIC_default}")
15579
if (WIN32)
15680
# Windows DLL currently not implemented.
15781
set(FLANG_RT_ENABLE_SHARED OFF)
@@ -164,11 +88,14 @@ else ()
16488
# breaking change unless the driver is changed.
16589
option(FLANG_RT_ENABLE_SHARED "Build Flang-RT as a shared library." OFF)
16690
endif ()
167-
if (NOT FLANG_RT_ENABLE_STATIC AND NOT FLANG_RT_ENABLE_SHARED)
168-
message(FATAL_ERROR "
169-
Must build at least one type of library
170-
(FLANG_RT_ENABLE_STATIC=ON, FLANG_RT_ENABLE_SHARED=ON, or both)
171-
")
91+
92+
93+
if (FLANG_RT_ENABLE_STATIC OR FLANG_RT_ENABLE_SHARED)
94+
option(FLANG_RT_INCLUDE_TESTS "Generate build targets for the flang-rt unit and regression-tests." "${LLVM_INCLUDE_TESTS}")
95+
else ()
96+
# Tests require at least one of the libraries
97+
message(STATUS "Flang-RT testing disabled without either FLANG_RT_ENABLE_STATIC OR FLANG_RT_ENABLE_SHARED")
98+
set(FLANG_RT_INCLUDE_TESTS OFF)
17299
endif ()
173100

174101

@@ -186,7 +113,7 @@ elseif (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "CUDA")
186113
option(FLANG_RT_CUDA_RUNTIME_PTX_WITHOUT_GLOBAL_VARS "Do not compile global variables' definitions when producing PTX library" OFF)
187114
elseif (FLANG_RT_EXPERIMENTAL_OFFLOAD_SUPPORT STREQUAL "OpenMP")
188115
# Support for OpenMP offloading
189-
set(FLANG_RT_DEVICE_ARCHITECTURES "all" CACHE STRING
116+
set(FLANG_RT_DEVICE_ARCHITECTURES "${RUNTIMES_DEVICE_ARCHITECTURES}" CACHE STRING
190117
"List of OpenMP device architectures to be used to compile the Fortran runtime (e.g. 'gfx1103;sm_90')"
191118
)
192119

@@ -235,6 +162,10 @@ check_cxx_source_compiles(
235162
"
236163
HAVE_DECL_STRERROR_S)
237164

165+
# Look for support of REAL(16), if not already defined via command
166+
# line via -DFORTRAN_SUPPORTS_REAL16=YES/NO
167+
check_fortran_quadmath_support()
168+
238169
# Search for clang_rt.builtins library. Need in addition to msvcrt.
239170
if (WIN32)
240171
find_compiler_rt_library(builtins FLANG_RT_BUILTINS_LIBRARY)
@@ -332,6 +263,7 @@ else ()
332263
add_custom_target(check-flang-rt)
333264
endif()
334265

266+
335267
###################
336268
# Install headers #
337269
###################

0 commit comments

Comments
 (0)