From 9b8ac9db32f245a917c50103cc02154dac30ba70 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Sat, 12 Sep 2020 05:16:21 +0530 Subject: project tests: Verify that UWP cross binaries use the right arch This is a test for https://github.com/mesonbuild/meson/pull/7021, to verify that `link.exe` uses the correct architecture when targeting ARM64. Can be extended to other cross targets later. --- .../check_arch.py | 32 ++++++++++++++++++++++ .../meson.build | 6 ++++ 2 files changed, 38 insertions(+) create mode 100644 test cases/common/233 link depends indexed custom target/check_arch.py (limited to 'test cases/common') diff --git a/test cases/common/233 link depends indexed custom target/check_arch.py b/test cases/common/233 link depends indexed custom target/check_arch.py new file mode 100644 index 0000000..2e09f35 --- /dev/null +++ b/test cases/common/233 link depends indexed custom target/check_arch.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +import re +import sys +import shutil +import subprocess + +exepath = sys.argv[1] +want_arch = sys.argv[2] +dummy_output = sys.argv[3] + +with open(dummy_output, 'w') as f: + f.write('') + +if not shutil.which('dumpbin'): + print('dumpbin not found, skipping') + sys.exit(0) + +out = subprocess.check_output(['dumpbin', '/HEADERS', exepath], + universal_newlines=True) +for line in out.split('\n'): + m = re.match(r'.* machine \(([A-Za-z0-9]+)\)$', line) + if m: + arch = m.groups()[0].lower() + +if arch == 'arm64': + arch = 'aarch64' +elif arch == 'x64': + arch = 'x86_64' + +if arch != want_arch: + raise RuntimeError('Wanted arch {} but exe uses {}'.format(want_arch, arch)) diff --git a/test cases/common/233 link depends indexed custom target/meson.build b/test cases/common/233 link depends indexed custom target/meson.build index 5c066e9..c41c4c1 100644 --- a/test cases/common/233 link depends indexed custom target/meson.build +++ b/test cases/common/233 link depends indexed custom target/meson.build @@ -15,5 +15,11 @@ exe = executable('foo', 'foo.c', link_depends: dep_files[1], c_args: ['-DDEPFILE="' + dep_files[0].full_path()+ '"']) +check_arch = find_program('check_arch.py') +custom_target('check-arch', + command: [check_arch, exe, host_machine.cpu_family(), '@OUTPUT@'], + build_by_default: true, + output: 'dummy.txt') + # check that dep_file1 exists, which means that link_depends target ran test('runtest', exe) -- cgit v1.1