From a30e2bb076522851242e79aceb2316e0d19b639b Mon Sep 17 00:00:00 2001 From: Krzysztof Wolicki Date: Mon, 15 Jun 2026 12:14:21 +0200 Subject: [PATCH 1/4] Update to Zig 0.17.0-dev.857+2b2b85c5f --- build.zig | 36 +++++++++++++++++++++++++++--------- build.zig.zon | 2 +- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/build.zig b/build.zig index 522f4aa..afe9b4a 100644 --- a/build.zig +++ b/build.zig @@ -34,7 +34,7 @@ pub fn build(b: *std.Build) void { .rtcd = b.option(bool, "rtcd", "Enable runtime feature detection") orelse false, }; - const lib, const dynlib, const run_test = buildOpus(b, target, optimize, flags); + const lib, const dynlib, const run_test = buildOpus(b, target, optimize, flags, true); b.installArtifact(lib); b.installArtifact(dynlib); const test_step = b.step("test", "Run unit tests"); @@ -60,6 +60,7 @@ pub fn buildOpus( target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, flags: BuildFlags, + export_modules: bool, ) struct { *std.Build.Step.Compile, *std.Build.Step.Compile, *std.Build.Step.Run } { const upstream = b.dependency("upstream", .{}); const arm = target.result.cpu.arch.isArm(); @@ -151,17 +152,24 @@ pub fn buildOpus( else null; - const celt = buildCelt(b, target, optimize, cpu_features, upstream, plc_model, config); - const silk = buildSilk(b, target, optimize, cpu_features, upstream, plc_model, config); + const celt = buildCelt(b, target, optimize, cpu_features, upstream, plc_model, config, export_modules); + const silk = buildSilk(b, target, optimize, cpu_features, upstream, plc_model, config, export_modules); const tc = b.addTranslateC(.{ .root_source_file = upstream.path("include/opus.h"), .target = target, .optimize = optimize, }); - _ = tc.addModule("headers"); - const mod = b.addModule("opus", .{ + if (export_modules) { + _ = tc.addModule("headers"); + } + + const mod = if (export_modules) b.addModule("opus", .{ + .root_source_file = tc.getOutput(), + .target = target, + .optimize = optimize, + }) else b.createModule(.{ .root_source_file = tc.getOutput(), .target = target, .optimize = optimize, @@ -439,8 +447,13 @@ fn buildCelt( upstream: *std.Build.Dependency, plc_model: ?*std.Build.Dependency, config: *std.Build.Step.ConfigHeader, + export_modules: bool, ) *std.Build.Module { - const mod = b.addModule("celt", .{ + const mod = if (export_modules) b.addModule("celt", .{ + .target = target, + .optimize = optimize, + .link_libc = true, + }) else b.createModule(.{ .target = target, .optimize = optimize, .link_libc = true, @@ -635,8 +648,13 @@ fn buildSilk( upstream: *std.Build.Dependency, plc_model: ?*std.Build.Dependency, config: *std.Build.Step.ConfigHeader, + export_modules: bool, ) *std.Build.Module { - const mod = b.addModule("silk", .{ + const mod = if (export_modules) b.addModule("silk", .{ + .target = target, + .optimize = optimize, + .link_libc = true, + }) else b.createModule(.{ .target = target, .optimize = optimize, .link_libc = true, @@ -958,7 +976,7 @@ pub fn setupCi(b: *std.Build, target: std.Build.ResolvedTarget) void { }; for (configs, 0..) |c, idx| { - const native_lib, const native_dynlib, const run_native_test = buildOpus(b, target, .Debug, c); + const native_lib, const native_dynlib, const run_native_test = buildOpus(b, target, .Debug, c, false); ci.dependOn(&b.addInstallArtifact(native_lib, .{}).step); ci.dependOn(&b.addInstallArtifact(native_dynlib, .{}).step); run_native_test.setName(b.fmt("native-test-config #{} - {} ", .{ idx, c })); @@ -966,7 +984,7 @@ pub fn setupCi(b: *std.Build, target: std.Build.ResolvedTarget) void { for (targets, 0..) |q, qidx| { const rt = b.resolveTargetQuery(q); - const lib, const dynlib, const run_test = buildOpus(b, rt, .Debug, c); + const lib, const dynlib, const run_test = buildOpus(b, rt, .Debug, c, false); ci.dependOn(&b.addInstallArtifact(lib, .{}).step); ci.dependOn(&b.addInstallArtifact(dynlib, .{}).step); run_test.setName(b.fmt("test-config #{} - target # {} ", .{ idx, qidx })); diff --git a/build.zig.zon b/build.zig.zon index d61fa5d..8e14596 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,7 +1,7 @@ .{ .name = .opus, .version = "0.0.2", - .minimum_zig_version = "0.16.0", + .minimum_zig_version = "0.17.0-dev.857+2b2b85c5f", .fingerprint = 0x8db4fd2c707ee1be, .dependencies = .{ .upstream = .{ From d6f0a32ce7762b2529caa98fc2ab3b5056723ea8 Mon Sep 17 00:00:00 2001 From: Krzysztof Wolicki Date: Mon, 15 Jun 2026 12:47:05 +0200 Subject: [PATCH 2/4] add any check to opus tests to allow skipping --- build.zig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.zig b/build.zig index afe9b4a..c2ec33d 100644 --- a/build.zig +++ b/build.zig @@ -434,7 +434,8 @@ pub fn buildOpus( test_opus_api.root_module.addIncludePath(upstream.path("celt")); const run_test = b.addRunArtifact(test_opus_api); - run_test.has_side_effects = false; + // run_test.has_side_effects = false; + run_test.expectExitCode(0); return .{ lib, dynlib, run_test }; } From c9353d73660a87791070522002eb93800f4ebf00 Mon Sep 17 00:00:00 2001 From: Loris Cro Date: Tue, 11 Aug 2026 21:59:42 +0200 Subject: [PATCH 3/4] update to zig 0.17.0-dev.1640+2597da025 --- build.zig | 6 +++--- build.zig.zon | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.zig b/build.zig index c2ec33d..bb61e5f 100644 --- a/build.zig +++ b/build.zig @@ -110,7 +110,7 @@ pub fn buildOpus( .FIXED_POINT = flags.fixed_point, .FIXED_DEBUG = flags.fixed_debug, .DISABLE_FLOAT_API = if (flags.float_api orelse true) null else true, - .ENABLE_ASSERTIONS = flags.assertions orelse if (optimize == .Debug) true else null, + .ENABLE_ASSERTIONS = flags.assertions orelse if (optimize == .debug) true else null, .FLOAT_APPROX = if (flags.float_approx orelse false) if (target.result.cpu.arch.isAARCH64() or target.result.cpu.arch.isArm() or target.result.cpu.arch.isX86() or target.result.cpu.arch.isPowerPC()) true else null @@ -977,7 +977,7 @@ pub fn setupCi(b: *std.Build, target: std.Build.ResolvedTarget) void { }; for (configs, 0..) |c, idx| { - const native_lib, const native_dynlib, const run_native_test = buildOpus(b, target, .Debug, c, false); + const native_lib, const native_dynlib, const run_native_test = buildOpus(b, target, .debug, c, false); ci.dependOn(&b.addInstallArtifact(native_lib, .{}).step); ci.dependOn(&b.addInstallArtifact(native_dynlib, .{}).step); run_native_test.setName(b.fmt("native-test-config #{} - {} ", .{ idx, c })); @@ -985,7 +985,7 @@ pub fn setupCi(b: *std.Build, target: std.Build.ResolvedTarget) void { for (targets, 0..) |q, qidx| { const rt = b.resolveTargetQuery(q); - const lib, const dynlib, const run_test = buildOpus(b, rt, .Debug, c, false); + const lib, const dynlib, const run_test = buildOpus(b, rt, .debug, c, false); ci.dependOn(&b.addInstallArtifact(lib, .{}).step); ci.dependOn(&b.addInstallArtifact(dynlib, .{}).step); run_test.setName(b.fmt("test-config #{} - target # {} ", .{ idx, qidx })); diff --git a/build.zig.zon b/build.zig.zon index 8e14596..faac5d5 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,7 +1,7 @@ .{ .name = .opus, .version = "0.0.2", - .minimum_zig_version = "0.17.0-dev.857+2b2b85c5f", + .minimum_zig_version = "0.17.0-dev.1640+2597da025", .fingerprint = 0x8db4fd2c707ee1be, .dependencies = .{ .upstream = .{ From 7fc2bef07389ad5731d670099774e8368f83f61b Mon Sep 17 00:00:00 2001 From: Loris Cro Date: Fri, 14 Aug 2026 16:13:41 +0200 Subject: [PATCH 4/4] fix duplicate 'opus' artifact --- build.zig | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/build.zig b/build.zig index bb61e5f..3571a22 100644 --- a/build.zig +++ b/build.zig @@ -34,9 +34,8 @@ pub fn build(b: *std.Build) void { .rtcd = b.option(bool, "rtcd", "Enable runtime feature detection") orelse false, }; - const lib, const dynlib, const run_test = buildOpus(b, target, optimize, flags, true); + const lib, const run_test = buildOpus(b, target, optimize, flags, true); b.installArtifact(lib); - b.installArtifact(dynlib); const test_step = b.step("test", "Run unit tests"); test_step.dependOn(&run_test.step); setupCi(b, target); @@ -61,7 +60,7 @@ pub fn buildOpus( optimize: std.builtin.OptimizeMode, flags: BuildFlags, export_modules: bool, -) struct { *std.Build.Step.Compile, *std.Build.Step.Compile, *std.Build.Step.Run } { +) struct { *std.Build.Step.Compile, *std.Build.Step.Run } { const upstream = b.dependency("upstream", .{}); const arm = target.result.cpu.arch.isArm(); const aarch64 = target.result.cpu.arch.isAARCH64(); @@ -181,19 +180,12 @@ pub fn buildOpus( .root_module = mod, }); - const dynlib = b.addLibrary(.{ - .name = "opus", - .linkage = .dynamic, - .root_module = mod, - }); - mod.addImport("celt", celt); mod.addImport("silk", silk); mod.addConfigHeader(config); // lib.linkLibC(); lib.installHeadersDirectory(upstream.path("include"), ".", .{}); - // lib.installHeader(xiph_opus.path("include/opus.h"), "opus.h"); mod.addIncludePath(upstream.path("include")); mod.addIncludePath(upstream.path("src")); mod.addIncludePath(upstream.path("celt")); @@ -414,8 +406,6 @@ pub fn buildOpus( }); } - b.installArtifact(lib); - const test_opus_api = b.addExecutable(.{ .name = "test_opus_api", .root_module = b.createModule(.{ @@ -437,7 +427,7 @@ pub fn buildOpus( // run_test.has_side_effects = false; run_test.expectExitCode(0); - return .{ lib, dynlib, run_test }; + return .{ lib, run_test }; } fn buildCelt( @@ -977,17 +967,15 @@ pub fn setupCi(b: *std.Build, target: std.Build.ResolvedTarget) void { }; for (configs, 0..) |c, idx| { - const native_lib, const native_dynlib, const run_native_test = buildOpus(b, target, .debug, c, false); + const native_lib, const run_native_test = buildOpus(b, target, .debug, c, false); ci.dependOn(&b.addInstallArtifact(native_lib, .{}).step); - ci.dependOn(&b.addInstallArtifact(native_dynlib, .{}).step); run_native_test.setName(b.fmt("native-test-config #{} - {} ", .{ idx, c })); ci.dependOn(&run_native_test.step); for (targets, 0..) |q, qidx| { const rt = b.resolveTargetQuery(q); - const lib, const dynlib, const run_test = buildOpus(b, rt, .debug, c, false); + const lib, const run_test = buildOpus(b, rt, .debug, c, false); ci.dependOn(&b.addInstallArtifact(lib, .{}).step); - ci.dependOn(&b.addInstallArtifact(dynlib, .{}).step); run_test.setName(b.fmt("test-config #{} - target # {} ", .{ idx, qidx })); run_test.failing_to_execute_foreign_is_an_error = false; run_test.skip_foreign_checks = true;