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