Building the current coreutils on GNU/kFreeBSD 7, I get link errors: CCLD src/cksum src/cksum-cksum.o: In function `pclmul_supported': /home/bruno/coreutils-2023-08-13/build-64/../src/cksum.c:149: undefined reference to `__builtin_cpu_supports' /home/bruno/coreutils-2023-08-13/build-64/../src/cksum.c:150: undefined reference to `__builtin_cpu_supports' collect2: error: ld returned 1 exit status make[2]: *** [src/cksum] Error 1 CCLD src/wc src/wc.o: In function `avx2_supported': /home/bruno/coreutils-2023-08-13/build-64/../src/wc.c:150: undefined reference to `__builtin_cpu_supports' collect2: error: ld returned 1 exit status make[2]: *** [src/wc] Error 1
The reason is that the __builtin_cpu_supports function does not exist (since the gcc version is 4.7.2 and __builtin_cpu_supports was only introduced in gcc 4.8), but the configure test succeeds: Compiling this file =========================== foo.c =========================== #include <x86intrin.h> int main (void) { return __builtin_cpu_supports ("pclmul"); } ============================================================= merely produces warnings: $ gcc -c -Wall foo.c foo.c: In function ‘main’: foo.c:6:3: warning: implicit declaration of function ‘__builtin_cpu_supports’ [-Wimplicit-function-declaration] The attached patch fixes it.
>From a57d40e3f6997845ce88be6f40813b1b26cb6e16 Mon Sep 17 00:00:00 2001 From: Bruno Haible <br...@clisp.org> Date: Mon, 14 Aug 2023 01:45:39 +0200 Subject: [PATCH] cksum,wc: Fix link errors with gcc < 4.8 * configure.ac: Attempt to link, not only compile, the test programs with __builtin_cpu_supports. --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 786ce81a5..5e5a55dab 100644 --- a/configure.ac +++ b/configure.ac @@ -519,7 +519,7 @@ ac_c_werror_flag=$cu_save_c_werror_flag ac_save_CFLAGS=$CFLAGS CFLAGS="-mavx -mpclmul $CFLAGS" AC_MSG_CHECKING([if pclmul intrinsic exists]) -AC_COMPILE_IFELSE( +AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <x86intrin.h> @@ -548,7 +548,7 @@ CFLAGS=$ac_save_CFLAGS CFLAGS="-mavx2 $CFLAGS" AC_MSG_CHECKING([if avx2 intrinstics exists]) -AC_COMPILE_IFELSE( +AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <x86intrin.h> -- 2.34.1