pscoro updated this revision to Diff 538749.
pscoro added a comment.
Comment out some code that irrelevant to current object library approach
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154869/new/
https://reviews.llvm.org/D154869
Files:
clang/lib/Driver/ToolChains/CommonArgs.cpp
flang-rt/CMakeLists.txt
flang-rt/src/dummy.cpp
flang/cmake/modules/AddFlang.cmake
flang/include/flang/Runtime/float128.h
flang/lib/Decimal/CMakeLists.txt
flang/runtime/CMakeLists.txt
flang/test/CMakeLists.txt
flang/test/Driver/linker-flags.f90
flang/test/lit.cfg.py
lld/COFF/MinGW.cpp
llvm/CMakeLists.txt
runtimes/CMakeLists.txt
Index: runtimes/CMakeLists.txt
===================================================================
--- runtimes/CMakeLists.txt
+++ runtimes/CMakeLists.txt
@@ -19,7 +19,7 @@
# We order libraries to mirror roughly how they are layered, except that compiler-rt can depend
# on libc++, so we put it after.
-set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp")
+set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;flang-rt")
set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
Index: llvm/CMakeLists.txt
===================================================================
--- llvm/CMakeLists.txt
+++ llvm/CMakeLists.txt
@@ -149,7 +149,10 @@
# As we migrate runtimes to using the bootstrapping build, the set of default runtimes
# should grow as we remove those runtimes from LLVM_ENABLE_PROJECTS above.
set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind")
-set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc")
+if ("flang" IN_LIST LLVM_ENABLE_PROJECTS)
+ set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind;flang-rt")
+endif()
+set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;flang-rt")
set(LLVM_ENABLE_RUNTIMES "" CACHE STRING
"Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.")
if(LLVM_ENABLE_RUNTIMES STREQUAL "all")
Index: lld/COFF/MinGW.cpp
===================================================================
--- lld/COFF/MinGW.cpp
+++ lld/COFF/MinGW.cpp
@@ -50,8 +50,7 @@
"libc++",
"libc++abi",
"libFortran_main",
- "libFortranRuntime",
- "libFortranDecimal",
+ "libFlangRT",
"libunwind",
"libmsvcrt",
"libucrtbase",
Index: flang/test/lit.cfg.py
===================================================================
--- flang/test/lit.cfg.py
+++ flang/test/lit.cfg.py
@@ -153,19 +153,16 @@
# the C++ runtime libraries. For this we need a C compiler. If for some reason
# we don't have one, we can just disable the test.
if config.cc:
- libruntime = os.path.join(config.flang_lib_dir, "libFortranRuntime.a")
- libdecimal = os.path.join(config.flang_lib_dir, "libFortranDecimal.a")
+ libruntime = os.path.join(config.flang_lib_dir, "libFlangRT.a")
include = os.path.join(config.flang_src_dir, "include")
if (
os.path.isfile(libruntime)
- and os.path.isfile(libdecimal)
and os.path.isdir(include)
):
config.available_features.add("c-compiler")
tools.append(ToolSubst("%cc", command=config.cc, unresolved="fatal"))
tools.append(ToolSubst("%libruntime", command=libruntime, unresolved="fatal"))
- tools.append(ToolSubst("%libdecimal", command=libdecimal, unresolved="fatal"))
tools.append(ToolSubst("%include", command=include, unresolved="fatal"))
# Add all the tools and their substitutions (if applicable). Use the search paths provided for
Index: flang/test/Driver/linker-flags.f90
===================================================================
--- flang/test/Driver/linker-flags.f90
+++ flang/test/Driver/linker-flags.f90
@@ -24,21 +24,18 @@
! GNU-LABEL: "{{.*}}ld{{(\.exe)?}}"
! GNU-SAME: "[[object_file]]"
! GNU-SAME: -lFortran_main
-! GNU-SAME: -lFortranRuntime
-! GNU-SAME: -lFortranDecimal
+! GNU-SAME: -lFlangRT
! GNU-SAME: -lm
! DARWIN-LABEL: "{{.*}}ld{{(\.exe)?}}"
! DARWIN-SAME: "[[object_file]]"
! DARWIN-SAME: -lFortran_main
-! DARWIN-SAME: -lFortranRuntime
-! DARWIN-SAME: -lFortranDecimal
+! DARWIN-SAME: -lFlangRT
! MINGW-LABEL: "{{.*}}ld{{(\.exe)?}}"
! MINGW-SAME: "[[object_file]]"
! MINGW-SAME: -lFortran_main
-! MINGW-SAME: -lFortranRuntime
-! MINGW-SAME: -lFortranDecimal
+! MINGW-SAME: -lFlangRT
! NOTE: This also matches lld-link (when CLANG_DEFAULT_LINKER=lld) and
! any .exe suffix that is added when resolving to the full path of
@@ -46,7 +43,6 @@
! when the executable is not found or on non-Windows platforms.
! MSVC-LABEL: link
! MSVC-SAME: Fortran_main.lib
-! MSVC-SAME: FortranRuntime.lib
-! MSVC-SAME: FortranDecimal.lib
+! MSVC-SAME: FlangRT.lib
! MSVC-SAME: /subsystem:console
! MSVC-SAME: "[[object_file]]"
Index: flang/test/CMakeLists.txt
===================================================================
--- flang/test/CMakeLists.txt
+++ flang/test/CMakeLists.txt
@@ -63,7 +63,7 @@
split-file
FortranRuntime
Fortran_main
- FortranDecimal
+ FortranDecimalRT
)
if (LLVM_ENABLE_PLUGINS AND NOT WIN32)
list(APPEND FLANG_TEST_DEPENDS Bye)
Index: flang/runtime/CMakeLists.txt
===================================================================
--- flang/runtime/CMakeLists.txt
+++ flang/runtime/CMakeLists.txt
@@ -5,8 +5,9 @@
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
#===------------------------------------------------------------------------===#
+set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR FLANG_RT_STANDALONE_BUILD)
cmake_minimum_required(VERSION 3.20.0)
project(FlangRuntime C CXX)
@@ -15,7 +16,6 @@
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_EXTENSIONS OFF)
- set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
set(LLVM_COMMON_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../cmake")
set(LLVM_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../llvm/cmake")
@@ -44,9 +44,9 @@
else ()
add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
endif ()
- include_directories(BEFORE
- ${FLANG_SOURCE_DIR}/include)
endif()
+include_directories(BEFORE
+ ${FLANG_SOURCE_DIR}/include)
include(CheckCXXSymbolExists)
include(CheckCXXSourceCompiles)
@@ -246,10 +246,14 @@
add_compile_definitions(OMP_OFFLOAD_BUILD)
endif()
-add_flang_library(FortranRuntime
- ${sources}
- LINK_LIBS
- FortranDecimal
+add_compile_options(-fPIC)
- INSTALL_WITH_TOOLCHAIN
-)
+if ("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES)
+ add_flang_library(FortranRuntime STATIC
+ ${sources}
+ LINK_LIBS
+ FortranDecimalRT
+
+ INSTALL_WITH_TOOLCHAIN
+ )
+endif()
Index: flang/lib/Decimal/CMakeLists.txt
===================================================================
--- flang/lib/Decimal/CMakeLists.txt
+++ flang/lib/Decimal/CMakeLists.txt
@@ -1,14 +1,14 @@
-if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR FLANG_RT_STANDALONE_BUILD)
cmake_minimum_required(VERSION 3.20.0)
project(FortranDecimal C CXX)
+ project(FortranDecimalRT C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_EXTENSIONS OFF)
- set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../..")
-
set(LLVM_COMMON_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../cmake")
set(LLVM_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../llvm/cmake")
set(CLANG_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../clang/cmake")
@@ -36,9 +36,9 @@
else ()
add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
endif ()
- include_directories(BEFORE
- ${FLANG_SOURCE_DIR}/include)
endif()
+include_directories(BEFORE
+ ${FLANG_SOURCE_DIR}/include)
check_cxx_compiler_flag(-fno-lto FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
if (FLANG_RUNTIME_HAS_FNO_LTO_FLAG)
@@ -49,7 +49,18 @@
# avoid an unwanted dependency on libstdc++.so.
add_definitions(-U_GLIBCXX_ASSERTIONS)
-add_flang_library(FortranDecimal INSTALL_WITH_TOOLCHAIN
- binary-to-decimal.cpp
- decimal-to-binary.cpp
-)
+add_compile_options(-fPIC)
+
+if (NOT FLANG_RT_STANDALONE_BUILD)
+ add_flang_library(FortranDecimal
+ binary-to-decimal.cpp
+ decimal-to-binary.cpp
+ )
+endif()
+
+if ("flang-rt" IN_LIST LLVM_ENABLE_RUNTIMES OR FLANG_RT_STANDALONE_BUILD)
+ add_flang_library(FortranDecimalRT STATIC INSTALL_WITH_TOOLCHAIN
+ binary-to-decimal.cpp
+ decimal-to-binary.cpp
+ )
+endif()
Index: flang/include/flang/Runtime/float128.h
===================================================================
--- flang/include/flang/Runtime/float128.h
+++ flang/include/flang/Runtime/float128.h
@@ -39,13 +39,13 @@
* since earlier versions may define the macros above, but
* still do not support __float128 fully.
*/
-#if __x86_64__
-#if __GNUC__ >= 7 || __clang_major__ >= 7
-#define HAS_FLOAT128 1
-#endif
-#elif defined __PPC__ && __GNUC__ >= 8
-#define HAS_FLOAT128 1
-#endif
+//#if __x86_64__
+//#if __GNUC__ >= 7 || __clang_major__ >= 7
+//#define HAS_FLOAT128 1
+//#endif
+//#elif defined __PPC__ && __GNUC__ >= 8
+//#define HAS_FLOAT128 1
+//#endif
#endif /* (defined(__FLOAT128__) || defined(__SIZEOF_FLOAT128__)) && \
!defined(_LIBCPP_VERSION) && !defined(__CUDA_ARCH__) */
Index: flang/cmake/modules/AddFlang.cmake
===================================================================
--- flang/cmake/modules/AddFlang.cmake
+++ flang/cmake/modules/AddFlang.cmake
@@ -65,6 +65,7 @@
endif()
llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
+ set_target_properties(${name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
clang_target_link_libraries(${name} PRIVATE ${ARG_CLANG_LIBS})
Index: flang-rt/src/dummy.cpp
===================================================================
--- /dev/null
+++ flang-rt/src/dummy.cpp
@@ -0,0 +1,6 @@
+// TODO: If the object library approach is followed through. This entire src/
+// directory should be deleted. This dummy source file was needed to make
+// CMake add a new library for FlangRT with the prvious approach that used
+// target_link_libraries to link FortranRuntime and FortranDecimalRT instead.
+//
+// This file is intentionally left blank.
Index: flang-rt/CMakeLists.txt
===================================================================
--- /dev/null
+++ flang-rt/CMakeLists.txt
@@ -0,0 +1,124 @@
+# CMake build for the Flang runtime libraries
+# The source for the flang runtime libraries (FortranDecimalRT, FortranRuntime)
+# exist in the flang top-level directory.
+# Flang-rt is only scaffolding and does not provide any additional source files.
+
+cmake_minimum_required(VERSION 3.20.0)
+
+#===============================================================================
+# Configure CMake
+#===============================================================================
+set(LLVM_COMMON_CMAKE_UTILS "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
+include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
+ NO_POLICY_SCOPE)
+
+set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
+
+# Check if flang-rt is built as a standalone project.
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR FLANG_RT_STANDALONE_BUILD)
+ project(FlangRT C CXX)
+ set(CMAKE_INCLUDE_CURRENT_DIR ON)
+ set(FLANG_RT_STANDALONE_BUILD TRUE)
+ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+endif()
+
+set(FLANG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../flang")
+set(LLVM_COMMON_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../cmake")
+set(LLVM_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../llvm/cmake")
+set(CLANG_CMAKE_UTILS "${FLANG_SOURCE_DIR}/../clang/cmake")
+
+# Add path for custom modules
+list(INSERT CMAKE_MODULE_PATH 0
+ "${FLANG_SOURCE_DIR}/cmake"
+ "${FLANG_SOURCE_DIR}/cmake/modules"
+ "${LLVM_COMMON_CMAKE_UTILS}"
+ "${LLVM_COMMON_CMAKE_UTILS}/Modules"
+ "${LLVM_CMAKE_UTILS}"
+ "${LLVM_CMAKE_UTILS}/modules"
+ "${CLANG_CMAKE_UTILS}/modules"
+)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+
+include(AddClang)
+include(AddLLVM)
+include(AddFlang)
+include(HandleLLVMOptions)
+include(TestBigEndian)
+test_big_endian(IS_BIGENDIAN)
+if (IS_BIGENDIAN)
+ add_compile_definitions(FLANG_BIG_ENDIAN=1)
+else ()
+ add_compile_definitions(FLANG_LITTLE_ENDIAN=1)
+endif ()
+
+#===============================================================================
+# Setup CMake Options
+#===============================================================================
+option(FLANG_RT_ENABLE_SHARED "Build flang-rt as a shared library." OFF)
+option(FLANG_RT_ENABLE_STATIC "Build flang-rt as a static library." OFF)
+
+# TODO: Remove this section if using object libraries as its no longer needed.
+#===============================================================================
+# Find Flang Libraries
+#===============================================================================
+#set(FORTRAN_DECIMAL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../flang/lib/Decimal")
+#set(FORTRAN_RUNTIME_SRC "${CMAKE_CURRENT_SOURCE_DIR}/../flang/runtime")
+#
+#find_library(FORTRAN_DECIMAL FortranDecimalRT PATHS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+#find_library(FORTRAN_RUNTIME FortranRuntime PATHS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
+#
+#if (FORTRAN_DECIMAL)
+# list(APPEND FLANG_RT_LIBS ${FORTRAN_DECIMAL})
+#else()
+# add_subdirectory(${FORTRAN_DECIMAL_SRC} FortranDecimalRT)
+# list(APPEND FLANG_RT_LIBS FortranDecimalRT)
+#endif()
+#if (FORTRAN_RUNTIME)
+# list(APPEND FLANG_RT_LIBS ${FORTRAN_RUNTIME})
+#else()
+# add_subdirectory(${FORTRAN_RUNTIME_SRC} FortranRuntime)
+# list(APPEND FLANG_RT_LIBS FortranRuntime)
+#endif()
+
+#===============================================================================
+# Create Flang-rt wrapper library
+#===============================================================================
+# TODO: Removed commented code (previous implementation w/o object libraries)
+# Build as shared by default if no linkage type option set.
+if (NOT FLANG_RT_ENABLE_SHARED AND NOT FLANG_RT_ENABLE_STATIC)
+# add_library(FlangRT SHARED src/dummy.cpp)
+ add_library(FlangRT SHARED $<TARGET_OBJECTS:obj.FortranDecimalRT>
+ $<TARGET_OBJECTS:obj.FortranRuntime>)
+endif()
+if (FLANG_RT_ENABLE_SHARED)
+# add_library(FlangRT SHARED src/dummy.cpp)
+ add_library(FlangRT SHARED $<TARGET_OBJECTS:obj.FortranDecimalRT>
+ $<TARGET_OBJECTS:obj.FortranRuntime>)
+endif()
+if (FLANG_RT_ENABLE_STATIC AND NOT FLANG_RT_ENABLE_SHARED)
+# add_library(FlangRT STATIC src/dummy.cpp)
+ add_library(FlangRT STATIC $<TARGET_OBJECTS:obj.FortranDecimalRT>
+ $<TARGET_OBJECTS:obj.FortranRuntime>)
+endif()
+# When building both static and shared, we need to append _static to the name
+# to avoid naming conflicts.
+if (FLANG_RT_ENABLE_STATIC AND FLANG_RT_ENABLE_SHARED)
+# add_library(FlangRT_static STATIC src/dummy.cpp)
+ add_library(FlangRT_static STATIC $<TARGET_OBJECTS:obj.FortranDecimalRT>
+ $<TARGET_OBJECTS:obj.FortranRuntime>)
+endif()
+
+# TODO: Remove all this if we are using object libraries
+#===============================================================================
+# Link Flang Libraries
+#===============================================================================
+#target_link_libraries(FlangRT PUBLIC ${FLANG_RT_LIBS})
+#if (FLANG_RT_ENABLE_STATIC AND FLANG_RT_ENABLE_SHARED)
+# target_link_libraries(FlangRT_static PUBLIC ${FLANG_RT_LIBS})
+#endif()
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -921,12 +921,10 @@
llvm::opt::ArgStringList &CmdArgs) {
if (TC.getTriple().isKnownWindowsMSVCEnvironment()) {
CmdArgs.push_back("Fortran_main.lib");
- CmdArgs.push_back("FortranRuntime.lib");
- CmdArgs.push_back("FortranDecimal.lib");
+ CmdArgs.push_back("FlangRT.lib");
} else {
CmdArgs.push_back("-lFortran_main");
- CmdArgs.push_back("-lFortranRuntime");
- CmdArgs.push_back("-lFortranDecimal");
+ CmdArgs.push_back("-lFlangRT");
}
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits