forked from dealii/dealii
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup_sanity_checks.cmake
105 lines (94 loc) · 3.52 KB
/
setup_sanity_checks.cmake
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
## ---------------------------------------------------------------------
##
## Copyright (C) 2012 - 2023 by the deal.II authors
##
## This file is part of the deal.II library.
##
## The deal.II library is free software; you can use it, redistribute
## it, and/or modify it under the terms of the GNU Lesser General
## Public License as published by the Free Software Foundation; either
## version 2.1 of the License, or (at your option) any later version.
## The full text of the license can be found in the file LICENSE.md at
## the top level directory of deal.II.
##
## ---------------------------------------------------------------------
########################################################################
# #
# Sanity checks: #
# #
########################################################################
#
# Sanity check: Can we compile with the final setup?
#
foreach(build ${DEAL_II_BUILD_TYPES})
macro(_check_linker_flags)
check_compiler_setup(
"${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${build}}"
"${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${build}}"
DEAL_II_HAVE_USABLE_FLAGS_${build}
${DEAL_II_LIBRARIES} ${DEAL_II_LIBRARIES_${build}}
${DEAL_II_TARGETS} ${DEAL_II_TARGETS_${build}}
)
endmacro()
macro(_set_cache_variable _variable _value)
set(${_variable} ${_value} CACHE INTERNAL "" FORCE)
set(${_variable} ${_value})
endmacro()
macro(_drop_linker_flag _linker_flag _replacement_flag _variable)
message(STATUS
"Unable to compile a simple test program. "
"Trying to drop \"${_linker_flag}\" from the linker flags."
)
foreach(_flags
DEAL_II_LINKER_FLAGS DEAL_II_LINKER_FLAGS_${build}
BASE_LINKER_FLAGS BASE_LINKER_FLAGS_${build}
)
string(REPLACE "${_linker_flag}" "${_replacement_flag}"
${_flags} "${${_flags}}"
)
endforeach()
_set_cache_variable(_variable FALSE)
endmacro()
_check_linker_flags()
if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build} AND DEAL_II_COMPILER_HAS_FUSE_LD_MOLD)
set(_replacement "")
if(DEAL_II_COMPILER_HAS_FUSE_LD_LLD)
set(_replacement "-fuse-ld=lld")
elseif(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD)
set(_replacement "-fuse-ld=gold")
endif()
_drop_linker_flag(
"-fuse-ld=mold" ${_replacement}
DEAL_II_COMPILER_HAS_FUSE_LD_MOLD
)
_check_linker_flags()
endif()
if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build} AND DEAL_II_COMPILER_HAS_FUSE_LD_LLD)
set(_replacement "")
if(DEAL_II_COMPILER_HAS_FUSE_LD_GOLD)
set(_replacement "-fuse-ld=gold")
endif()
_drop_linker_flag(
"-fuse-ld=lld" ${_replacement}
DEAL_II_COMPILER_HAS_FUSE_LD_LLD
)
_check_linker_flags()
endif()
if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build} AND DEAL_II_COMPILER_HAS_FUSE_LD_GOLD)
_drop_linker_flag(
"-fuse-ld=gold" ""
DEAL_II_COMPILER_HAS_FUSE_LD_GOLD
)
_check_linker_flags()
endif()
if(NOT DEAL_II_HAVE_USABLE_FLAGS_${build})
message(FATAL_ERROR "
Configuration error: Cannot compile a test program with the final set of
compiler and linker flags:
CXX flags (${build}): ${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${build}}
LD flags (${build}): ${DEAL_II_LINKER_FLAGS} ${DEAL_II_LINKER_FLAGS_${build}}
LIBRARIES (${build}): ${DEAL_II_LIBRARIES};${DEAL_II_LIBRARIES_${build}}
\n\n"
)
endif()
endforeach()