aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2024-12-06 04:44:05 +0800
committerH.J. Lu <hjl.tools@gmail.com>2024-12-11 18:31:00 +0800
commitb79f25753346a577c9ba0a3dca69bd9d9d72a020 (patch)
treeb126cf018240a668e5bb8b742029fd9632745c15 /sysdeps
parent4d9a4c02f9327338bb8dc890d26fbbeef956ba1b (diff)
downloadglibc-b79f25753346a577c9ba0a3dca69bd9d9d72a020.zip
glibc-b79f25753346a577c9ba0a3dca69bd9d9d72a020.tar.gz
glibc-b79f25753346a577c9ba0a3dca69bd9d9d72a020.tar.bz2
Add TEST_CC and TEST_CXX support
Support testing glibc build with a different C compiler or a different C++ compiler with $ ../glibc-VERSION/configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1" 1. Add LIBC_TRY_CC_AND_TEST_CC_OPTION, LIBC_TRY_CC_AND_TEST_CC_COMMAND and LIBC_TRY_CC_AND_TEST_LINK to test both CC and TEST_CC. 2. Add check and xcheck targets to Makefile.in and override build compiler options with ones from TEST_CC and TEST_CXX. Tested on Fedora 41/x86-64: 1. Building with GCC 14.2.1 and testing with GCC 6.4.1 and GCC 11.2.1. 2. Building with GCC 15 and testing with GCC 6.4.1. Support for GCC versions older than GCC 6.2 may need to change the test sources. Other targets may need to update configure.ac under sysdeps and modify Makefile.in to override target build compiler options. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sysdeps')
-rwxr-xr-xsysdeps/x86_64/configure172
-rw-r--r--sysdeps/x86_64/configure.ac68
2 files changed, 185 insertions, 55 deletions
diff --git a/sysdeps/x86_64/configure b/sysdeps/x86_64/configure
index 231e6ff..5846b67 100755
--- a/sysdeps/x86_64/configure
+++ b/sysdeps/x86_64/configure
@@ -1,8 +1,9 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/x86_64.
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking -mprefer-vector-width=128" >&5
-printf %s "checking -mprefer-vector-width=128... " >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -mprefer-vector-width=128" >&5
+printf %s "checking for -mprefer-vector-width=128... " >&6; }
if test ${libc_cv_cc_mprefer_vector_width+y}
then :
printf %s "(cached) " >&6
@@ -18,12 +19,44 @@ then :
else case e in #(
e) libc_cv_cc_mprefer_vector_width=no ;;
esac
-fi
- ;;
+fi ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_mprefer_vector_width" >&5
printf "%s\n" "$libc_cv_cc_mprefer_vector_width" >&6; }
+if test "$TEST_CC" = "$CC"; then
+ libc_cv_test_cc_mprefer_vector_width=$libc_cv_cc_mprefer_vector_width
+else
+
+saved_CC="$CC"
+CC="$TEST_CC"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -mprefer-vector-width=128 in testing" >&5
+printf %s "checking for -mprefer-vector-width=128 in testing... " >&6; }
+if test ${libc_cv_test_cc_mprefer_vector_width+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if { ac_try='${CC-cc} -mprefer-vector-width=128 -xc /dev/null -S -o /dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ libc_cv_test_cc_mprefer_vector_width=yes
+else case e in #(
+ e) libc_cv_test_cc_mprefer_vector_width=no ;;
+esac
+fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_test_cc_mprefer_vector_width" >&5
+printf "%s\n" "$libc_cv_test_cc_mprefer_vector_width" >&6; }
+
+CC="$saved_CC"
+
+fi
+
config_vars="$config_vars
config-cflags-mprefer-vector-width = $libc_cv_cc_mprefer_vector_width"
@@ -66,34 +99,73 @@ if test x"$build_mathvec" = xnotset; then
build_mathvec=yes
fi
+test_enable_cet=$enable_cet
if test $enable_cet != no; then
# Check if CET can be enabled.
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether CET can be enabled" >&5
+ conftest_code="
+#if !defined __CET__ || __CET__ != 3
+# error CET is not available.
+#endif
+"
+
+cat > conftest.c <<EOF
+$conftest_code
+EOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether CET can be enabled" >&5
printf %s "checking whether CET can be enabled... " >&6; }
if test ${libc_cv_x86_cet_available+y}
then :
printf %s "(cached) " >&6
else case e in #(
- e) cat > conftest.c <<EOF
-#if !defined __CET__ || __CET__ != 3
-# error CET isn't available.
-#endif
-EOF
- if { ac_try='${CC-cc} -c $CFLAGS -fcf-protection -include cet.h conftest.c 1>&5'
+ e) if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c -fcf-protection -include cet.h conftest.c -o conftest 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- libc_cv_x86_cet_available=yes
- else
- libc_cv_x86_cet_available=no
- fi
- rm -rf conftest* ;;
+ test $ac_status = 0; }; }
+ then
+ libc_cv_x86_cet_available=yes
+ else
+ libc_cv_x86_cet_available=no
+ fi
+ ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_cet_available" >&5
printf "%s\n" "$libc_cv_x86_cet_available" >&6; }
+if test "$TEST_CC" = "$CC"; then
+ libc_cv_test_x86_cet_available=$libc_cv_x86_cet_available
+else
+
+saved_CC="$CC"
+CC="$TEST_CC"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether CET can be enabled in testing" >&5
+printf %s "checking whether CET can be enabled in testing... " >&6; }
+if test ${libc_cv_test_x86_cet_available+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c -fcf-protection -include cet.h conftest.c -o conftest 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ libc_cv_test_x86_cet_available=yes
+ else
+ libc_cv_test_x86_cet_available=no
+ fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_test_x86_cet_available" >&5
+printf "%s\n" "$libc_cv_test_x86_cet_available" >&6; }
+
+CC="$saved_CC"
+
+fi
+rm -f conftest*
+ test_enable_cet=$libc_cv_test_x86_cet_available
if test $libc_cv_x86_cet_available != yes; then
as_fn_error $? "$CC doesn't support CET" "$LINENO" 5
fi
@@ -139,31 +211,75 @@ config_vars="$config_vars
enable-cet = $enable_cet"
# Check if -mamx-tile works properly.
+check_x86_have_amx_tile ()
+{
+ eval $1=no
+ if grep -q __builtin_ia32_ldtilecfg conftest; then
+ eval $1=yes
+ fi
+}
+
+conftest_code="
+#include <x86intrin.h>
+"
+
+cat > conftest.c <<EOF
+$conftest_code
+EOF
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -mamx-tile works properly" >&5
printf %s "checking whether -mamx-tile works properly... " >&6; }
if test ${libc_cv_x86_have_amx_tile+y}
then :
printf %s "(cached) " >&6
else case e in #(
- e) cat > conftest.c <<EOF
-#include <x86intrin.h>
-EOF
- libc_cv_x86_have_amx_tile=no
- if { ac_try='${CC-cc} -E $CFLAGS -mamx-tile conftest.c > conftest.i'
+ e) if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -E -mamx-tile conftest.c -o conftest 1>&5'
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
(eval $ac_try) 2>&5
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- if grep -q __builtin_ia32_ldtilecfg conftest.i; then
- libc_cv_x86_have_amx_tile=yes
- fi
- fi
- rm -rf conftest* ;;
+ test $ac_status = 0; }; }
+ then
+ check_x86_have_amx_tile libc_cv_x86_have_amx_tile
+ else
+ libc_cv_x86_have_amx_tile=no
+ fi
+ ;;
esac
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_x86_have_amx_tile" >&5
printf "%s\n" "$libc_cv_x86_have_amx_tile" >&6; }
+if test "$TEST_CC" = "$CC"; then
+ libc_cv_test_x86_have_amx_tile=$libc_cv_x86_have_amx_tile
+else
+
+saved_CC="$CC"
+CC="$TEST_CC"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -mamx-tile works properly in testing" >&5
+printf %s "checking whether -mamx-tile works properly in testing... " >&6; }
+if test ${libc_cv_test_x86_have_amx_tile+y}
+then :
+ printf %s "(cached) " >&6
+else case e in #(
+ e) if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -E -mamx-tile conftest.c -o conftest 1>&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ check_x86_have_amx_tile libc_cv_test_x86_have_amx_tile
+ else
+ libc_cv_test_x86_have_amx_tile=no
+ fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_test_x86_have_amx_tile" >&5
+printf "%s\n" "$libc_cv_test_x86_have_amx_tile" >&6; }
+
+CC="$saved_CC"
+
+fi
+rm -f conftest*
config_vars="$config_vars
have-mamx-tile = $libc_cv_x86_have_amx_tile"
diff --git a/sysdeps/x86_64/configure.ac b/sysdeps/x86_64/configure.ac
index c7b6854..fcf457d 100644
--- a/sysdeps/x86_64/configure.ac
+++ b/sysdeps/x86_64/configure.ac
@@ -2,11 +2,14 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/x86_64.
dnl Check if -mprefer-vector-width=128 works.
-AC_CACHE_CHECK(-mprefer-vector-width=128, libc_cv_cc_mprefer_vector_width, [dnl
-LIBC_TRY_CC_OPTION([-mprefer-vector-width=128],
- [libc_cv_cc_mprefer_vector_width=yes],
- [libc_cv_cc_mprefer_vector_width=no])
-])
+LIBC_TRY_CC_AND_TEST_CC_OPTION([for -mprefer-vector-width=128],
+ [-mprefer-vector-width=128],
+ libc_cv_cc_mprefer_vector_width,
+ [libc_cv_cc_mprefer_vector_width=yes],
+ [libc_cv_cc_mprefer_vector_width=no],
+ libc_cv_test_cc_mprefer_vector_width,
+ [libc_cv_test_cc_mprefer_vector_width=yes],
+ [libc_cv_test_cc_mprefer_vector_width=no])
LIBC_CONFIG_VAR([config-cflags-mprefer-vector-width],
[$libc_cv_cc_mprefer_vector_width])
@@ -18,21 +21,24 @@ if test x"$build_mathvec" = xnotset; then
build_mathvec=yes
fi
+test_enable_cet=$enable_cet
if test $enable_cet != no; then
# Check if CET can be enabled.
- AC_CACHE_CHECK(whether CET can be enabled,
- libc_cv_x86_cet_available, [dnl
-cat > conftest.c <<EOF
+ conftest_code="
#if !defined __CET__ || __CET__ != 3
-# error CET isn't available.
+# error CET is not available.
#endif
-EOF
- if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS -fcf-protection -include cet.h conftest.c 1>&AS_MESSAGE_LOG_FD); then
- libc_cv_x86_cet_available=yes
- else
- libc_cv_x86_cet_available=no
- fi
- rm -rf conftest*])
+"
+ LIBC_TRY_CC_AND_TEST_CC_COMMAND([whether CET can be enabled],
+ [$conftest_code],
+ [-c -fcf-protection -include cet.h],
+ libc_cv_x86_cet_available,
+ [libc_cv_x86_cet_available=yes],
+ [libc_cv_x86_cet_available=no],
+ libc_cv_test_x86_cet_available,
+ [libc_cv_test_x86_cet_available=yes],
+ [libc_cv_test_x86_cet_available=no])
+ test_enable_cet=$libc_cv_test_x86_cet_available
if test $libc_cv_x86_cet_available != yes; then
AC_MSG_ERROR([$CC doesn't support CET])
fi
@@ -62,18 +68,26 @@ fi
LIBC_CONFIG_VAR([enable-cet], [$enable_cet])
# Check if -mamx-tile works properly.
-AC_CACHE_CHECK(whether -mamx-tile works properly,
- libc_cv_x86_have_amx_tile, [dnl
-cat > conftest.c <<EOF
+check_x86_have_amx_tile ()
+{
+ eval $1=no
+ if grep -q __builtin_ia32_ldtilecfg conftest; then
+ eval $1=yes
+ fi
+}
+
+conftest_code="
#include <x86intrin.h>
-EOF
- libc_cv_x86_have_amx_tile=no
- if AC_TRY_COMMAND(${CC-cc} -E $CFLAGS -mamx-tile conftest.c > conftest.i); then
- if grep -q __builtin_ia32_ldtilecfg conftest.i; then
- libc_cv_x86_have_amx_tile=yes
- fi
- fi
- rm -rf conftest*])
+"
+LIBC_TRY_CC_AND_TEST_CC_COMMAND([whether -mamx-tile works properly],
+ [$conftest_code],
+ [-E -mamx-tile],
+ libc_cv_x86_have_amx_tile,
+ [check_x86_have_amx_tile libc_cv_x86_have_amx_tile],
+ [libc_cv_x86_have_amx_tile=no],
+ libc_cv_test_x86_have_amx_tile,
+ [check_x86_have_amx_tile libc_cv_test_x86_have_amx_tile],
+ [libc_cv_test_x86_have_amx_tile=no])
LIBC_CONFIG_VAR([have-mamx-tile], [$libc_cv_x86_have_amx_tile])
# Check if -mapxf is enabled.