Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support Zig versions 0.11.0 and 0.12.0 #271

Merged
merged 30 commits into from
Apr 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
c31dace
update Zig versions
github-actions[bot] Apr 22, 2024
786f4b2
fixup configure version test
aherrmann Apr 22, 2024
8d4b052
--main-pkg-path was removed in 0.12
aherrmann Feb 18, 2024
41da6eb
pass Zig version to zig_module_dependencies
aherrmann Feb 25, 2024
1aaaac5
Use -M flags for Zig 0.12
aherrmann Feb 25, 2024
bbe6031
--deps flags before --mod flags
aherrmann Feb 25, 2024
4d3d943
Re-order Zig compiler flags
aherrmann Feb 26, 2024
ccef4e7
Separate module dependencies from specifications
aherrmann Feb 27, 2024
57642e6
Test zig_module_dependencies/specifications separately
aherrmann Feb 27, 2024
7fdc748
Render --dep instead of --deps for Zig 0.12
aherrmann Feb 27, 2024
e7ee411
Use -M flag for main module with Zig 0.12
aherrmann Feb 27, 2024
889a421
Declare --dep before main module -M
aherrmann Feb 27, 2024
f6c9650
Assign main module name for Zig 0.12
aherrmann Feb 27, 2024
170deda
Order settings and platform flags for Zig 0.12
aherrmann Feb 28, 2024
c181819
Specify target before the main module
aherrmann Mar 13, 2024
b85b727
register 0.11.0 and 0.12.0 for development
aherrmann Apr 22, 2024
cd01a8f
var --> const for Zig 0.12.0
aherrmann Apr 22, 2024
f3ed151
register 0.11.0 and 0.12.0 in e2e/workspace
aherrmann Apr 22, 2024
e1dffc3
var --> const for Zig 0.12.0 in e2e/workspace
aherrmann Apr 22, 2024
708f75e
Coff.init is_loaded argument for Zig 0.12
aherrmann Apr 22, 2024
88df22f
Zig 0.12 GlobalLinkage .Strong --> .strong
aherrmann Apr 22, 2024
e2a039f
Update error unions for 0.12.0
aherrmann Apr 22, 2024
c079b8e
ChildProcess.exec --> .run for Zig 0.12
aherrmann Apr 22, 2024
8abea84
Fix 0.12.0 enum/union coercion
aherrmann Apr 22, 2024
37dcc27
integration test runner 0.12.0 compatibility
aherrmann Apr 22, 2024
05ccc01
add 0.11.0 and 0.12.0 to versions integration test
aherrmann Apr 22, 2024
8289bd6
test Zig versions on CI
aherrmann Apr 22, 2024
bc11881
e2e/workspace 0.12.0 and 0.11.0
aherrmann Apr 22, 2024
59020e8
skip dylib linking on MacOS with 0.12.0
aherrmann Apr 23, 2024
fddc80d
skip Zig docs generation with 0.12.0 on MacOS
aherrmann Apr 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 51 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest]
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions) }}
zigversion: [0.12.0]
bzlmodEnabled: [true, false]
folder:
- "."
Expand All @@ -59,43 +60,87 @@ jobs:
# we only run them against the latest Bazel version.
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: false
folder: "."
target: "//zig/tests/integration_tests"
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: true
folder: "."
target: "//zig/tests/integration_tests"
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: true
folder: "."
target: "//zig/tests/integration_tests"
# Only test older Zig versions with the latest Bazel version
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: false
folder: "."
target: "//..."
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: true
folder: "."
target: "//..."
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: true
folder: "."
target: "//..."
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: false
folder: "e2e/workspace"
target: "//..."
- os: ubuntu-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: true
folder: "e2e/workspace"
target: "//..."
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.11.0
bzlmodEnabled: true
folder: "e2e/workspace"
target: "//..."
# Only test the latest Bazel version on MacOS (MacOS runners are expensive and slow)
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: false
folder: "."
target: "//..."
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: true
folder: "."
target: "//..."
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: false
folder: "e2e/workspace"
target: "//..."
- os: macos-latest
bazelversion: ${{ fromJSON(needs.matrix-prep-bazelversion.outputs.bazelversions)[0] }}
zigversion: 0.12.0
bzlmodEnabled: true
folder: "e2e/workspace"
target: "//..."

