The build farm success because the configure result: checking which CRC-32C implementation to use... slicing-by-8
My test machine's configure result: checking which CRC-32C implementation to use... ARMv8 CRC instructions with runtime check More info about the machine: uname -a: Linux xxx 4.18.0-348.20.1.el7.aarch64 #1 SMP Wed Apr 13 20:57:50 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux cat /usr/include/bits/hwcap.h /* Defines for bits in AT_HWCAP. Copyright (C) 2012 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ #ifndef _SYS_AUXV_H # error "Never include <bits/hwcap.h> directly; use <sys/auxv.h> instead." #endif /* No bits defined for this architecture. */ rpm -qa | grep glibc glibc-headers-2.17-326.el7_9.aarch64 glibc-common-2.17-326.el7_9.aarch64 glibc-devel-2.17-326.el7_9.aarch64 glibc-2.17-326.el7_9.aarch64 /etc/redhat-release CentOS Linux release 7.6.1810 (AltArch) both __linux__ and __aarch64__ is defined May be is better to always include "asm/hwcap.h"? or check HWCAP_CRC32 for pg_crc32c_armv8_choose.c and HWCAP_SVE for pg_popcount_aarch64.c Steven Niu <[email protected]> 于2025年11月17日周一 11:56写道: > Hi, John, Thomas, > > IvorySQL team found the same build issue on our building machine when we > built IvorySQL code which is based on PG 18.0. > > pg_crc32c_armv8_choose.c:58:32:error:'HWCAP CRC32' undeclared(first use in > this function) > 58 | return (getauxval(AT_HWCAP) & HWCAP_CRC32) != θ; > | > ^~~~~~~~~~~ > > Then we tried to build source code of PG 18.1 and got the same failure > result. > > I made some investigation to test the following code in > src/port/pg_crc32c_armv8_choose.c > > +#if defined(HAVE_ELF_AUX_INFO) || defined(HAVE_GETAUXVAL) > +#include <sys/auxv.h> > +#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32) > +#include <asm/hwcap.h> > +#endif > > // 1. Test defined(HAVE_ELF_AUX_INFO) || defined(HAVE_GETAUXVAL) > // Got #warning "CONDITION IS FALSE" > echo '#if defined(HAVE_ELF_AUX_INFO) || defined(HAVE_GETAUXVAL) > #warning "CONDITION IS TRUE" > #else > #warning "CONDITION IS FALSE" > #endif' | gcc -E -x c - -o - > > // 2. Test defined(__linux__) > // Got true > echo '#if defined(__linux__) > #warning "CONDITION IS TRUE" > #else > #warning "CONDITION IS FALSE" > #endif' | gcc -E -x c - -o - > > // 3. Test !defined(__aarch64__) > // Got false > echo '#if !defined(__aarch64__) > #warning "CONDITION IS TRUE" > #else > #warning "CONDITION IS FALSE" > #endif' | gcc -E -x c - -o - > > // Test !defined(HWCAP2_CRC32) > // Got true > echo '#if !defined(HWCAP2_CRC32) > #warning "CONDITION IS TRUE" > #else > #warning "CONDITION IS FALSE" > #endif' | gcc -E -x c - -o - > > > As a result, hwcap.h has no chance to be included in the building path. > > So, my question is, why we exclude __aarch64__ in the second #if > condition? > > Thanks, > Steven > > ------------------------------ > *From:* John Naylor <[email protected]> > *Sent:* Friday, November 14, 2025 13:06 > *To:* 高增琦 <[email protected]> > *Cc:* PostgreSQL Hackers <[email protected]> > *Subject:* Re: Compile error on the aarch64 platform: Missing asm/hwcap.h > > On Fri, Nov 14, 2025 at 11:02 AM 高增琦 <[email protected]> wrote: > > Compile error on CentOS Linux release 7.6.1810 (AltArch) with the > message “‘HWCAP_CRC32’ undeclared”. > > We still have at least one CentOS 7 aarch64 machine that gets regular > testing (not sure of the reason, since it's been EOL for a year and a > half IIUC), and it builds fine: > > > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=arowana&dt=2025-11-04%2004%3A56%3A57 > > > After modifying the code to add `include <asm/hwcap.h>`, the compilation > succeeded. > > We already have the following, so I'm not sure what you mean (or even > what architecture you're running on): > > #if defined(HAVE_ELF_AUX_INFO) || defined(HAVE_GETAUXVAL) > #include <sys/auxv.h> > #if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32) > #include <asm/hwcap.h> > #endif > #endif > > -- > John Naylor > Amazon Web Services > > > -- GaoZengqi [email protected] [email protected]
