# --- Parallel config for kernel v5.17+
AS_IF([test "x$lb_cv_dequote_CC_VERSION_TEXT" = "xyes"], [
- CC_VERSION_TEXT=$(gcc --version | head -n1 | tr ' ()' '.')
+ CC_VERSION_TEXT=$($CC --version | head -n1 | tr ' ()' '.')
MAKE_KMOD_ENV="CONFIG_CC_VERSION_TEXT='$CC_VERSION_TEXT'"])
# --- check that we can build modules at all
J=${TEST_JOBS:-$(nproc)}
AC_MSG_NOTICE([Making $1 in $D])
- AC_MSG_NOTICE([KBUILD_MODPOST_NOFINAL="yes" make modules -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} $MAKE_KMOD_ENV])
+ AC_MSG_NOTICE([KBUILD_MODPOST_NOFINAL="yes" make modules CC="$CC" -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} $MAKE_KMOD_ENV])
AC_TRY_COMMAND([KBUILD_MODPOST_NOFINAL="yes"
- make modules -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} $MAKE_KMOD_ENV >${L} 2>&1])
+ make modules CC="$CC" -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} $MAKE_KMOD_ENV >${L} 2>&1])
AS_IF([test -f ${L}],
[AS_IF([test -f $2/Makefile],
[mv $2/Makefile $2/Makefile.compile.$1])],
for mf in $(ls -1 ${TEST_DIR}/Makefile.compile.*); do
ln -sf $mf ${D}/Makefile
KBUILD_MODPOST_NOFINAL="yes"
- make modules -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} >> rebuild.log 2>&1
+ make modules CC="$CC" -k -j${J} -C $LINUX_OBJ $ARCH_UM M=${D} >> rebuild.log 2>&1
for dir in $(awk '/^obj-m/ { print [$]3 }' ${D}/$mf); do
name=${dir%/}
]) # LB_PATH_DEFAULTS
#
-# LB_PROG_CC
-#
-# checks on the C compiler
-#
-AC_DEFUN([LB_PROG_CC], [
-AC_PROG_RANLIB
-AC_CHECK_TOOL(LD, [ld], [no])
-AC_CHECK_TOOL(OBJDUMP, [objdump], [no])
-AC_CHECK_TOOL(STRIP, [strip], [no])
-
-# --------- unsigned long long sane? -------
-AC_CHECK_SIZEOF(unsigned long long, 0)
-AS_IF([test $ac_cv_sizeof_unsigned_long_long != 8],
- [AC_MSG_ERROR([we assume that sizeof(unsigned long long) == 8.])])
-
-AS_IF([test $target_cpu = powerpc64], [
- AC_MSG_WARN([set compiler with -m64])
- CFLAGS="$CFLAGS -m64"
- CC="$CC -m64"
-])
-
-# libcfs/include for util headers, lustre/include for liblustreapi and friends
-# UAPI headers from OpenSFS are included if modules support is enabled, otherwise
-# it will use the native kernel implementation.
-CPPFLAGS="-I$PWD/libcfs/include -I$PWD/lnet/utils/ -I$PWD/lustre/include $CPPFLAGS"
-
-CCASFLAGS="-Wall -fPIC -D_GNU_SOURCE"
-AC_SUBST(CCASFLAGS)
-
-# everyone builds against lnet and lustre kernel headers
-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"
-AC_SUBST(EXTRA_KCFLAGS)
-]) # LB_PROG_CC
-
-#
-# Check if gcc supports -Wno-format-truncation
-#
-# To supress many warnings with gcc7
-#
-AC_DEFUN([LB_CC_NO_FORMAT_TRUNCATION], [
- AC_MSG_CHECKING([for -Wno-format-truncation support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wno-format-truncation"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
- EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-format-truncation"
- AC_SUBST(EXTRA_KCFLAGS)
- AC_MSG_RESULT([yes])
- ], [
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
-])
-
-#
-# Check if gcc supports -Wno-stringop-truncation
-#
-# To supress many warnings with gcc8
-#
-AC_DEFUN([LB_CC_NO_STRINGOP_TRUNCATION], [
- AC_MSG_CHECKING([for -Wno-stringop-truncation support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Werror -Wno-stringop-truncation"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
- EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
- AC_SUBST(EXTRA_KCFLAGS)
- AC_MSG_RESULT([yes])
- ], [
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
-])
-
-#
-# Check if gcc supports -Wno-stringop-overflow
-#
-# To supress many warnings with gcc8
-#
-AC_DEFUN([LB_CC_NO_STRINGOP_OVERFLOW], [
- AC_MSG_CHECKING([for -Wno-stringop-overflow support])
-
- saved_flags="$CFLAGS"
- CFLAGS="$CFLAGS -Wno-stringop-overflow"
-
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
- EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-overflow"
- AC_SUBST(EXTRA_KCFLAGS)
- AC_MSG_RESULT([yes])
- ], [
- AC_MSG_RESULT([no])
- ])
-
- CFLAGS="$saved_flags"
-])
-
-#
# LB_CONDITIONALS
#
# AM_CONDITIONAL instances for everything
LB_PATH_DEFAULTS
-LB_PROG_CC
-LB_CC_NO_FORMAT_TRUNCATION
-LB_CC_NO_STRINGOP_TRUNCATION
-LB_CC_NO_STRINGOP_OVERFLOW
-
LC_OSD_ADDON
LB_CONFIG_DOCS
])
AC_OUTPUT
-
-cat <<_ACEOF
-
-CC: $CC
-LD: $LD
-CPPFLAGS: $CPPFLAGS
-CFLAGS: $CFLAGS
-EXTRA_KCFLAGS: $EXTRA_KCFLAGS
-
-Type 'make' to build Lustre.
-_ACEOF
]) # LB_CONFIGURE
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0
+
+#
+# This file is part of Lustre, http://www.lustre.org/
+#
+# config/lustre-toolchain.m4
+#
+# Configure the global compiler flags and toolchain settings
+#
+
+#
+# LTC_LLVM_TOOLCHAIN
+#
+# Read LLVM and LLVM_IAS env variables and set CC and friends
+# based on their values
+#
+AC_DEFUN([LTC_LLVM_TOOLCHAIN], [
+AC_ARG_VAR(LLVM, "Enable LLVM toolchain")
+AC_ARG_VAR(LLVM_IAS, "Disable LLVM integrated assembler")
+
+if [[ -n "$LLVM" ]]; then
+
+if [[ -z "${LLVM##*/*}" ]]; then
+LLVM_PREFIX="$LLVM"
+fi
+
+if [[ -z "${LLVM##*-*}" ]]; then
+LLVM_SUFFIX="$LLVM"
+fi
+
+HOSTCC="$LLVM_PREFIX"clang"$LLVM_SUFFIX"
+HOSTCXX="$LLVM_PREFIX"clang++"$LLVM_SUFFIX"
+CC="$LLVM_PREFIX"clang"$LLVM_SUFFIX"
+LD="$LLVM_PREFIX"ld.lld"$LLVM_SUFFIX"
+AR="$LLVM_PREFIX"llvm-ar"$LLVM_SUFFIX"
+NM="$LLVM_PREFIX"llvm-nm"$LLVM_SUFFIX"
+OBJCOPY="$LLVM_PREFIX"llvm-objcopy"$LLVM_SUFFIX"
+OBJDUMP="$LLVM_PREFIX"llvm-objdump"$LLVM_SUFFIX"
+READELF="$LLVM_PREFIX"llvm-readelf"$LLVM_SUFFIX"
+STRIP="$LLVM_PREFIX"llvm-strip"$LLVM_SUFFIX"
+
+if [[ "$LLVM_IAS" == "0" ]]; then
+CC="$CC -fno-integrated-as"
+fi
+
+fi
+]) # LTC_LLVM_TOOLCHAIN
+
+#
+# LTC_CONFIG_ERROR
+#
+# Simple flag to make compiler flags very lax, for
+# development purposes
+#
+AC_DEFUN([LTC_CONFIG_ERROR], [
+AC_ARG_ENABLE([strict-errors],
+ AS_HELP_STRING([--disable-strict-errors], [Disable strict error C flags]))
+
+AS_IF([test "x$enable_strict_errors" != "xno"], [
+AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"], [
+CFLAGS="$CFLAGS -Wall -Werror"
+])
+], [
+CFLAGS="$CFLAGS -Wall -Wno-error -Wno-error=incompatible-function-pointer-types -Wno-error=incompatible-pointer-types"
+])
+]) # LTC_CONFIG_ERROR
+
+#
+# LTC_PROG_CC
+#
+# checks on the C compiler
+#
+AC_DEFUN([LTC_PROG_CC], [
+AC_PROG_RANLIB
+AC_CHECK_TOOL(LD, [ld], [no])
+AC_CHECK_TOOL(OBJDUMP, [objdump], [no])
+AC_CHECK_TOOL(STRIP, [strip], [no])
+
+# --------- unsigned long long sane? -------
+AC_CHECK_SIZEOF(unsigned long long, 0)
+AS_IF([test $ac_cv_sizeof_unsigned_long_long != 8],
+ [AC_MSG_ERROR([we assume that sizeof(unsigned long long) == 8.])])
+
+AS_IF([test $target_cpu = powerpc64], [
+ AC_MSG_WARN([set compiler with -m64])
+ CFLAGS="$CFLAGS -m64"
+ CC="$CC -m64"
+])
+
+# libcfs/include for util headers, lustre/include for liblustreapi and friends
+# UAPI headers from OpenSFS are included if modules support is enabled, otherwise
+# it will use the native kernel implementation.
+CPPFLAGS="-I$PWD/libcfs/include -I$PWD/lnet/utils/ -I$PWD/lustre/include $CPPFLAGS"
+
+CCASFLAGS="-Wall -fPIC -D_GNU_SOURCE"
+AC_SUBST(CCASFLAGS)
+
+# everyone builds against lnet and lustre kernel headers
+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"
+AC_SUBST(EXTRA_KCFLAGS)
+]) # LTC_PROG_CC
+
+#
+# LTC_CC_NO_FORMAT_TRUNCATION
+#
+# Check if gcc supports -Wno-format-truncation
+# To supress many warnings with gcc7
+#
+AC_DEFUN([LTC_CC_NO_FORMAT_TRUNCATION], [
+ AC_MSG_CHECKING([for -Wno-format-truncation support])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="-Werror -Wno-format-truncation"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-format-truncation"
+ AC_SUBST(EXTRA_KCFLAGS)
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+]) # LTC_CC_NO_FORMAT_TRUNCATION
+
+#
+# LTC_CC_NO_STRINGOP_TRUNCATION
+#
+# Check if gcc supports -Wno-stringop-truncation
+# To supress many warnings with gcc8
+#
+AC_DEFUN([LTC_CC_NO_STRINGOP_TRUNCATION], [
+ AC_MSG_CHECKING([for -Wno-stringop-truncation support])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="-Werror -Wno-stringop-truncation"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-truncation"
+ AC_SUBST(EXTRA_KCFLAGS)
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+]) # LTC_CC_NO_STRINGOP_TRUNCATION
+
+#
+# LTC_CC_NO_STRINGOP_OVERFLOW
+#
+# Check if gcc supports -Wno-stringop-overflow
+# To supress many warnings with gcc8
+#
+AC_DEFUN([LTC_CC_NO_STRINGOP_OVERFLOW], [
+ AC_MSG_CHECKING([for -Wno-stringop-overflow support])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="-Werror -Wno-stringop-overflow"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Wno-stringop-overflow"
+ AC_SUBST(EXTRA_KCFLAGS)
+ TEST_RESULT="yes"
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AM_CONDITIONAL(NO_STRINGOP_OVERFLOW, test x$TEST_RESULT = xyes)
+]) # LTC_CC_NO_STRINGOP_OVERFLOW
+
+#
+# LTC_TOOLCHAIN_CONFIGURE
+#
+# main configure steps
+#
+AC_DEFUN([LTC_TOOLCHAIN_CONFIGURE], [
+AC_REQUIRE([LTC_LLVM_TOOLCHAIN])
+AC_REQUIRE([AC_PROG_CC])
+
+AM_PROG_AS
+AC_CHECK_TOOLS(AR, ar)
+LTC_PROG_CC
+
+LTC_CONFIG_ERROR
+
+LTC_CC_NO_FORMAT_TRUNCATION
+LTC_CC_NO_STRINGOP_TRUNCATION
+LTC_CC_NO_STRINGOP_OVERFLOW
+
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+fi
+
+CFLAGS="$CFLAGS $EXTRA_CFLAGS"
+]) # LTC_TOOLCHAIN_CONFIGURE
+
+#
+# LTC_TOOLCHAIN_STATUS
+#
+# main configure steps
+#
+AC_DEFUN([LTC_TOOLCHAIN_STATUS], [
+cat <<_ACEOF
+
+CC: $CC
+CFLAGS: $CFLAGS
+EXTRA_CFLAGS: $EXTRA_CFLAGS
+
+EXTRA_KCFLAGS: $EXTRA_KCFLAGS
+
+LD: $LD
+
+CPPFLAGS: $CPPFLAGS
+
+Type 'make' to build Lustre.
+_ACEOF
+]) # LTC_TOOLCHAIN_STATUS
AM_INIT_AUTOMAKE([1.10 tar-pax -Wno-portability subdir-objects])
AM_MAINTAINER_MODE([enable])
-AC_PROG_CC
+LTC_TOOLCHAIN_CONFIGURE
LT_INIT
AC_PROG_MKDIR_P
-AM_PROG_AS
AC_PATH_PROG(FLEX, flex)
AC_PATH_PROG(BISON, bison)
AC_PATH_PROG(RPMBUILD, rpmbuild)
-AC_CHECK_TOOLS(AR, ar)
LUSTRE_VERSION_CPP_MACROS
LB_CONFIGURE
+LTC_TOOLCHAIN_STATUS
#
AC_DEFUN([LC_FID2PATH_ANON_UNION], [
saved_flags="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="-Werror"
AC_MSG_CHECKING([if 'struct getinfo_fid2path' has anonymous union])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <linux/lustre/lustre_idl.h>
AC_DEFUN([LC_OPENSSL_HMAC], [
has_hmac_functions="no"
saved_flags="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="-Werror"
AC_MSG_CHECKING([whether OpenSSL has HMAC_Init_ex])
AS_IF([test "x$enable_ssk" != xno], [
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
int main(void) {
int rc;
rc = HMAC_Init_ex(NULL, "test", 4, EVP_md_null(), NULL);
+ return rc;
}
])],[
has_hmac_functions="yes"
AC_DEFUN([LC_OPENSSL_EVP_PKEY], [
has_evp_pkey="no"
saved_flags="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="-Werror"
AC_MSG_CHECKING([whether OpenSSL has EVP_PKEY_get_params])
AS_IF([test "x$enable_ssk" != xno], [
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
OSSL_PARAM *params;
int rc = EVP_PKEY_get_params(NULL, params);
+ return rc;
}
])],[
AC_DEFINE(HAVE_OPENSSL_EVP_PKEY, 1, [OpenSSL EVP_PKEY_get_params])
# OpenSSL is needed for l_getsepol
AC_DEFUN([LC_OPENSSL_GETSEPOL], [
saved_flags="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="-Werror"
AC_MSG_CHECKING([whether openssl-devel is present])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
#include <openssl/evp.h>
int main(void) {
EVP_MD_CTX *mdctx = EVP_MD_CTX_create();
+ (void) mdctx;
}
])],[
AC_DEFINE(HAVE_OPENSSL_GETSEPOL, 1, [openssl-devel is present])
AC_MSG_NOTICE([Lustre core checks
==============================================================================])
-AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"],
- [CFLAGS="$CFLAGS -Wall -Werror"])
-
# maximum MDS thread count
LC_MDS_MAX_THREADS
LIBLUSTREAPI = $(top_builddir)/lustre/utils/liblustreapi.la
+if NO_STRINGOP_OVERFLOW
badarea_io_CFLAGS=-Wno-stringop-overflow
+endif # NO_STRINGOP_OVERFLOW
+
mmap_sanity_LDADD = $(LIBLUSTREAPI)
multiop_LDADD = $(LIBLUSTREAPI) $(PTHREAD_LIBS)
llapi_layout_test_LDADD = $(LIBLUSTREAPI)