Whamcloud - gitweb
LU-16518 build: llvm/clang support
[fs/lustre-release.git] / config / lustre-toolchain.m4
1 # SPDX-License-Identifier: GPL-2.0
2
3 #
4 # This file is part of Lustre, http://www.lustre.org/
5 #
6 # config/lustre-toolchain.m4
7 #
8 # Configure the global compiler flags and toolchain settings
9 #
10
11 #
12 # LTC_LLVM_TOOLCHAIN
13 #
14 # Read LLVM and LLVM_IAS env variables and set CC and friends
15 # based on their values
16 #
17 AC_DEFUN([LTC_LLVM_TOOLCHAIN], [
18 AC_ARG_VAR(LLVM, "Enable LLVM toolchain")
19 AC_ARG_VAR(LLVM_IAS, "Disable LLVM integrated assembler")
20
21 if [[ -n "$LLVM" ]]; then
22
23 if [[ -z "${LLVM##*/*}" ]]; then
24 LLVM_PREFIX="$LLVM"
25 fi
26
27 if [[ -z "${LLVM##*-*}" ]]; then
28 LLVM_SUFFIX="$LLVM"
29 fi
30
31 HOSTCC="$LLVM_PREFIX"clang"$LLVM_SUFFIX"
32 HOSTCXX="$LLVM_PREFIX"clang++"$LLVM_SUFFIX"
33 CC="$LLVM_PREFIX"clang"$LLVM_SUFFIX"
34 LD="$LLVM_PREFIX"ld.lld"$LLVM_SUFFIX"
35 AR="$LLVM_PREFIX"llvm-ar"$LLVM_SUFFIX"
36 NM="$LLVM_PREFIX"llvm-nm"$LLVM_SUFFIX"
37 OBJCOPY="$LLVM_PREFIX"llvm-objcopy"$LLVM_SUFFIX"
38 OBJDUMP="$LLVM_PREFIX"llvm-objdump"$LLVM_SUFFIX"
39 READELF="$LLVM_PREFIX"llvm-readelf"$LLVM_SUFFIX"
40 STRIP="$LLVM_PREFIX"llvm-strip"$LLVM_SUFFIX"
41
42 if [[ "$LLVM_IAS" == "0" ]]; then
43 CC="$CC -fno-integrated-as"
44 fi
45
46 fi
47 ]) # LTC_LLVM_TOOLCHAIN
48
49 #
50 # LTC_CONFIG_ERROR
51 #
52 # Simple flag to make compiler flags very lax, for
53 # development purposes
54 #
55 AC_DEFUN([LTC_CONFIG_ERROR], [
56 AC_ARG_ENABLE([strict-errors],
57     AS_HELP_STRING([--disable-strict-errors], [Disable strict error C flags]))
58
59 AS_IF([test "x$enable_strict_errors" != "xno"], [
60 AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"], [
61 CFLAGS="$CFLAGS -Wall -Werror"
62 ])
63 ], [
64 CFLAGS="$CFLAGS -Wall -Wno-error -Wno-error=incompatible-function-pointer-types -Wno-error=incompatible-pointer-types"
65 ])
66 ]) # LTC_CONFIG_ERROR
67
68 #
69 # LTC_PROG_CC
70 #
71 # checks on the C compiler
72 #
73 AC_DEFUN([LTC_PROG_CC], [
74 AC_PROG_RANLIB
75 AC_CHECK_TOOL(LD, [ld], [no])
76 AC_CHECK_TOOL(OBJDUMP, [objdump], [no])
77 AC_CHECK_TOOL(STRIP, [strip], [no])
78
79 # ---------  unsigned long long sane? -------
80 AC_CHECK_SIZEOF(unsigned long long, 0)
81 AS_IF([test $ac_cv_sizeof_unsigned_long_long != 8],
82         [AC_MSG_ERROR([we assume that sizeof(unsigned long long) == 8.])])
83
84 AS_IF([test $target_cpu = powerpc64], [
85         AC_MSG_WARN([set compiler with -m64])
86         CFLAGS="$CFLAGS -m64"
87         CC="$CC -m64"
88 ])
89
90 # libcfs/include for util headers, lustre/include for liblustreapi and friends
91 # UAPI headers from OpenSFS are included if modules support is enabled, otherwise
92 # it will use the native kernel implementation.
93 CPPFLAGS="-I$PWD/libcfs/include -I$PWD/lnet/utils/ -I$PWD/lustre/include $CPPFLAGS"
94
95 CCASFLAGS="-Wall -fPIC -D_GNU_SOURCE"
96 AC_SUBST(CCASFLAGS)
97
98 # everyone builds against lnet and lustre kernel headers
99 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -g -I$PWD/libcfs/include -I$PWD/libcfs/include/libcfs -I$PWD/lnet/include/uapi -I$PWD/lnet/include -I$PWD/lustre/include/uapi -I$PWD/lustre/include"
100 AC_SUBST(EXTRA_KCFLAGS)
101 ]) # LTC_PROG_CC
102
103 #
104 # LTC_CC_NO_FORMAT_TRUNCATION
105 #
106 # Check if gcc supports -Wno-format-truncation
107 # To supress many warnings with gcc7
108 #
109 AC_DEFUN([LTC_CC_NO_FORMAT_TRUNCATION], [
110         AC_MSG_CHECKING([for -Wno-format-truncation support])
111
112         saved_flags="$CFLAGS"
113         CFLAGS="-Werror -Wno-format-truncation"
114
115         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
116                 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-format-truncation"
117                 AC_SUBST(EXTRA_KCFLAGS)
118                 AC_MSG_RESULT([yes])
119         ], [
120                 AC_MSG_RESULT([no])
121         ])
122
123         CFLAGS="$saved_flags"
124 ]) # LTC_CC_NO_FORMAT_TRUNCATION
125
126 #
127 # LTC_CC_NO_STRINGOP_TRUNCATION
128 #
129 # Check if gcc supports -Wno-stringop-truncation
130 # To supress many warnings with gcc8
131 #
132 AC_DEFUN([LTC_CC_NO_STRINGOP_TRUNCATION], [
133         AC_MSG_CHECKING([for -Wno-stringop-truncation support])
134
135         saved_flags="$CFLAGS"
136         CFLAGS="-Werror -Wno-stringop-truncation"
137
138         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
139                 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
140                 AC_SUBST(EXTRA_KCFLAGS)
141                 AC_MSG_RESULT([yes])
142         ], [
143                 AC_MSG_RESULT([no])
144         ])
145
146         CFLAGS="$saved_flags"
147 ]) # LTC_CC_NO_STRINGOP_TRUNCATION
148
149 #
150 # LTC_CC_NO_STRINGOP_OVERFLOW
151 #
152 # Check if gcc supports -Wno-stringop-overflow
153 # To supress many warnings with gcc8
154 #
155 AC_DEFUN([LTC_CC_NO_STRINGOP_OVERFLOW], [
156         AC_MSG_CHECKING([for -Wno-stringop-overflow support])
157
158         saved_flags="$CFLAGS"
159         CFLAGS="-Werror -Wno-stringop-overflow"
160
161         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
162                 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-overflow"
163                 AC_SUBST(EXTRA_KCFLAGS)
164                 TEST_RESULT="yes"
165                 AC_MSG_RESULT([yes])
166         ], [
167                 AC_MSG_RESULT([no])
168         ])
169
170         CFLAGS="$saved_flags"
171         AM_CONDITIONAL(NO_STRINGOP_OVERFLOW, test x$TEST_RESULT = xyes)
172 ]) # LTC_CC_NO_STRINGOP_OVERFLOW
173
174 #
175 # LTC_TOOLCHAIN_CONFIGURE
176 #
177 # main configure steps
178 #
179 AC_DEFUN([LTC_TOOLCHAIN_CONFIGURE], [
180 AC_REQUIRE([LTC_LLVM_TOOLCHAIN])
181 AC_REQUIRE([AC_PROG_CC])
182
183 AM_PROG_AS
184 AC_CHECK_TOOLS(AR, ar)
185 LTC_PROG_CC
186
187 LTC_CONFIG_ERROR
188
189 LTC_CC_NO_FORMAT_TRUNCATION
190 LTC_CC_NO_STRINGOP_TRUNCATION
191 LTC_CC_NO_STRINGOP_OVERFLOW
192
193 if test $ac_test_CFLAGS; then
194         CFLAGS=$ac_save_CFLAGS
195 fi
196
197 CFLAGS="$CFLAGS $EXTRA_CFLAGS"
198 ]) # LTC_TOOLCHAIN_CONFIGURE
199
200 #
201 # LTC_TOOLCHAIN_STATUS
202 #
203 # main configure steps
204 #
205 AC_DEFUN([LTC_TOOLCHAIN_STATUS], [
206 cat <<_ACEOF
207
208 CC:            $CC
209 CFLAGS:        $CFLAGS
210 EXTRA_CFLAGS:  $EXTRA_CFLAGS
211
212 EXTRA_KCFLAGS: $EXTRA_KCFLAGS
213
214 LD:            $LD
215
216 CPPFLAGS:      $CPPFLAGS
217
218 Type 'make' to build Lustre.
219 _ACEOF
220 ]) # LTC_TOOLCHAIN_STATUS