# Configure a human readable name for each job
name: Test ${{ matrix.target }} in ${{ matrix.folder }} with Bazel ${{ matrix.bazelversion }} and bzlmod ${{ matrix.bzlmodEnabled }} on ${{ matrix.os }}
name: Test ${{ matrix.target }} in ${{ matrix.folder }} with Zig ${{ matrix.zigversion }}, Bazel ${{ matrix.bazelversion }}, and bzlmod ${{ matrix.bzlmodEnabled }} on ${{ matrix.os }}

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
Expand All @@ -119,14 +164,18 @@ jobs:
path: |
~/.cache/bazel
~/.cache/bazel-repo
key: bazel-cache-${{ matrix.os }}-${{ matrix.bazelversion }}-${{ matrix.bzlmodEnabled }}-${{ matrix.folder }}-${{ matrix.target }}-${{ hashFiles('**/BUILD.bazel', '**/*.bzl', '**/*.zig', 'WORKSPACE', 'WORKSPACE.bzlmod', 'MODULE.bazel') }}
key: bazel-cache-${{ matrix.os }}-${{ matrix.zigversion }}-${{ matrix.bazelversion }}-${{ matrix.bzlmodEnabled }}-${{ matrix.folder }}-${{ matrix.target }}-${{ hashFiles('**/BUILD.bazel', '**/*.bzl', '**/*.zig', 'WORKSPACE', 'WORKSPACE.bzlmod', 'MODULE.bazel') }}
restore-keys: |
bazel-cache-${{ matrix.os }}-${{ matrix.bazelversion }}-${{ matrix.bzlmodEnabled }}-${{ matrix.folder }}-${{ matrix.target }}

- name: Configure Bazel version
working-directory: ${{ matrix.folder }}
run: echo "USE_BAZEL_VERSION=${{ matrix.bazelversion }}" > .bazeliskrc

- name: Configure Zig version
working-directory: ${{ matrix.folder }}
run: echo "build --@zig_toolchains//:version=${{ matrix.zigversion }}" > .bazelrc.user

- name: Configure documentation generation
if: matrix.folder == '.' && matrix.target == '//...'
run: |
Expand Down
8 changes: 8 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ register_toolchains("@rules_zig//zig/target:all")

register_toolchains("@zig_toolchains//:all")

zig_dev = use_extension(
"//zig:extensions.bzl",
"zig",
dev_dependency = True,
)
zig_dev.toolchain(zig_version = "0.12.0")
zig_dev.toolchain(zig_version = "0.11.0")

bazel_dep(name = "stardoc", version = "0.6.2", dev_dependency = True, repo_name = "io_bazel_stardoc")
bazel_dep(name = "gazelle", version = "0.36.0", dev_dependency = True, repo_name = "bazel_gazelle")
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.5.0", dev_dependency = True)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ rules_zig_dependencies()

