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 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"
42 if [[ "$LLVM_IAS" == "0" ]]; then
43 CC="$CC -fno-integrated-as"
47 ]) # LTC_LLVM_TOOLCHAIN
52 # Simple flag to make compiler flags very lax, for
53 # development purposes
55 AC_DEFUN([LTC_CONFIG_ERROR], [
56 AC_ARG_ENABLE([strict-errors],
57 AS_HELP_STRING([--disable-strict-errors], [Disable strict error C flags]))
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"
64 CFLAGS="$CFLAGS -Wall -Wno-error -Wno-error=incompatible-function-pointer-types -Wno-error=incompatible-pointer-types"
71 # checks on the C compiler
73 AC_DEFUN([LTC_PROG_CC], [
75 AC_CHECK_TOOL(LD, [ld], [no])
76 AC_CHECK_TOOL(OBJDUMP, [objdump], [no])
77 AC_CHECK_TOOL(STRIP, [strip], [no])
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.])])
84 AS_IF([test $target_cpu = powerpc64], [
85 AC_MSG_WARN([set compiler with -m64])
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"
95 CCASFLAGS="-Wall -fPIC -D_GNU_SOURCE"
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)
104 # LTC_CC_NO_FORMAT_TRUNCATION
106 # Check if gcc supports -Wno-format-truncation
107 # To supress many warnings with gcc7
109 AC_DEFUN([LTC_CC_NO_FORMAT_TRUNCATION], [
110 AC_MSG_CHECKING([for -Wno-format-truncation support])
112 saved_flags="$CFLAGS"
113 CFLAGS="-Werror -Wno-format-truncation"
115 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
116 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-format-truncation"
117 AC_SUBST(EXTRA_KCFLAGS)
123 CFLAGS="$saved_flags"
124 ]) # LTC_CC_NO_FORMAT_TRUNCATION
127 # LTC_CC_NO_STRINGOP_TRUNCATION
129 # Check if gcc supports -Wno-stringop-truncation
130 # To supress many warnings with gcc8
132 AC_DEFUN([LTC_CC_NO_STRINGOP_TRUNCATION], [
133 AC_MSG_CHECKING([for -Wno-stringop-truncation support])
135 saved_flags="$CFLAGS"
136 CFLAGS="-Werror -Wno-stringop-truncation"
138 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
139 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
140 AC_SUBST(EXTRA_KCFLAGS)
146 CFLAGS="$saved_flags"
147 ]) # LTC_CC_NO_STRINGOP_TRUNCATION
150 # LTC_CC_NO_STRINGOP_OVERFLOW
152 # Check if gcc supports -Wno-stringop-overflow
153 # To supress many warnings with gcc8
155 AC_DEFUN([LTC_CC_NO_STRINGOP_OVERFLOW], [
156 AC_MSG_CHECKING([for -Wno-stringop-overflow support])
158 saved_flags="$CFLAGS"
159 CFLAGS="-Werror -Wno-stringop-overflow"
161 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
162 EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-overflow"
163 AC_SUBST(EXTRA_KCFLAGS)
170 CFLAGS="$saved_flags"
171 AM_CONDITIONAL(NO_STRINGOP_OVERFLOW, test x$TEST_RESULT = xyes)
172 ]) # LTC_CC_NO_STRINGOP_OVERFLOW
175 # LTC_TOOLCHAIN_CONFIGURE
177 # main configure steps
179 AC_DEFUN([LTC_TOOLCHAIN_CONFIGURE], [
180 AC_REQUIRE([LTC_LLVM_TOOLCHAIN])
181 AC_REQUIRE([AC_PROG_CC])
184 AC_CHECK_TOOLS(AR, ar)
189 LTC_CC_NO_FORMAT_TRUNCATION
190 LTC_CC_NO_STRINGOP_TRUNCATION
191 LTC_CC_NO_STRINGOP_OVERFLOW
193 if test $ac_test_CFLAGS; then
194 CFLAGS=$ac_save_CFLAGS
197 CFLAGS="$CFLAGS $EXTRA_CFLAGS"
198 ]) # LTC_TOOLCHAIN_CONFIGURE
201 # LTC_TOOLCHAIN_STATUS
203 # main configure steps
205 AC_DEFUN([LTC_TOOLCHAIN_STATUS], [
210 EXTRA_CFLAGS: $EXTRA_CFLAGS
212 EXTRA_KCFLAGS: $EXTRA_KCFLAGS
218 Type 'make' to build Lustre.
220 ]) # LTC_TOOLCHAIN_STATUS