From a6c3fc024ca518a493195c4b616d924b8a65d408 Mon Sep 17 00:00:00 2001 From: haruki7049 Date: Tue, 1 Jul 2025 00:42:18 +0900 Subject: [PATCH 1/3] Update build.zig syntaxes for Zig-0.14.0 --- .gitignore | 24 ++++++++++++++++++++++-- build.zig | 55 +++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 62 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index d4224e5..7e9e158 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,22 @@ -/zig-cache -/zig-out +# This file is for zig-specific build artifacts. +# If you have OS-specific or editor-specific files to ignore, +# such as *.swp or .DS_Store, put those in your global +# ~/.gitignore and put this in your ~/.gitconfig: +# +# [core] +# excludesfile = ~/.gitignore +# +# Cheers! +# -andrewrk + +.zig-cache/ +zig-out/ +/release/ +/debug/ +/build/ +/build-*/ +/docgen_tmp/ + +# Although this was renamed to .zig-cache, let's leave it here for a few +# releases to make it less annoying to work with multiple branches. +zig-cache/ diff --git a/build.zig b/build.zig index ac163e6..c013bc5 100644 --- a/build.zig +++ b/build.zig @@ -1,21 +1,46 @@ const std = @import("std"); -const Builder = @import("std").build.Builder; const examples = &[_][]const u8{"amp", "fifths", "params"}; -pub fn build(b: *Builder) !void { - const mode = b.standardReleaseOptions(); - inline for (examples) |example, i| { - const lib = b.addSharedLibrary(example, "examples/" ++ example ++ "/" ++ example ++ ".zig", .{ .unversioned = {} }); - - lib.addPackagePath("lv2", "src/lv2.zig"); - lib.setBuildMode(mode); - lib.setOutputDir("zig-out/" ++ example ++ ".lv2"); - lib.linkLibC(); - lib.addIncludeDir("lv2"); - - var step = b.step(example, "Build example \"" ++ example ++ "\""); - step.dependOn(&b.addInstallFileWithDir("examples/" ++ example ++ "/" ++ example ++ ".ttl", .Prefix, example ++ ".lv2/manifest.ttl").step); - step.dependOn(&lib.step); +pub fn build(b: *std.Build) !void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + // Library module + const lib_mod = b.createModule(.{ + .root_source_file = b.path("src/lv2.zig"), + .target = target, + .optimize = optimize, + }); + + // Library + const lib = b.addLibrary(.{ + .linkage = .static, + .name = "lv2", + .root_module = lib_mod, + }); + + // Link lv2 library + lib.linkLibC(); + lib.addIncludePath(b.path("lv2")); + + // Unit tests for library + const lib_unit_tests = b.addTest(.{ + .root_module = lib_mod, + }); + + + const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests); + + // Test step + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&run_lib_unit_tests.step); + + // Example generate step + const examples_step = b.step("examples", "Build examples"); + inline for (examples) |example| { + const source = b.path("examples/" ++ example ++ "/" ++ example ++ ".ttl"); + const dest = example ++ ".lv2/mainfest.ttl"; + examples_step.dependOn(&b.addInstallFileWithDir(source, .prefix, dest).step); } } From aa2c84af84119ab83411682c8200df2870ad562f Mon Sep 17 00:00:00 2001 From: haruki7049 Date: Tue, 1 Jul 2025 00:44:16 +0900 Subject: [PATCH 2/3] Append build.zig.zon --- build.zig.zon | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 build.zig.zon diff --git a/build.zig.zon b/build.zig.zon new file mode 100644 index 0000000..d978546 --- /dev/null +++ b/build.zig.zon @@ -0,0 +1,75 @@ +.{ + // This is the default name used by packages depending on this one. For + // example, when a user runs `zig fetch --save `, this field is used + // as the key in the `dependencies` table. Although the user can choose a + // different name, most users will stick with this provided value. + // + // It is redundant to include "zig" in this name because it is already + // within the Zig package namespace. + .name = .lv2, + + // This is a [Semantic Version](https://semver.org/). + // In a future version of Zig it will be used for package deduplication. + .version = "0.0.0", + + // Together with name, this represents a globally unique package + // identifier. This field is generated by the Zig toolchain when the + // package is first created, and then *never changes*. This allows + // unambiguous detection of one package being an updated version of + // another. + // + // When forking a Zig project, this id should be regenerated (delete the + // field and run `zig build`) if the upstream project is still maintained. + // Otherwise, the fork is *hostile*, attempting to take control over the + // original project's identity. Thus it is recommended to leave the comment + // on the following line intact, so that it shows up in code reviews that + // modify the field. + .fingerprint = 0xf3e64a61a3cf623, // Changing this has security and trust implications. + + // Tracks the earliest Zig version that the package considers to be a + // supported use case. + .minimum_zig_version = "0.14.1", + + // This field is optional. + // Each dependency must either provide a `url` and `hash`, or a `path`. + // `zig build --fetch` can be used to fetch all dependencies of a package, recursively. + // Once all dependencies are fetched, `zig build` no longer requires + // internet connectivity. + .dependencies = .{ + // See `zig fetch --save ` for a command-line interface for adding dependencies. + //.example = .{ + // // When updating this field to a new URL, be sure to delete the corresponding + // // `hash`, otherwise you are communicating that you expect to find the old hash at + // // the new URL. If the contents of a URL change this will result in a hash mismatch + // // which will prevent zig from using it. + // .url = "https://example.com/foo.tar.gz", + // + // // This is computed from the file contents of the directory of files that is + // // obtained after fetching `url` and applying the inclusion rules given by + // // `paths`. + // // + // // This field is the source of truth; packages do not come from a `url`; they + // // come from a `hash`. `url` is just one of many possible mirrors for how to + // // obtain a package matching this `hash`. + // // + // // Uses the [multihash](https://multiformats.io/multihash/) format. + // .hash = "...", + // + // // When this is provided, the package is found in a directory relative to the + // // build root. In this case the package's hash is irrelevant and therefore not + // // computed. This field and `url` are mutually exclusive. + // .path = "foo", + // + // // When this is set to `true`, a package is declared to be lazily + // // fetched. This makes the dependency only get fetched if it is + // // actually used. + // .lazy = false, + //}, + }, + + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} From 6995949b7ece0a53114f1006389ebf1625192de9 Mon Sep 17 00:00:00 2001 From: haruki7049 Date: Tue, 1 Jul 2025 00:45:58 +0900 Subject: [PATCH 3/3] Add Zig version info in README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8f4db43..1090c1e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ A toolkit for LV2 plugin authors written in Zig. **WARNING: Here be dragons; tons of LV2 features aren't implemented and this isn't ready for production at all.** +## Zig version +Zig 0.14.0 + ## Installing ```bash git clone --recurse-submodules https://github.com/ziglibs/zig-lv2