zig_register_toolchains(
name = "zig",
zig_version = "0.11.0",
zig_version = "0.12.0",
)
```

Expand Down
9 changes: 9 additions & 0 deletions e2e/workspace/MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ local_path_override(
path = "../..",
)

zig = use_extension(
"@rules_zig//zig:extensions.bzl",
"zig",
dev_dependency = True,
)
zig.toolchain(zig_version = "0.12.0")
zig.toolchain(zig_version = "0.11.0")
use_repo(zig, "zig_toolchains")

bazel_dep(name = "runfiles_library_dependency", dev_dependency = True)
local_path_override(
module_name = "runfiles_library_dependency",
Expand Down
5 changes: 4 additions & 1 deletion e2e/workspace/WORKSPACE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,8 @@ rules_zig_dependencies()

zig_register_toolchains(
name = "zig",
zig_version = "0.11.0",
zig_versions = [
"0.12.0",
"0.11.0",
],
)
8 changes: 7 additions & 1 deletion e2e/workspace/configure-mode/library.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ const std = @import("std");
const builtin = @import("builtin");

comptime {
@export(internalName, .{ .name = @tagName(builtin.mode), .linkage = .Strong });
@export(internalName, .{
.name = @tagName(builtin.mode),
.linkage = if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 11)
.Strong
else
.strong,
});
}

fn internalName() callconv(.C) void {}
2 changes: 1 addition & 1 deletion e2e/workspace/configure-target/read_elf_arch.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const std = @import("std");
const elf = std.elf;

pub fn main() !void {
var args = try std.process.argsAlloc(std.heap.page_allocator);
const args = try std.process.argsAlloc(std.heap.page_allocator);
defer std.process.argsFree(std.heap.page_allocator, args);

if (args.len < 2) {
Expand Down
8 changes: 6 additions & 2 deletions e2e/workspace/configure-target/read_pe32_arch.zig
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const std = @import("std");
const builtin = @import("builtin");

pub fn main() !void {
var args = try std.process.argsAlloc(std.heap.page_allocator);
const args = try std.process.argsAlloc(std.heap.page_allocator);
defer std.process.argsFree(std.heap.page_allocator, args);

if (args.len < 2) {
Expand All @@ -15,7 +16,10 @@ pub fn main() !void {
fn printMachineType(allocator: std.mem.Allocator, binary_path: []const u8) !void {
const content = try std.fs.cwd().readFileAlloc(allocator, binary_path, 1048576);

var coff = try std.coff.Coff.init(content);
var coff = if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 11)
try std.coff.Coff.init(content)
else
try std.coff.Coff.init(content, false);

try std.io.getStdOut().writer().print("{s}\n", .{@tagName(coff.getCoffHeader().machine)});
}
8 changes: 7 additions & 1 deletion e2e/workspace/configure-threaded/library.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ const std = @import("std");
const builtin = @import("builtin");

comptime {
@export(internalName, .{ .name = if (builtin.single_threaded) "single_threaded" else "multi_threaded", .linkage = .Strong });
@export(internalName, .{
.name = if (builtin.single_threaded) "single_threaded" else "multi_threaded",
.linkage = if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 11)
.Strong
else
.strong,
});
}

fn internalName() callconv(.C) void {}
26 changes: 26 additions & 0 deletions e2e/workspace/configure-version/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,29 @@ zig_configure_test(
actual = ":zig_test_0.11.0_manual",
zig_version = "0.11.0",
)

zig_configure(
name = "zig_version_0.12.0",
actual = ":zig_version",
zig_version = "0.12.0",
)

diff_test(
name = "zig_version_test_0.12.0",
size = "small",
file1 = ":zig_version_0.12.0.expected",
file2 = ":zig_version_0.12.0",
)

zig_test(
name = "zig_test_0.12.0_manual",
main = "test-0.12.0.zig",
tags = ["manual"],
)

zig_configure_test(
name = "zig_test_0.12.0",
size = "small",
actual = ":zig_test_0.12.0_manual",
zig_version = "0.12.0",
)
6 changes: 6 additions & 0 deletions e2e/workspace/configure-version/test-0.12.0.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const std = @import("std");
const builtin = @import("builtin");

test "match Zig version" {
try std.testing.expectEqualStrings("0.12.0", builtin.zig_version_string);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.12.0
29 changes: 28 additions & 1 deletion e2e/workspace/link-dependencies/shared-library/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@bazel_skylib//rules:build_test.bzl", "build_test")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
load("@rules_zig//zig:defs.bzl", "zig_binary", "zig_library", "zig_test")

selects.config_setting_group(
name = "macos-zig-0.12.0",
match_all = [
"@platforms//os:macos",
"@zig_toolchains//:0.12.0",
],
)

cc_binary(
name = "add",
srcs = ["add.c"],
Expand Down Expand Up @@ -34,6 +43,10 @@ zig_library(
"@rules_zig//zig/lib:libc",
],
main = "main.zig",
target_compatible_with = select({
":macos-zig-0.12.0": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)

zig_test(
Expand All @@ -47,11 +60,25 @@ zig_test(
)

build_test(
name = "build",
name = "build-binary",
size = "small",
targets = [
":binary",
],
)

build_test(
name = "build-library",
size = "small",
targets = [
":library",
],
)

build_test(
name = "build-test",
size = "small",
targets = [
":test",
],
)
Expand Down
7 changes: 6 additions & 1 deletion e2e/workspace/runfiles-library/main.zig
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const std = @import("std");
const builtin = @import("builtin");
const runfiles = @import("runfiles");

fn getEnvVar(allocator: std.mem.Allocator, key: []const u8) !?[]const u8 {
Expand Down Expand Up @@ -111,7 +112,11 @@ test "runfiles in nested binary" {
try env.put("DATA", data_rpath);
try r.environment(&env);

const result = try std.ChildProcess.exec(.{
const run = if (builtin.zig_version.major == 0 and builtin.zig_version.minor == 11)
std.ChildProcess.exec
else
std.ChildProcess.run;
const result = try run(.{
.allocator = std.testing.allocator,
.argv = &[_][]const u8{binary_path},
.env_map = &env,
Expand Down
2 changes: 1 addition & 1 deletion zig/private/common/cdeps.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def _compilation_context(*, compilation_context, inputs, args):
args.add_all(compilation_context.defines, format_each = "-D%s")
args.add_all(compilation_context.includes, format_each = "-I%s")

# Note, Zig does not support `-iquote` as of Zig 0.11.0
# Note, Zig does not support `-iquote` as of Zig 0.12.0
# args.add_all(compilation_context.quote_includes, format_each = "-iquote%s")
args.add_all(compilation_context.quote_includes, format_each = "-I%s")
args.add_all(compilation_context.system_includes, before_each = "-isystem")
Expand Down
Loading