public inbox for [email protected]
help / color / mirror / Atom feedFrom: Andrew Dunstan <[email protected]>
To: Dave Cramer <[email protected]>
Cc: Andres Freund <[email protected]>
Cc: Anthony Roberts <[email protected]>
Cc: Daniel Gustafsson <[email protected]>
Cc: Lina Iyer <[email protected]>
Cc: Michael Paquier <[email protected]>
Cc: Mike Holmes <[email protected]>
Cc: Peter Eisentraut <[email protected]>
Cc: PostgreSQL Hackers <[email protected]>
Cc: Thomas Munro <[email protected]>
Cc: Tom Lane <[email protected]>
Subject: Re: [PATCH] Add native windows on arm64 support
Date: Wed, 31 Jan 2024 10:20:54 -0500
Message-ID: <[email protected]> (raw)
In-Reply-To: <CADK3HHJzYfiLXLGPq5F89ZXcvBwG6kE2wA9a=G5C3APugs51nA@mail.gmail.com>
References: <CADK3HH+T0rQ58sYp0NnvkvopcEHA74Zmg=z7J5=skRrX+odnYw@mail.gmail.com>
<[email protected]>
<CADK3HHK4RVz8oQXiQ_bYiUx1ZXWNbfF+=r5kJ8hhfU8+MD1DOQ@mail.gmail.com>
<CAC1bJ4-tu8Ea0+D6sHdC_HuOSGbw6upFkr5B=eq_m0-2yf_-cg@mail.gmail.com>
<CADK3HHJXwHLHk12m99TQ+cOF5BuJr2=C4xOhVFXmGEPLfC+7XA@mail.gmail.com>
<[email protected]>
<CADK3HHKs8PkPSU7vGKxcVq3qcHv95YDyOXz6DEGoS1o=tz7QRQ@mail.gmail.com>
<[email protected]>
<[email protected]>
<CADK3HHJgTqi7ZeKhBvegTk1=rzDYfGgEJqZN-hNMvQPAJ6R3PA@mail.gmail.com>
<[email protected]>
<CADK3HH+0A19mqiOutuGHH-jWWdeobcenK+v2cc5uDRuvZW5MOw@mail.gmail.com>
<[email protected]>
<CADK3HHK1e2CEa5fYReZHt-iKcZtEMTZUnNxXoeTCnzyCfcG9Ew@mail.gmail.com>
<[email protected]>
<CADK3HHJzYfiLXLGPq5F89ZXcvBwG6kE2wA9a=G5C3APugs51nA@mail.gmail.com>
On 2024-01-30 Tu 17:54, Dave Cramer wrote:
>
>
>
> On Tue, Jan 30, 2024 at 4:56 PM Andrew Dunstan <[email protected]>
> wrote:
>
>
> On 2024-01-30 Tu 09:50, Dave Cramer wrote:
>>
>>
>> On Tue, 30 Jan 2024 at 08:38, Andrew Dunstan
>> <[email protected]> wrote:
>>
>>
>> On 2024-01-29 Mo 11:20, Dave Cramer wrote:
>>>
>>> Dave Cramer
>>> www.postgres.rocks <http://www.postgres.rocks;
>>>
>>>
>>> On Mon, 29 Jan 2024 at 11:16, Andrew Dunstan
>>> <[email protected]> wrote:
>>>
>>>
>>> On 2024-01-26 Fr 09:18, Dave Cramer wrote:
>>>>
>>>>
>>>> On Fri, 26 Jan 2024 at 07:36, Andrew Dunstan
>>>> <[email protected]> wrote:
>>>>
>>>>
>>>> On 2024-01-25 Th 20:32, Michael Paquier wrote:
>>>> > On Thu, Jan 25, 2024 at 04:52:30PM -0500, Dave
>>>> Cramer wrote:
>>>> >> On Thu, 25 Jan 2024 at 16:32, Andrew Dunstan
>>>> <[email protected]> wrote:
>>>> >>> On 2024-01-25 Th 16:17, Dave Cramer wrote:
>>>> >>> Yeah, I think the default Developer Command
>>>> Prompt for VS2022 is set up
>>>> >>> for x86 builds. AIUI you should start by
>>>> executing "vcvarsall x64_arm64".
>>>> >> Yup, now I'm in the same state you are
>>>> > Wait a minute here. Based on [1], x64_arm64 means
>>>> you can use a x64
>>>> > host and you'll be able to produce ARM64 builds,
>>>> still these will not
>>>> > be able to run on the host where they were built.
>>>> How much of the
>>>> > patch posted upthread is required to produce such
>>>> builds? Basically
>>>> > everything from it, I guess, so as build
>>>> dependencies can be
>>>> > satisfied?
>>>> >
>>>> > [1]:
>>>> https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170
>>>>
>>>>
>>>> If you look at the table here x86 and x64 are the
>>>> only supported host
>>>> architectures. But that's OK, the x64 binaries will
>>>> run on arm64 (W11
>>>> ARM64 has x64 emulation builtin). If that didn't
>>>> work Dave and I would
>>>> not have got as far as we have. But you want the
>>>> x64_arm64 argument to
>>>> vcvarsall so you will get ARM64 output.
>>>>
>>>>
>>>> I've rebuilt it using x64_arm64 and with the attached
>>>> (very naive patch) and I still get an x64 binary :(
>>>
>>>
>>> With this patch I still get a build error, but it's
>>> different :-)
>>>
>>>
>>> [1406/2088] "link" @src/backend/postgres.exe.rsp
>>> FAILED: src/backend/postgres.exe src/backend/postgres.pdb
>>> "link" @src/backend/postgres.exe.rsp
>>> Creating library src\backend\postgres.exe.lib
>>>
>>> storage_lmgr_s_lock.c.obj : error LNK2019: unresolved
>>> external symbol spin_delay referenced in function
>>> perform_spin_delay
>>>
>>> src\backend\postgres.exe : fatal error LNK1120: 1
>>> unresolved externals
>>>
>>>
>>> Did you add the latest lock.patch ?
>>>
>>>
>>
>>
>> I'm a bit confused about exactly what needs to be applied.
>> Can you supply a complete patch to be applied to a pristine
>> checkout that will let me build?
>>
>>
>> cheers
>>
>>
>> See attached.
>>
>>
>
> No, that is what is giving me the error shown above (just tried
> again to be certain). And it's not surprising, as patch 2 #ifdef's
> out the definition of spin_delay().
>
> If you can get a complete build with these patches then I suspect
> you're not doing a proper ARM64 build.
>
>
> Okay I will look when I get home in a week
I made some progress. The attached is mostly taken from
<https://postgr.es/m/[email protected];
With it applied I was able to get a successful build using the buildfarm
client. However, there are access violations when running some tests, so
there is still some work to do, apparently.
cheers
andrew
--
Andrew Dunstan
EDB:https://www.enterprisedb.com
Attachments:
[text/x-patch] arm64.patch (3.9K, ../[email protected]/3-arm64.patch)
download | inline diff:
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index ed5b285a5e..d9b8649dab 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -4150,7 +4150,7 @@ make: *** [postgres] Error 1
<sect3 id="install-windows-full-64-bit">
<title>Special Considerations for 64-Bit Windows</title>
<para>
- PostgreSQL will only build for the x64 architecture on 64-bit Windows.
+ PostgreSQL will only build for the x64 and ARM64 architecture on 64-bit Windows.
</para>
<para>
Mixing 32- and 64-bit versions in the same build tree is not supported.
diff --git a/meson.build b/meson.build
index 8ed51b6aae..14aea924ec 100644
--- a/meson.build
+++ b/meson.build
@@ -2046,8 +2046,11 @@ int main(void)
elif host_cpu == 'arm' or host_cpu == 'aarch64'
prog = '''
+#ifdef _MSC_VER
+#include <intrin.h>
+#else
#include <arm_acle.h>
-
+#endif
int main(void)
{
unsigned int crc = 0;
@@ -2061,7 +2064,11 @@ int main(void)
}
'''
- if cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd without -march=armv8-a+crc',
+ if cc.get_id() == 'msvc'
+ cdata.set('USE_ARMV8_CRC32C', false)
+ cdata.set('USE_ARMV8_CRC32C_WITH_RUNTIME_CHECK', 1)
+ have_optimized_crc = true
+ elif cc.links(prog, name: '__crc32cb, __crc32ch, __crc32cw, and __crc32cd without -march=armv8-a+crc',
args: test_c_args)
# Use ARM CRC Extension unconditionally
cdata.set('USE_ARMV8_CRC32C', 1)
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 69582f4ae7..44abd42691 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -707,15 +707,31 @@ typedef LONG slock_t;
#define SPIN_DELAY() spin_delay()
-/* If using Visual C++ on Win64, inline assembly is unavailable.
- * Use a _mm_pause intrinsic instead of rep nop.
+/*
+ * If using Visual C++ on Win64, inline assembly is unavailable.
+ * Use architecture specific intrinsics.
*/
#if defined(_WIN64)
+/*
+ * For Arm64, use __isb intrinsic. See aarch64 inline assembly definition for details.
+ */
+#ifdef _M_ARM64
+static __forceinline void
+spin_delay(void)
+{
+ /* Reference: https://learn.microsoft.com/en-us/cpp/intrinsics/arm64-intrinsics#BarrierRestrictions */
+ __isb(_ARM64_BARRIER_SY);
+}
+#else
+/*
+ * For x64, use _mm_pause intrinsic instead of rep nop.
+ */
static __forceinline void
spin_delay(void)
{
_mm_pause();
}
+#endif
#else
static __forceinline void
spin_delay(void)
diff --git a/src/port/pg_crc32c_armv8.c b/src/port/pg_crc32c_armv8.c
index d47d838c50..f18903a68a 100644
--- a/src/port/pg_crc32c_armv8.c
+++ b/src/port/pg_crc32c_armv8.c
@@ -14,7 +14,9 @@
*/
#include "c.h"
+#ifndef _MSC_VER
#include <arm_acle.h>
+#endif
#include "port/pg_crc32c.h"
diff --git a/src/tools/msvc_gendef.pl b/src/tools/msvc_gendef.pl
index 12c49ed265..dfb26916bd 100644
--- a/src/tools/msvc_gendef.pl
+++ b/src/tools/msvc_gendef.pl
@@ -120,9 +120,9 @@ sub writedef
{
my $isdata = $def->{$f} eq 'data';
- # Strip the leading underscore for win32, but not x64
+ # Strip the leading underscore for win32, but not x64 and aarch64
$f =~ s/^_//
- unless ($arch eq "x86_64");
+ unless ($arch eq "x86_64" || $arch eq "aarch64");
# Emit just the name if it's a function symbol, or emit the name
# decorated with the DATA option for variables.
@@ -143,7 +143,7 @@ sub writedef
sub usage
{
die("Usage: msvc_gendef.pl --arch <arch> --deffile <deffile> --tempdir <tempdir> files-or-directories\n"
- . " arch: x86 | x86_64\n"
+ . " arch: x86 | x86_64 | aarch64\n"
. " deffile: path of the generated file\n"
. " tempdir: directory for temporary files\n"
. " files or directories: object files or directory containing object files\n"
@@ -160,7 +160,7 @@ GetOptions(
'tempdir:s' => \$tempdir,) or usage();
usage("arch: $arch")
- unless ($arch eq 'x86' || $arch eq 'x86_64');
+ unless ($arch eq 'x86' || $arch eq 'x86_64' || $arch eq 'aarch64');
my @files;
view thread (120+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
Subject: Re: [PATCH] Add native windows on arm64 support
In-Reply-To: <[email protected]>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox