File: CMakeLists.txt

package info (click to toggle)
llvm-toolchain-19 1%3A19.1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,998,520 kB
  • sloc: cpp: 6,951,680; ansic: 1,486,157; asm: 913,598; python: 232,024; f90: 80,126; objc: 75,281; lisp: 37,276; pascal: 16,990; sh: 10,009; ml: 5,058; perl: 4,724; awk: 3,523; makefile: 3,167; javascript: 2,504; xml: 892; fortran: 664; cs: 573
file content (128 lines) | stat: -rw-r--r-- 3,391 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#===-- 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 FortranFloat128Math 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
  norm2.cpp
  pow.cpp
  random.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
  )

include_directories(AFTER "${CMAKE_CURRENT_SOURCE_DIR}/..")
add_library(FortranFloat128MathILib INTERFACE)

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(FortranFloat128Math STATIC INSTALL_WITH_TOOLCHAIN
    ${sources})

  if (DEFINED MSVC)
    set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)
    add_flang_library(FortranFloat128Math.static STATIC INSTALL_WITH_TOOLCHAIN
      ${sources}
      )
    set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
    add_flang_library(FortranFloat128Math.static_dbg STATIC INSTALL_WITH_TOOLCHAIN
      ${sources}
      )
    add_dependencies(FortranFloat128Math FortranFloat128Math.static
      FortranFloat128Math.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 "FortranRuntime 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()