diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2024-12-06 04:44:05 +0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2024-12-11 18:31:00 +0800 |
commit | b79f25753346a577c9ba0a3dca69bd9d9d72a020 (patch) | |
tree | b126cf018240a668e5bb8b742029fd9632745c15 /sysdeps | |
parent | 4d9a4c02f9327338bb8dc890d26fbbeef956ba1b (diff) | |
download | glibc-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-x | sysdeps/x86_64/configure | 172 | ||||
-rw-r--r-- | sysdeps/x86_64/configure.ac | 68 |
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. |