mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 04:26:37 +00:00

Mostly mechanical changes in preparation of extracting the Flang-RT "subproject" in #110217. This PR intends to only move pre-existing files to the new folder structure, with no behavioral change. Common files (headers, testing, cmake) shared by Flang-RT and Flang remain in `flang/`. Some cosmetic changes and files paths were necessary: * Relative paths to the new path for the source files and `add_subdirectory`. * Add the new location's include directory to `include_directories` * The unittest/Evaluate directory has unitests for flang-rt and Flang. A new `CMakeLists.txt` was introduced for the flang-rt tests. * Change the `#include` paths relative to the include directive * clang-format on the `#include` directives * Since the paths are part if the copyright header and include guards, a script was used to canonicalize those * `test/Runtime` and runtime tests in `test/Driver` are moved, but the lit.cfg.py mechanism to execute the will only be added in #110217.
135 lines
3.5 KiB
CMake
135 lines
3.5 KiB
CMake
#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===#
|
|
#
|
|
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
# See https://llvm.org/LICENSE.txt for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#
|
|
#===------------------------------------------------------------------------===#
|
|
|
|
# FortranFloat128 implements IEEE-754 128-bit float math functions.
|
|
# It is a thin wapper and it currently relies on third-party
|
|
# libraries available for the target.
|
|
# It is distributed as a static library only.
|
|
# Fortran programs/libraries that end up linking any of the provided
|
|
# will have a dependency on the third-party library that is being
|
|
# used for building this flang_rt.quadmath library.
|
|
|
|
include(CheckLibraryExists)
|
|
|
|
set(sources
|
|
acos.cpp
|
|
acosh.cpp
|
|
asin.cpp
|
|
asinh.cpp
|
|
atan.cpp
|
|
atan2.cpp
|
|
atanh.cpp
|
|
ceil.cpp
|
|
complex-math.c
|
|
cos.cpp
|
|
cosh.cpp
|
|
erf.cpp
|
|
erfc.cpp
|
|
exp.cpp
|
|
exponent.cpp
|
|
floor.cpp
|
|
fma.cpp
|
|
fraction.cpp
|
|
hypot.cpp
|
|
j0.cpp
|
|
j1.cpp
|
|
jn.cpp
|
|
lgamma.cpp
|
|
llround.cpp
|
|
log.cpp
|
|
log10.cpp
|
|
lround.cpp
|
|
mod-real.cpp
|
|
modulo-real.cpp
|
|
nearest.cpp
|
|
nearbyint.cpp
|
|
norm2.cpp
|
|
pow.cpp
|
|
random.cpp
|
|
remainder.cpp
|
|
round.cpp
|
|
rrspacing.cpp
|
|
scale.cpp
|
|
set-exponent.cpp
|
|
sin.cpp
|
|
sinh.cpp
|
|
spacing.cpp
|
|
sqrt.cpp
|
|
tan.cpp
|
|
tanh.cpp
|
|
tgamma.cpp
|
|
trunc.cpp
|
|
y0.cpp
|
|
y1.cpp
|
|
yn.cpp
|
|
)
|
|
runtime_source_files(sources SUBDIR "quadmath")
|
|
|
|
include_directories(AFTER "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
|
add_library(FortranFloat128MathILib INTERFACE)
|
|
target_include_directories(FortranFloat128MathILib INTERFACE
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
|
|
)
|
|
|
|
if (FLANG_RUNTIME_F128_MATH_LIB)
|
|
if (${FLANG_RUNTIME_F128_MATH_LIB} STREQUAL "libquadmath")
|
|
check_include_file(quadmath.h FOUND_QUADMATH_HEADER)
|
|
if(FOUND_QUADMATH_HEADER)
|
|
add_compile_definitions(HAS_QUADMATHLIB)
|
|
else()
|
|
message(FATAL_ERROR
|
|
"FLANG_RUNTIME_F128_MATH_LIB setting requires quadmath.h "
|
|
"to be available: ${FLANG_RUNTIME_F128_MATH_LIB}"
|
|
)
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR
|
|
"Unsupported third-party library for Fortran F128 math runtime: "
|
|
"${FLANG_RUNTIME_F128_MATH_LIB}"
|
|
)
|
|
endif()
|
|
|
|
add_flang_library(flang_rt.quadmath STATIC INSTALL_WITH_TOOLCHAIN
|
|
${sources})
|
|
|
|
if (DEFINED MSVC)
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
|
|
add_flang_library(flang_rt.quadmath.static STATIC INSTALL_WITH_TOOLCHAIN
|
|
${sources}
|
|
)
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
|
|
add_flang_library(flang_rt.quadmath.static_dbg STATIC INSTALL_WITH_TOOLCHAIN
|
|
${sources}
|
|
)
|
|
add_dependencies(flang_rt.quadmath flang_rt.quadmath.static
|
|
flang_rt.quadmath.static_dbg
|
|
)
|
|
endif()
|
|
elseif (HAVE_LDBL_MANT_DIG_113)
|
|
# We can use 'long double' versions from libc.
|
|
check_library_exists(m sinl "" FOUND_LIBM)
|
|
if (FOUND_LIBM)
|
|
target_compile_definitions(FortranFloat128MathILib INTERFACE
|
|
HAS_LIBM
|
|
)
|
|
target_sources(FortranFloat128MathILib INTERFACE ${sources})
|
|
else()
|
|
message(FATAL_ERROR "flang_rt.quadmath cannot build without libm")
|
|
endif()
|
|
else()
|
|
# We can use '__float128' version from libc, if it has them.
|
|
check_library_exists(m sinf128 "" FOUND_LIBMF128)
|
|
if (FOUND_LIBMF128)
|
|
target_compile_definitions(FortranFloat128MathILib INTERFACE
|
|
HAS_LIBMF128
|
|
)
|
|
# Enable this, when math-entries.h and complex-math.h is ready.
|
|
# target_sources(FortranFloat128MathILib INTERFACE ${sources})
|
|
endif()
|
|
endif()
|