Skip to content

Commit 74fc2b5

Browse files
committed
System introspection for quadmath
1 parent 3d5348b commit 74fc2b5

File tree

6 files changed

+61
-5
lines changed

6 files changed

+61
-5
lines changed

flang-rt/CMakeLists.txt

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,49 @@ set(HAVE_BACKTRACE ${Backtrace_FOUND})
252252
set(BACKTRACE_HEADER ${Backtrace_HEADER})
253253

254254

255+
256+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
257+
if (NOT DEFINED FLANG_RT_GCC_RESOURCE_DIR)
258+
set(FLANG_RT_GCC_RESOURCE_DIR "FLANG_RT_GCC_RESOURCE_DIR-NOTFOUND")
259+
execute_process(
260+
COMMAND "${CMAKE_CXX_COMPILER}" -v -c "${FLANG_RT_SOURCE_DIR}/cmake/clang_gcc_root.cpp" ${CMAKE_CXX_FLAGS} -###
261+
ERROR_FILE "${CMAKE_CURRENT_BINARY_DIR}/clang_gcc_root_result"
262+
)
263+
file(STRINGS "${CMAKE_CURRENT_BINARY_DIR}/clang_gcc_root_result" _errorresult)
264+
foreach (_line IN LISTS _errorresult)
265+
string(REGEX MATCH
266+
"^Selected GCC installation: (.+)$"
267+
_match
268+
"${_line}")
269+
if (CMAKE_MATCH_1)
270+
set(FLANG_RT_GCC_RESOURCE_DIR "${CMAKE_MATCH_1}")
271+
message(STATUS "Found GCC installation selected by Clang: ${FLANG_RT_GCC_RESOURCE_DIR}")
272+
break()
273+
endif ()
274+
endforeach ()
275+
set(FLANG_RT_GCC_RESOURCE_DIR "${FLANG_RT_GCC_RESOURCE_DIR}" CACHE INTERNAL "Path to GCC's resource dir selected by Clang" FORCE)
276+
endif ()
277+
endif ()
278+
279+
280+
check_include_file("quadmath.h" FOUND_QUADMATH_H)
281+
if (FOUND_QUADMATH_H)
282+
message(STATUS "quadmath.h found without additional include paths")
283+
set(FLANG_RT_INCLUDE_QUADMATH_H "<quadmath.h>")
284+
elseif (FLANG_RT_GCC_RESOURCE_DIR)
285+
cmake_push_check_state()
286+
list(APPEND CMAKE_REQUIRED_INCLUDES "${FLANG_RT_GCC_RESOURCE_DIR}/include")
287+
check_include_file("quadmath.h" FOUND_GCC_QUADMATH_H)
288+
cmake_pop_check_state()
289+
if (FOUND_GCC_QUADMATH_H)
290+
message(STATUS "quadmath.h found in Clang's selected GCC installation")
291+
set(FLANG_RT_INCLUDE_QUADMATH_H "\"${FLANG_RT_GCC_RESOURCE_DIR}/include/quadmath.h\"")
292+
endif ()
293+
endif ()
294+
295+
296+
297+
255298
#####################
256299
# Build Preparation #
257300
#####################
@@ -273,7 +316,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
273316

274317

275318
configure_file(cmake/config.h.cmake.in config.h)
276-
319+
if (FLANG_RT_INCLUDE_QUADMATH_H)
320+
configure_file("cmake/quadmath_wrapper.h.in" "${FLANG_RT_BINARY_DIR}/quadmath_wrapper.h")
321+
endif ()
277322

278323
# The bootstrap build will create a phony target with the same as the top-level
279324
# directory ("flang-rt") and delegate it to the runtimes build dir.

flang-rt/cmake/clang_gcc_root.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
int main() {
2+
return 0;
3+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*===-- cmake/quadmath_wrapper.h.in ---------------------=-----------*- C -*-===
2+
*
3+
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
* See https://llvm.org/LICENSE.txt for license information.
5+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
*
7+
*===----------------------------------------------------------------------===*/
8+
9+
#include ${FLANG_RT_INCLUDE_QUADMATH_H}

flang-rt/lib/quadmath/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ target_include_directories(FortranFloat128MathILib INTERFACE
7878

7979
if (FLANG_RUNTIME_F128_MATH_LIB)
8080
if (${FLANG_RUNTIME_F128_MATH_LIB} STREQUAL "libquadmath")
81-
check_include_file(quadmath.h FOUND_QUADMATH_HEADER)
82-
if(FOUND_QUADMATH_HEADER)
81+
if(FLANG_RT_INCLUDE_QUADMATH_H)
8382
add_compile_definitions(HAS_QUADMATHLIB)
8483
else()
8584
message(FATAL_ERROR

flang-rt/lib/quadmath/complex-math.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "flang/Runtime/entry-names.h"
1414

1515
#if HAS_QUADMATHLIB
16-
#include "quadmath.h"
16+
#include "quadmath_wrapper.h"
1717
#define CAbs(x) cabsq(x)
1818
#define CAcos(x) cacosq(x)
1919
#define CAcosh(x) cacoshq(x)

flang-rt/lib/quadmath/math-entries.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ DEFINE_FALLBACK_F128(Yn)
112112

113113
#if HAS_QUADMATHLIB
114114
// Define wrapper callers for libquadmath.
115-
#include "quadmath.h"
115+
#include "quadmath_wrapper.h"
116116
DEFINE_SIMPLE_ALIAS(Abs, fabsq)
117117
DEFINE_SIMPLE_ALIAS(Acos, acosq)
118118
DEFINE_SIMPLE_ALIAS(Acosh, acoshq)

0 commit comments

Comments
 (0)