1

added Windows target testing

This commit is contained in:
Fabian Hahn 2022-05-29 17:35:18 +01:00 committed by Motiejus Jakštys
parent 72475ee012
commit 6f2ae838cd
6 changed files with 63 additions and 6 deletions

View File

@ -5,6 +5,7 @@ packages:
- qemu-user-static - qemu-user-static
- binfmt-support - binfmt-support
- moreutils - moreutils
- wine-binfmt
sources: sources:
- https://git.sr.ht/~motiejus/bazel-zig-cc - https://git.sr.ht/~motiejus/bazel-zig-cc
environment: environment:

View File

@ -401,8 +401,9 @@ This repository is used on the following (host) platforms:
- `windows_amd64`, a.k.a. `x64`. - `windows_amd64`, a.k.a. `x64`.
The tests are running (CId) on linux-amd64, and are assuming the kernel is The tests are running (CId) on linux-amd64, and are assuming the kernel is
configured to run arm64 binaries. There are two reasonably convenient ways to configured to run `linux_arm64` and `windows_amd64` binaries.
configure arm64 emulation:
There are two reasonably convenient ways to configure `linux_arm64` emulation:
1. Install and configure [`binfmt_misc`][binfmt_misc]: 1. Install and configure [`binfmt_misc`][binfmt_misc]:
``` ```
@ -414,6 +415,11 @@ configure arm64 emulation:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
``` ```
In order to install and configure `windows_amd64` emulation:
```
apt install wine-binfmt
```
## Transient docker environment ## Transient docker environment
A standalone Docker environment to play with bazel-zig-cc: A standalone Docker environment to play with bazel-zig-cc:

View File

@ -51,11 +51,13 @@ zig_toolchains()
register_toolchains( register_toolchains(
# if no `--platform` is specified, these toolchains will be used for # if no `--platform` is specified, these toolchains will be used for
# (linux,darwin)x(amd64,arm64) # (linux,darwin,windows)x(amd64,arm64)
"@zig_sdk//toolchain:linux_amd64_gnu.2.19", "@zig_sdk//toolchain:linux_amd64_gnu.2.19",
"@zig_sdk//toolchain:linux_arm64_gnu.2.28", "@zig_sdk//toolchain:linux_arm64_gnu.2.28",
"@zig_sdk//toolchain:darwin_amd64", "@zig_sdk//toolchain:darwin_amd64",
"@zig_sdk//toolchain:darwin_arm64", "@zig_sdk//toolchain:darwin_arm64",
"@zig_sdk//toolchain:windows_amd64",
"@zig_sdk//toolchain:windows_arm64",
# amd64 toolchains for libc-aware platforms: # amd64 toolchains for libc-aware platforms:
"@zig_sdk//libc_aware/toolchain:linux_amd64_gnu.2.19", "@zig_sdk//libc_aware/toolchain:linux_amd64_gnu.2.19",

14
ci/test
View File

@ -1,3 +1,13 @@
#!/bin/sh #!/bin/bash
set -euo pipefail
exec bazel test ... bazel test ...
# Windows tests
# Unfortunately wine-binfmt breaks within the bazel sandbox, so we disable it
# to run this test.
bazel test //test/c:winver_windows_amd64 \
--spawn_strategy=standalone
# There is no no easy way to run windows_arm64 binaries on Linux, so we just
# cross compile one for testing.
bazel build //test/c:winver_windows_arm64

View File

@ -1,4 +1,4 @@
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary") load("@bazel-zig-cc//rules:platform.bzl", "platform_binary", "platform_test")
cc_binary( cc_binary(
name = "which_libc", name = "which_libc",
@ -34,3 +34,25 @@ cc_binary(
("linux_arm64", "//platform:linux_arm64", "glibc_2.28"), ("linux_arm64", "//platform:linux_arm64", "glibc_2.28"),
] ]
] ]
cc_binary(
name = "winver",
srcs = ["main_winver.c"],
target_compatible_with = [
"@platforms//os:windows",
],
)
platform_test(
name = "winver_windows_amd64",
src = "winver",
platform = "//platform:windows_amd64",
tags = ["manual"],
)
platform_binary(
name = "winver_windows_arm64",
src = "winver",
platform = "//platform:windows_arm64",
tags = ["manual"],
)

16
test/c/main_winver.c Normal file
View File

@ -0,0 +1,16 @@
#include <stdio.h>
#include <windows.h>
int main() {
DWORD version = GetVersion();
DWORD majorVersion = (DWORD)(LOBYTE(LOWORD(version)));
DWORD minorVersion = (DWORD)(HIBYTE(LOWORD(version)));
DWORD build = 0;
if (version < 0x80000000) {
build = (DWORD)(HIWORD(version));
}
printf("Running Windows version %d.%d (%d).\n", majorVersion, minorVersion, build);
return 0;
}