1 # SPDX-License-Identifier: GPL-2.0
4 # This file is part of Lustre, http://www.lustre.org/
6 # config/lustre-toolchain.m4
8 # Configure the global compiler flags and toolchain settings
14 # Read LLVM and LLVM_IAS env variables and set CC and friends
15 # based on their values
17 AC_DEFUN([LTC_LLVM_TOOLCHAIN], [
18 AC_ARG_VAR(LLVM, "Enable LLVM toolchain")
19 AC_ARG_VAR(LLVM_IAS, "Disable LLVM integrated assembler")
21 if [[ -n "$LLVM" ]]; then
23 if [[ -z "${LLVM##*/*}" ]]; then
27 if [[ -z "${LLVM##*-*}" ]]; then
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"
43 if [[ "$LLVM_IAS" == "0" ]]; then
44 CC="$CC -fno-integrated-as"
48 ]) # LTC_LLVM_TOOLCHAIN
53 # Simple flag to make compiler flags very lax, for
54 # development purposes
56 AC_DEFUN([LTC_CONFIG_ERROR], [
57 AC_ARG_ENABLE([strict-errors],
58 AS_HELP_STRING([--disable-strict-errors], [Disable strict error C flags]))
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"
65 CFLAGS="$CFLAGS -Wall -Wno-error -Wno-error=incompatible-function-pointer-types -Wno-error=incompatible-pointer-types"
72 # checks on the C compiler
74 AC_DEFUN([LTC_PROG_CC], [
76 AC_CHECK_TOOL(LD, [ld], [no])
77 AC_CHECK_TOOL(OBJDUMP, [objdump], [no])
78 AC_CHECK_TOOL(STRIP, [strip], [no])
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.])])
85 AS_IF([test $target_cpu = powerpc64], [
86 AC_MSG_WARN([set compiler with -m64])
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"
96 CCASFLAGS="-Wall -fPIC -D_GNU_SOURCE"
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)
105 # LTC_CC_NO_FORMAT_TRUNCATION
107 # Check if gcc supports -Wno-format-truncation
108 # To supress many warnings with gcc7
110 AC_DEFUN([LTC_CC_NO_FORMAT_TRUNCATION], [
111 AC_MSG_CHECKING([for -Wno-format-truncation support])
113 saved_flags="$CFLAGS"
114 CFLAGS="-Werror -Wno-format-truncation"
116 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
117 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-format-truncation"
118 AC_SUBST(EXTRA_KCFLAGS)
124 CFLAGS="$saved_flags"
125 ]) # LTC_CC_NO_FORMAT_TRUNCATION
128 # LTC_CC_NO_STRINGOP_TRUNCATION
130 # Check if gcc supports -Wno-stringop-truncation
131 # To supress many warnings with gcc8
133 AC_DEFUN([LTC_CC_NO_STRINGOP_TRUNCATION], [
134 AC_MSG_CHECKING([for -Wno-stringop-truncation support])
136 saved_flags="$CFLAGS"
137 CFLAGS="-Werror -Wno-stringop-truncation"
139 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
140 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
141 AC_SUBST(EXTRA_KCFLAGS)
147 CFLAGS="$saved_flags"
148 ]) # LTC_CC_NO_STRINGOP_TRUNCATION
151 # LTC_CC_NO_STRINGOP_OVERFLOW
153 # Check if gcc supports -Wno-stringop-overflow
154 # To supress many warnings with gcc8
156 AC_DEFUN([LTC_CC_NO_STRINGOP_OVERFLOW], [
157 AC_MSG_CHECKING([for -Wno-stringop-overflow support])
159 saved_flags="$CFLAGS"
160 CFLAGS="-Werror -Wno-stringop-overflow"
162 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
163 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-overflow"
164 AC_SUBST(EXTRA_KCFLAGS)
171 CFLAGS="$saved_flags"
172 AM_CONDITIONAL(NO_STRINGOP_OVERFLOW, test x$TEST_RESULT = xyes)
173 ]) # LTC_CC_NO_STRINGOP_OVERFLOW
176 # LTC_TOOLCHAIN_CONFIGURE
178 # main configure steps
180 AC_DEFUN([LTC_TOOLCHAIN_CONFIGURE], [
181 AC_REQUIRE([LTC_LLVM_TOOLCHAIN])
182 AC_REQUIRE([AC_PROG_CC])
183 AC_REQUIRE([AC_PROG_CXX])
186 AC_CHECK_TOOLS(AR, ar)
191 LTC_CC_NO_FORMAT_TRUNCATION
192 LTC_CC_NO_STRINGOP_TRUNCATION
193 LTC_CC_NO_STRINGOP_OVERFLOW
195 if test $ac_test_CFLAGS; then
196 CFLAGS=$ac_save_CFLAGS
199 CFLAGS="$CFLAGS $EXTRA_CFLAGS"
200 ]) # LTC_TOOLCHAIN_CONFIGURE
203 # LTC_TOOLCHAIN_STATUS
205 # main configure steps
207 AC_DEFUN([LTC_TOOLCHAIN_STATUS], [
212 EXTRA_CFLAGS: $EXTRA_CFLAGS
214 EXTRA_KCFLAGS: $EXTRA_KCFLAGS
221 Type 'make' to build Lustre.
223 ]) # LTC_TOOLCHAIN_STATUS