Re: Compile error on the aarch64 platform: Missing asm/hwcap.h
| От | Steven Niu |
|---|---|
| Тема | Re: Compile error on the aarch64 platform: Missing asm/hwcap.h |
| Дата | |
| Msg-id | MN2PR15MB30213F3F00D4CF391498176DA7C9A@MN2PR15MB3021.namprd15.prod.outlook.com обсуждение исходный текст |
| Ответ на | Re: Compile error on the aarch64 platform: Missing asm/hwcap.h (John Naylor <johncnaylorls@gmail.com>) |
| Ответы |
Re: Compile error on the aarch64 platform: Missing asm/hwcap.h
|
| Список | pgsql-hackers |
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 <johncnaylorls@gmail.com>
Sent: Friday, November 14, 2025 13:06
To: 高增琦 <pgf00a@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Subject: Re: Compile error on the aarch64 platform: Missing asm/hwcap.h
Sent: Friday, November 14, 2025 13:06
To: 高增琦 <pgf00a@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Subject: Re: Compile error on the aarch64 platform: Missing asm/hwcap.h
On Fri, Nov 14, 2025 at 11:02 AM 高增琦 <pgf00a@gmail.com> 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
> 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
В списке pgsql-hackers по дате отправления: