diff --git a/_msbuild.py b/_msbuild.py index 9440010..4830751 100644 --- a/_msbuild.py +++ b/_msbuild.py @@ -88,6 +88,7 @@ class ResourceFile(CSourceFile): CFunction('get_current_package'), CFunction('read_alias_package'), CFunction('broadcast_settings_change'), + CFunction('get_processor_architecture'), source='src/_native', RootNamespace='_native', ) diff --git a/_msbuild_test.py b/_msbuild_test.py index 949a4ec..2b28a4b 100644 --- a/_msbuild_test.py +++ b/_msbuild_test.py @@ -54,6 +54,7 @@ CFunction('get_current_package'), CFunction('read_alias_package'), CFunction('broadcast_settings_change'), + CFunction('get_processor_architecture'), source='src/_native', ), DllPackage('_shellext_test', diff --git a/src/_native/misc.cpp b/src/_native/misc.cpp index 37b7320..070c0cf 100644 --- a/src/_native/misc.cpp +++ b/src/_native/misc.cpp @@ -233,4 +233,25 @@ PyObject *broadcast_settings_change(PyObject *, PyObject *, PyObject *) { return Py_GetConstant(Py_CONSTANT_NONE); } +typedef enum { + CPU_X86 = 0, + CPU_X86_64 = 9, + CPU_ARM = 5, + CPU_ARM64 = 12, + CPU_UNKNOWN = 0xffff +} CpuArchitecture; + +PyObject *get_processor_architecture(PyObject *, PyObject *, PyObject *) { + SYSTEM_INFO system_info; + GetNativeSystemInfo(&system_info); + + switch (system_info.wProcessorArchitecture) { + case CPU_X86: return PyUnicode_FromString("-32"); + case CPU_X86_64: return PyUnicode_FromString("-64"); + case CPU_ARM: return PyUnicode_FromString("-arm"); + case CPU_ARM64: return PyUnicode_FromString("-arm64"); + default: return PyUnicode_FromString("-64"); // x86-64 + } +} + } diff --git a/src/manage/commands.py b/src/manage/commands.py index ec57c09..0043492 100644 --- a/src/manage/commands.py +++ b/src/manage/commands.py @@ -443,6 +443,9 @@ def __init__(self, args, root=None): _set_args.add(k) if not self.default_platform: + from _native import get_processor_architecture + LOGGER.debug("Get CPU architecture, its prefix is %s", get_processor_architecture()) + # Currently, we always default to -64. self.default_platform = "-64"