Skip to content

Commit

Permalink
msvc support
Browse files Browse the repository at this point in the history
closes: #2
  • Loading branch information
kassane committed Jun 29, 2023
1 parent 173082c commit d12ba91
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 25 deletions.
27 changes: 8 additions & 19 deletions .github/workflows/unittests_zig_msvc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,18 @@ jobs:
strategy:
fail-fast: false
matrix:
target: [x86_64-windows-msvc, x86-windows-msvc, aarch64-windows-msvc]
runs-on: windows-latest
target: [x86_64, x86, aarch64]
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- uses: goto-bus-stop/setup-zig@v2
with:
version: master
- uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.target == 'x86_64-windows-msvc' }}
with:
arch: amd64
- uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.target == 'aarch64-windows-msvc' }}
with:
arch: amd64_arm64
- uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.target == 'x86-windows-msvc' }}
- uses: baptiste0928/cargo-install@v2
with:
arch: amd64_x86
crate: xwin

# wait: https://github.com/ziglang/zig/issues/15448
# - name: Build Summary
# run: zig build -DTests -fsummary -freference-trace -Dtarget=${{matrix.target}}
- name: Run xwin
run: xwin --arch=${{ matrix.target }} --accept-license splat --output $PWD/.xwin --include-debug-symbols --preserve-ms-arch-notation --disable-symlinks --include-debug-libs
- name: build summary
run: zig build -DTests --summary all -freference-trace -Doptimize=ReleaseFast -Dtarget=${{ matrix.target }}-windows-msvc
61 changes: 55 additions & 6 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ pub fn build(b: *std.Build) void {
lib.addIncludePath("include");
lib.addCSourceFile("test/empty.cpp", &.{});
lib.installHeadersDirectoryOptions(.{
.source_dir = "single-header",
.source_dir = .{ .path = "single-header" },
.install_dir = .header,
.install_subdir = "",
.exclude_extensions = &.{
"md",
"experimental.hpp",
},
});

b.installArtifact(lib);

if (tests) {
Expand All @@ -50,15 +51,15 @@ pub fn build(b: *std.Build) void {
// .lib = lib,
// .path = "test/constexprs/WG21_P1886.cpp",
// });
if (!target.isDarwin()) buildTest(b, .{
if (!target.isDarwin() and target.getAbi() != .msvc) buildTest(b, .{
.lib = lib,
.path = "test/constexprs/max_result_get_value.cpp",
});
buildTest(b, .{
.lib = lib,
.path = "test/constexprs/min_result_get_value.cpp",
});
if (!target.isDarwin()) buildTest(b, .{
if (!target.isDarwin() and target.getAbi() != .msvc) buildTest(b, .{
.lib = lib,
.path = "test/constexprs/max_result_construct_value_move_destruct.cpp",
});
Expand Down Expand Up @@ -210,7 +211,7 @@ pub fn build(b: *std.Build) void {
.lib = lib,
.path = "test/tests/issue0247.cpp",
});
if (!lib.target_info.target.isMusl()) {
if (!lib.target_info.target.isMusl() and target.getAbi() != .msvc) {
buildTest(b, .{
.lib = lib,
.path = "include/outcome/experimental/status-code/test/issue0050.cpp",
Expand All @@ -235,8 +236,20 @@ pub fn build(b: *std.Build) void {
.lib = lib,
.path = "include/outcome/experimental/status-code/wg21/file_io_error.cpp",
});
buildTest(b, .{
.lib = lib,
.path = "test/tests/experimental-p0709a.cpp",
});
if (!target.isDarwin()) buildTest(b, .{
.lib = lib,
.path = "test/tests/experimental-core-outcome-status.cpp",
});
buildTest(b, .{
.lib = lib,
.path = "test/tests/experimental-core-result-status.cpp",
});
}
buildTest(b, .{
if (target.getAbi() != .msvc) buildTest(b, .{
.lib = lib,
.path = "test/tests/issue0259.cpp",
});
Expand All @@ -256,7 +269,12 @@ fn buildTest(b: *std.Build, info: BuildInfo) void {
"-Wall",
"-Wextra",
});
test_exe.linkLibCpp();
if (test_exe.target.isWindows())
test_exe.subsystem = .Console;
if (test_exe.target.getAbi() == .msvc) {
xWin(b, test_exe);
test_exe.linkLibC();
} else test_exe.linkLibCpp();
b.installArtifact(test_exe);

const run_cmd = b.addRunArtifact(test_exe);
Expand All @@ -281,3 +299,34 @@ const BuildInfo = struct {
return split.first();
}
};

fn xWin(b: *std.Build, exe: *std.Build.Step.Compile) void {
const target = (std.zig.system.NativeTargetInfo.detect(exe.target) catch unreachable).target;
const arch: []const u8 = switch (target.cpu.arch) {
.x86_64 => "x64",
.x86 => "x86",
.arm, .armeb => "arm",
.aarch64 => "arm64",
else => @panic("Unsupported Architecture"),
};

exe.setLibCFile(.{ .path = sdkPath("/libc.txt") });
exe.addSystemIncludePath(sdkPath("/.xwin/crt/include"));
exe.addSystemIncludePath(sdkPath("/.xwin/sdk/include"));
exe.addSystemIncludePath(sdkPath("/.xwin/sdk/include/10.0.22000/cppwinrt"));
exe.addSystemIncludePath(sdkPath("/.xwin/sdk/include/10.0.22000/ucrt"));
exe.addSystemIncludePath(sdkPath("/.xwin/sdk/include/10.0.22000/um"));
exe.addSystemIncludePath(sdkPath("/.xwin/sdk/include/10.0.22000/shared"));
exe.addLibraryPath(b.fmt(sdkPath("/.xwin/crt/lib/{s}"), .{arch}));
exe.addLibraryPath(b.fmt(sdkPath("/.xwin/sdk/lib/ucrt/{s}"), .{arch}));
exe.addLibraryPath(b.fmt(sdkPath("/.xwin/sdk/lib/um/{s}"), .{arch}));
}

fn sdkPath(comptime suffix: []const u8) []const u8 {
if (suffix[0] != '/') @compileError("relToPath requires an absolute path!");
return comptime blk: {
@setEvalBranchQuota(2000);
const root_dir = std.fs.path.dirname(@src().file) orelse ".";
break :blk root_dir ++ suffix;
};
}

0 comments on commit d12ba91

Please sign in to comment.