From 7f7451fbacf36971bf9d73a0fdd27b9a83a9d90f Mon Sep 17 00:00:00 2001 From: "Serge S. Gulin" Date: Fri, 3 Jan 2025 22:44:23 +0300 Subject: [PATCH] Add support for Windows Aarch64 Co-authored-by: Cheng Shao --- Cabal/src/Distribution/Compat/Environment.hs | 2 +- Cabal/src/Distribution/Simple/Build/PathsModule.hs | 1 + Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs | 5 +++-- cabal-dev-scripts/src/GenPathsModule.hs | 1 + .../src/Distribution/Client/Compat/ExecutablePath.hs | 2 +- changelog.d/pr-10705 | 8 ++++++++ 6 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 changelog.d/pr-10705 diff --git a/Cabal/src/Distribution/Compat/Environment.hs b/Cabal/src/Distribution/Compat/Environment.hs index ffe278bcc54..8cc9d582ad9 100644 --- a/Cabal/src/Distribution/Compat/Environment.hs +++ b/Cabal/src/Distribution/Compat/Environment.hs @@ -63,7 +63,7 @@ setEnv_ key value = withCWString key $ \k -> withCWString value $ \v -> do {- FOURMOLU_DISABLE -} # if defined(i386_HOST_ARCH) # define WINDOWS_CCONV stdcall -# elif defined(x86_64_HOST_ARCH) +# elif defined(x86_64_HOST_ARCH) || defined(aarch64_HOST_ARCH) # define WINDOWS_CCONV ccall # else # error Unknown mingw32 arch diff --git a/Cabal/src/Distribution/Simple/Build/PathsModule.hs b/Cabal/src/Distribution/Simple/Build/PathsModule.hs index 892e5bd384f..dc8348f6396 100644 --- a/Cabal/src/Distribution/Simple/Build/PathsModule.hs +++ b/Cabal/src/Distribution/Simple/Build/PathsModule.hs @@ -51,6 +51,7 @@ generatePathsModule pkg_descr lbi clbi = , Z.zIsWindows = isWindows , Z.zIsI386 = buildArch == I386 , Z.zIsX8664 = buildArch == X86_64 + , Z.zIsAarch64 = buildArch == AArch64 , Z.zNot = not , Z.zManglePkgName = showPkgName , Z.zPrefix = show flat_prefix diff --git a/Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs b/Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs index ad979c42951..a6ecb5005a2 100644 --- a/Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs +++ b/Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs @@ -12,6 +12,7 @@ data Z zIsWindows :: Bool, zIsI386 :: Bool, zIsX8664 :: Bool, + zIsAarch64 :: Bool, zPrefix :: FilePath, zBindir :: FilePath, zLibdir :: FilePath, @@ -278,13 +279,13 @@ render z_root = execWriter $ do tell " c_GetModuleFileName :: Ptr () -> CWString -> Int32 -> IO Int32\n" return () else do - if (zIsX8664 z_root) + if (zIsX8664 z_root || zIsAarch64 z_root) then do tell "foreign import ccall unsafe \"windows.h GetModuleFileNameW\"\n" tell " c_GetModuleFileName :: Ptr () -> CWString -> Int32 -> IO Int32\n" return () else do - tell "-- win32 supported only with I386, X86_64\n" + tell "-- win32 supported only with I386, X86_64, Aarch64\n" tell "c_GetModuleFileName :: Ptr () -> CWString -> Int32 -> IO Int32\n" tell "c_GetModuleFileName = _\n" return () diff --git a/cabal-dev-scripts/src/GenPathsModule.hs b/cabal-dev-scripts/src/GenPathsModule.hs index 46ef779e2af..ca7380c74df 100644 --- a/cabal-dev-scripts/src/GenPathsModule.hs +++ b/cabal-dev-scripts/src/GenPathsModule.hs @@ -32,6 +32,7 @@ $(capture "decls" [d| , zIsWindows :: Bool , zIsI386 :: Bool , zIsX8664 :: Bool + , zIsAarch64 :: Bool , zPrefix :: FilePath , zBindir :: FilePath diff --git a/cabal-install/src/Distribution/Client/Compat/ExecutablePath.hs b/cabal-install/src/Distribution/Client/Compat/ExecutablePath.hs index e805c110d60..fa989a6bd0f 100644 --- a/cabal-install/src/Distribution/Client/Compat/ExecutablePath.hs +++ b/cabal-install/src/Distribution/Client/Compat/ExecutablePath.hs @@ -123,7 +123,7 @@ getExecutablePath = readSymbolicLink $ "/proc/self/exe" # if defined(i386_HOST_ARCH) # define WINDOWS_CCONV stdcall -# elif defined(x86_64_HOST_ARCH) +# elif defined(x86_64_HOST_ARCH) || defined(aarch64_HOST_ARCH) # define WINDOWS_CCONV ccall # else # error Unknown mingw32 arch diff --git a/changelog.d/pr-10705 b/changelog.d/pr-10705 new file mode 100644 index 00000000000..e150428ca27 --- /dev/null +++ b/changelog.d/pr-10705 @@ -0,0 +1,8 @@ +--- +synopsis: 'Add support for Windows Aarch64' +packages: [Cabal, cabal-install] +prs: 10705 +--- + +Adds to preprocessor branches the option to support `aarch64_HOST_ARCH` platform on Windows Aarch64 target. +`ccall` convention is used at Aarch64, same as for `x86_64_HOST_ARCH`. Introduce `zIsAarch64` to make paths generation support Windows Aarch64 target.