1a468d02fSSlava Zakharin#===-- runtime/Float128Math/CMakeLists.txt ---------------------------------===# 2a468d02fSSlava Zakharin# 3a468d02fSSlava Zakharin# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4a468d02fSSlava Zakharin# See https://llvm.org/LICENSE.txt for license information. 5a468d02fSSlava Zakharin# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6a468d02fSSlava Zakharin# 7a468d02fSSlava Zakharin#===------------------------------------------------------------------------===# 8a468d02fSSlava Zakharin 9a468d02fSSlava Zakharin# FortranFloat128 implements IEEE-754 128-bit float math functions. 10a468d02fSSlava Zakharin# It is a thin wapper and it currently relies on third-party 11a468d02fSSlava Zakharin# libraries available for the target. 12a468d02fSSlava Zakharin# It is distributed as a static library only. 13a468d02fSSlava Zakharin# Fortran programs/libraries that end up linking any of the provided 14a468d02fSSlava Zakharin# will have a dependency on the third-party library that is being 15a468d02fSSlava Zakharin# used for building this FortranFloat128Math library. 16a468d02fSSlava Zakharin 179d9c0124SSlava Zakharininclude(CheckLibraryExists) 189d9c0124SSlava Zakharin 19a468d02fSSlava Zakharinset(sources 20e4604c35SSlava Zakharin acos.cpp 21e4604c35SSlava Zakharin acosh.cpp 22e4604c35SSlava Zakharin asin.cpp 23e4604c35SSlava Zakharin asinh.cpp 24e4604c35SSlava Zakharin atan.cpp 25e4604c35SSlava Zakharin atan2.cpp 26e4604c35SSlava Zakharin atanh.cpp 27e4604c35SSlava Zakharin ceil.cpp 2850d848d0SSlava Zakharin complex-math.c 29e4604c35SSlava Zakharin cos.cpp 30e4604c35SSlava Zakharin cosh.cpp 31e4604c35SSlava Zakharin erf.cpp 32e4604c35SSlava Zakharin erfc.cpp 33e4604c35SSlava Zakharin exp.cpp 340699749cSSlava Zakharin exponent.cpp 35e4604c35SSlava Zakharin floor.cpp 36d24ff9aeSSlava Zakharin fma.cpp 370699749cSSlava Zakharin fraction.cpp 38e4604c35SSlava Zakharin hypot.cpp 39e4604c35SSlava Zakharin j0.cpp 40e4604c35SSlava Zakharin j1.cpp 41e4604c35SSlava Zakharin jn.cpp 42e4604c35SSlava Zakharin lgamma.cpp 43e4604c35SSlava Zakharin llround.cpp 44e4604c35SSlava Zakharin log.cpp 45e4604c35SSlava Zakharin log10.cpp 46e4604c35SSlava Zakharin lround.cpp 470699749cSSlava Zakharin mod-real.cpp 480699749cSSlava Zakharin modulo-real.cpp 490699749cSSlava Zakharin nearest.cpp 50936142e0Svdonaldson nearbyint.cpp 51baf6725bSSlava Zakharin norm2.cpp 52e4604c35SSlava Zakharin pow.cpp 53e0738cc6SSlava Zakharin random.cpp 54*92604cf3Svdonaldson remainder.cpp 55e4604c35SSlava Zakharin round.cpp 560699749cSSlava Zakharin rrspacing.cpp 570699749cSSlava Zakharin scale.cpp 580699749cSSlava Zakharin set-exponent.cpp 59a468d02fSSlava Zakharin sin.cpp 60e4604c35SSlava Zakharin sinh.cpp 610699749cSSlava Zakharin spacing.cpp 62a468d02fSSlava Zakharin sqrt.cpp 63e4604c35SSlava Zakharin tan.cpp 64e4604c35SSlava Zakharin tanh.cpp 65e4604c35SSlava Zakharin tgamma.cpp 66e4604c35SSlava Zakharin trunc.cpp 67e4604c35SSlava Zakharin y0.cpp 68e4604c35SSlava Zakharin y1.cpp 69e4604c35SSlava Zakharin yn.cpp 70a468d02fSSlava Zakharin ) 71a468d02fSSlava Zakharin 72a468d02fSSlava Zakharininclude_directories(AFTER "${CMAKE_CURRENT_SOURCE_DIR}/..") 7350d848d0SSlava Zakharinadd_library(FortranFloat128MathILib INTERFACE) 74b9198a17SSlava Zakharintarget_include_directories(FortranFloat128MathILib INTERFACE 75b9198a17SSlava Zakharin $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..> 76b9198a17SSlava Zakharin ) 7750d848d0SSlava Zakharin 7850d848d0SSlava Zakharinif (FLANG_RUNTIME_F128_MATH_LIB) 7950d848d0SSlava Zakharin if (${FLANG_RUNTIME_F128_MATH_LIB} STREQUAL "libquadmath") 8050d848d0SSlava Zakharin check_include_file(quadmath.h FOUND_QUADMATH_HEADER) 8150d848d0SSlava Zakharin if(FOUND_QUADMATH_HEADER) 8250d848d0SSlava Zakharin add_compile_definitions(HAS_QUADMATHLIB) 8350d848d0SSlava Zakharin else() 8450d848d0SSlava Zakharin message(FATAL_ERROR 8550d848d0SSlava Zakharin "FLANG_RUNTIME_F128_MATH_LIB setting requires quadmath.h " 8650d848d0SSlava Zakharin "to be available: ${FLANG_RUNTIME_F128_MATH_LIB}" 8750d848d0SSlava Zakharin ) 8850d848d0SSlava Zakharin endif() 8950d848d0SSlava Zakharin else() 9050d848d0SSlava Zakharin message(FATAL_ERROR 9150d848d0SSlava Zakharin "Unsupported third-party library for Fortran F128 math runtime: " 9250d848d0SSlava Zakharin "${FLANG_RUNTIME_F128_MATH_LIB}" 9350d848d0SSlava Zakharin ) 9450d848d0SSlava Zakharin endif() 9550d848d0SSlava Zakharin 9650d848d0SSlava Zakharin add_flang_library(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN 9750d848d0SSlava Zakharin ${sources}) 98a468d02fSSlava Zakharin 99a468d02fSSlava Zakharin if (DEFINED MSVC) 100a468d02fSSlava Zakharin set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) 101a468d02fSSlava Zakharin add_flang_library(FortranFloat128Math.static STATIC INSTALL_WITH_TOOLCHAIN 102a468d02fSSlava Zakharin ${sources} 103a468d02fSSlava Zakharin ) 104a468d02fSSlava Zakharin set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug) 105a468d02fSSlava Zakharin add_flang_library(FortranFloat128Math.static_dbg STATIC INSTALL_WITH_TOOLCHAIN 106a468d02fSSlava Zakharin ${sources} 107a468d02fSSlava Zakharin ) 108a468d02fSSlava Zakharin add_dependencies(FortranFloat128Math FortranFloat128Math.static 109a468d02fSSlava Zakharin FortranFloat128Math.static_dbg 110a468d02fSSlava Zakharin ) 111a468d02fSSlava Zakharin endif() 11250d848d0SSlava Zakharinelseif (HAVE_LDBL_MANT_DIG_113) 11350d848d0SSlava Zakharin # We can use 'long double' versions from libc. 11450d848d0SSlava Zakharin check_library_exists(m sinl "" FOUND_LIBM) 11550d848d0SSlava Zakharin if (FOUND_LIBM) 11650d848d0SSlava Zakharin target_compile_definitions(FortranFloat128MathILib INTERFACE 11750d848d0SSlava Zakharin HAS_LIBM 11850d848d0SSlava Zakharin ) 11950d848d0SSlava Zakharin target_sources(FortranFloat128MathILib INTERFACE ${sources}) 12050d848d0SSlava Zakharin else() 12150d848d0SSlava Zakharin message(FATAL_ERROR "FortranRuntime cannot build without libm") 12250d848d0SSlava Zakharin endif() 12350d848d0SSlava Zakharinelse() 12450d848d0SSlava Zakharin # We can use '__float128' version from libc, if it has them. 12550d848d0SSlava Zakharin check_library_exists(m sinf128 "" FOUND_LIBMF128) 12650d848d0SSlava Zakharin if (FOUND_LIBMF128) 12750d848d0SSlava Zakharin target_compile_definitions(FortranFloat128MathILib INTERFACE 12850d848d0SSlava Zakharin HAS_LIBMF128 12950d848d0SSlava Zakharin ) 13050d848d0SSlava Zakharin # Enable this, when math-entries.h and complex-math.h is ready. 13150d848d0SSlava Zakharin # target_sources(FortranFloat128MathILib INTERFACE ${sources}) 13250d848d0SSlava Zakharin endif() 13350d848d0SSlava Zakharinendif() 134