summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/distutils/msvc9compiler.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 6934e96..b2b52e5 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -54,6 +54,7 @@ else:
PLAT_TO_VCVARS = {
'win32' : 'x86',
'win-amd64' : 'amd64',
+ 'win-arm64' : 'arm64',
}
class Reg:
@@ -342,7 +343,7 @@ class MSVCCompiler(CCompiler) :
if plat_name is None:
plat_name = get_platform()
# sanity check for platforms to prevent obscure errors later.
- ok_plats = 'win32', 'win-amd64'
+ ok_plats = 'win32', 'win-amd64', 'win-arm64'
if plat_name not in ok_plats:
raise DistutilsPlatformError("--plat-name must be one of %s" %
(ok_plats,))
@@ -371,6 +372,9 @@ class MSVCCompiler(CCompiler) :
vc_env = query_vcvarsall(VERSION, plat_spec)
self.__paths = vc_env['path'].split(os.pathsep)
+ if plat_name == 'win-arm64':
+ self.__paths = (
+ vc_env['path'].replace('HostX64', 'HostX86').split(os.pathsep))
os.environ['lib'] = vc_env['lib']
os.environ['include'] = vc_env['include']
@@ -385,6 +389,12 @@ class MSVCCompiler(CCompiler) :
self.lib = self.find_exe("lib.exe")
self.rc = self.find_exe("rc.exe") # resource compiler
self.mc = self.find_exe("mc.exe") # message compiler
+ if plat_name == 'win-arm64':
+ self.cc = self.cc.replace('HostX64', 'Hostx86')
+ self.linker = self.linker.replace('HostX64', 'Hostx86')
+ self.lib = self.lib.replace('HostX64', 'Hostx86')
+ self.rc = self.rc.replace('x64', 'arm64')
+ self.mc = self.mc.replace('x64', 'arm64')
#self.set_path_env_var('lib')
#self.set_path_env_var('include')
@@ -634,6 +644,17 @@ class MSVCCompiler(CCompiler) :
if extra_postargs:
ld_args.extend(extra_postargs)
+ if get_platform() == 'win-arm64':
+ ld_args_arm = []
+ for ld_arg in ld_args:
+ # VS tries to use the x86 linker
+ ld_arg_arm = ld_arg.replace(r'\um\x86', r'\um\arm64')
+ # A larger memory address is required on ARM64
+ ld_arg_arm = ld_arg_arm.replace("0x1", "0x10")
+ ld_args_arm += [ld_arg_arm]
+
+ ld_args = list(ld_args_arm)
+
self.mkpath(os.path.dirname(output_filename))
try:
self.spawn([self.linker] + ld_args)