From c68a5d4a57e615c237c51a901fc4f12c6dd371bd Mon Sep 17 00:00:00 2001 From: YexuanXiao Date: Mon, 4 May 2026 23:01:10 +0800 Subject: [PATCH] Refactor build script to fix x64 binary build --- ci/build-win32.yml | 3 ++- config.gypi | 1 - gyp_library.py | 52 ++++++++++++---------------------------------- main.gyp | 24 ++++++++++++--------- 4 files changed, 29 insertions(+), 51 deletions(-) delete mode 100644 config.gypi diff --git a/ci/build-win32.yml b/ci/build-win32.yml index 27ffea7..364705f 100644 --- a/ci/build-win32.yml +++ b/ci/build-win32.yml @@ -13,7 +13,8 @@ steps: - task: MSBuild@1 inputs: solution: out/main.sln - msbuildArchitecture: $(arch) + platform: ${{ replace(variables['arch'], 'arm64', 'ARM64') }} + configuration: Default - task: 1ES.PublishPipelineArtifact@1 displayName: 'Publish DLL' diff --git a/config.gypi b/config.gypi deleted file mode 100644 index 3f63703..0000000 --- a/config.gypi +++ /dev/null @@ -1 +0,0 @@ -{'variables': {'target_arch': 'x64'}} \ No newline at end of file diff --git a/gyp_library.py b/gyp_library.py index f32cbf4..11823d7 100644 --- a/gyp_library.py +++ b/gyp_library.py @@ -1,50 +1,24 @@ #!/usr/bin/env python3 -from __future__ import print_function -import ast import os -import pprint import sys root = os.path.dirname(__file__) - sys.path.insert(0, os.path.join(root, 'node-gyp', 'gyp', 'pylib')) import gyp -def edit_config_gypi(arch): - config_gypi = os.path.join(root, 'config.gypi') - with open(config_gypi, 'r') as f: - content = f.read() - config = ast.literal_eval(content) - v = config['variables'] - v['target_arch'] = arch - with open(config_gypi, 'w+') as f: - f.write(pprint.pformat(config, indent=2)) - -def edit_main_gyp(arch): - main_gyp = os.path.join(root, 'main.gyp') - with open(main_gyp, 'r') as f: - content = f.read() - config = ast.literal_eval(content) - v = config['target_defaults'] - v['msvs_configuration_platform'] = 'ARM64' - with open(main_gyp, 'w+') as f: - f.write(pprint.pformat(config, indent=2)) - -def run_gyp(arch, args): - edit_config_gypi(arch) - if arch == 'arm64': - edit_main_gyp(arch) - - args.append('main.gyp') - args.extend(['-I', 'config.gypi']) - args.append('--depth=.') - args.append('--generator-output=out') - args.append('-Dlibrary=shared_library') - - rc = gyp.main(args) - if rc != 0: - print('Error running GYP') - sys.exit(rc) +def run_gyp(arch, extra_args): + args = list(extra_args) + args.extend([ + 'main.gyp', + '--depth=.', + '--generator-output=out', + '-Dlibrary=shared_library', + f'-Dtarget_arch={arch}', + ]) + + rc = gyp.main(args) + if rc: + sys.exit(rc) if __name__ == '__main__': diff --git a/main.gyp b/main.gyp index cc8c30e..1af2bc4 100644 --- a/main.gyp +++ b/main.gyp @@ -35,7 +35,7 @@ 'BufferSecurityCheck': 'true', 'ExceptionHandling': 1, # /EHsc 'EnableFunctionLevelLinking': 'true', - 'Optimization': 3, # /Ox, full optimization + 'Optimization': 3, # /Ox, full optimization }, }, 'libraries': [ @@ -43,7 +43,15 @@ '-lruntimeobject.lib', '-lshlwapi.lib', '-lonecore.lib', - ] + ], + 'conditions': [ + ['target_arch=="x64"', { + 'msvs_configuration_platform': 'x64', + }], + ['target_arch=="arm64"', { + 'msvs_configuration_platform': 'ARM64', + }], + ], }], ], }, @@ -57,14 +65,12 @@ [ 'OS=="win"', { 'conditions': [ ['target_arch=="x64"', { - 'TargetMachine' : 17, # /MACHINE:X64 - 'defines': [ + 'defines': [ 'DLL_UUID="1C6DF0C0-192A-4451-BE36-6A59A86A692E"', ], }], ['target_arch=="arm64"', { - 'TargetMachine' : 18, # /MACHINE:ARM64 https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.vcprojectengine.machinetypeoption?view=visualstudiosdk-2022 - 'defines': [ + 'defines': [ 'DLL_UUID="F5EA5883-1DA8-4A05-864A-D5DE2D2B2854"', ], }], @@ -82,14 +88,12 @@ [ 'OS=="win"', { 'conditions': [ ['target_arch=="x64"', { - 'TargetMachine' : 17, # /MACHINE:X64 - 'defines': [ + 'defines': [ 'DLL_UUID="799F4F7E-5934-4001-A74C-E207F44F05B8"', ], }], ['target_arch=="arm64"', { - 'TargetMachine' : 18, # /MACHINE:ARM64 - 'defines': [ + 'defines': [ 'DLL_UUID="7D34756D-32DD-4EE6-B99F-2691C0DAD875"', ], }],