Separated out zlib-ng compilation to separate package

This commit is contained in:
Caleb J. Gardner
2026-03-11 19:21:07 -05:00
parent 1dc85c62fc
commit 51305a1a80
2 changed files with 26 additions and 13 deletions
+20 -12
View File
@@ -1,14 +1,18 @@
const std = @import("std"); const std = @import("std");
const Compile = std.Build.Step.Compile;
const ResolvedTarget = std.Build.ResolvedTarget;
const OptimizeMode = std.builtin.OptimizeMode;
const Module = std.Build.Module;
pub fn build(b: *std.Build) !void { pub fn build(b: *std.Build) !void {
const use_c_libs_option = b.option(bool, "use_c_libs", "Use C versions of decompression libraries instead of the Zig standard library ones"); const use_zig_decomp = b.option(bool, "use_zig_decomp", "Use Zig standard library for decompression instead of C libraries.") orelse false;
const allow_lzo = b.option(bool, "allow_lzo", "Compile with lzo support"); const allow_lzo = b.option(bool, "allow_lzo", "Compile with lzo support") orelse false;
const debug = b.option(bool, "debug", "Enable options to make debugging easier."); const debug = b.option(bool, "debug", "Enable options to make debugging easier.");
const version_string_option = b.option([]const u8, "version", "Version of the library/binary"); const version_string_option = b.option([]const u8, "version", "Version of the library/binary");
const zig_squashfs_options = b.addOptions(); const zig_squashfs_options = b.addOptions();
zig_squashfs_options.addOption(bool, "use_c_libs", use_c_libs_option orelse false); zig_squashfs_options.addOption(bool, "use_zig_decomp", use_zig_decomp);
zig_squashfs_options.addOption(bool, "allow_lzo", allow_lzo orelse false); zig_squashfs_options.addOption(bool, "allow_lzo", allow_lzo);
const target = b.standardTargetOptions(.{}); const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{}); const optimize = b.standardOptimizeOption(.{});
@@ -16,19 +20,25 @@ pub fn build(b: *std.Build) !void {
.root_source_file = b.path("src/root.zig"), .root_source_file = b.path("src/root.zig"),
.target = target, .target = target,
.optimize = if (debug == true) .Debug else optimize, .optimize = if (debug == true) .Debug else optimize,
.link_libc = use_c_libs_option, .link_libc = !use_zig_decomp,
.valgrind = debug, .valgrind = debug,
.error_tracing = debug, .error_tracing = debug,
.strip = if (debug == true) false else null, .strip = if (debug == true) false else null,
}); });
mod.addOptions("config", zig_squashfs_options); mod.addOptions("config", zig_squashfs_options);
if (use_c_libs_option == true) {
mod.linkSystemLibrary("zlib-ng", .{ .preferred_link_mode = .static }); if (!use_zig_decomp) {
var zlib = b.dependency("zlib_ng", .{});
mod.linkLibrary(zlib.artifact("zng"));
mod.linkSystemLibrary("lzma", .{ .preferred_link_mode = .static }); mod.linkSystemLibrary("lzma", .{ .preferred_link_mode = .static });
if (allow_lzo == true) if (allow_lzo == true)
mod.linkSystemLibrary("minilzo", .{ .preferred_link_mode = .static }); mod.linkSystemLibrary("minilzo", .{ .preferred_link_mode = .static });
mod.linkSystemLibrary("lz4", .{ .preferred_link_mode = .static }); mod.linkSystemLibrary("lz4", .{ .preferred_link_mode = .static });
mod.linkSystemLibrary("zstd", .{ .preferred_link_mode = .static });
const zstd_lib = buildZstdLibrary(b, target, optimize, debug);
mod.linkLibrary(zstd_lib);
mod.addIncludePath(b.path("extern/zstd/lib/"));
} }
var version = version_string_option orelse "0.0.0-testing"; var version = version_string_option orelse "0.0.0-testing";
@@ -44,7 +54,7 @@ pub fn build(b: *std.Build) !void {
.root_source_file = b.path("src/bin/unsquashfs.zig"), .root_source_file = b.path("src/bin/unsquashfs.zig"),
.target = target, .target = target,
.optimize = if (debug == true) .Debug else optimize, .optimize = if (debug == true) .Debug else optimize,
.link_libc = use_c_libs_option, .link_libc = !use_zig_decomp,
.imports = &.{ .imports = &.{
.{ .name = "zig_squashfs", .module = mod }, .{ .name = "zig_squashfs", .module = mod },
}, },
@@ -94,7 +104,7 @@ pub fn build(b: *std.Build) !void {
check.dependOn(&exe_check.step); check.dependOn(&exe_check.step);
} }
fn buildZstdLibrary(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, debug: ?bool) *std.Build.Step.Compile { fn buildZstdLibrary(b: *std.Build, target: ResolvedTarget, optimize: OptimizeMode, debug: ?bool) *Compile {
var zstd_lib = b.addLibrary(.{ var zstd_lib = b.addLibrary(.{
.name = "zstd", .name = "zstd",
.linkage = .static, .linkage = .static,
@@ -106,7 +116,6 @@ fn buildZstdLibrary(b: *std.Build, target: std.Build.ResolvedTarget, optimize: s
.use_llvm = debug, .use_llvm = debug,
}); });
zstd_lib.root_module.addCSourceFiles(.{ zstd_lib.root_module.addCSourceFiles(.{
.flags = &.{"-O3"},
.root = b.path("extern/zstd/lib/"), .root = b.path("extern/zstd/lib/"),
.files = &.{ .files = &.{
"common/debug.c", "common/debug.c",
@@ -142,7 +151,6 @@ fn buildZstdLibrary(b: *std.Build, target: std.Build.ResolvedTarget, optimize: s
}, },
}); });
zstd_lib.root_module.addCSourceFiles(.{ zstd_lib.root_module.addCSourceFiles(.{
.flags = &.{"-O3"},
.root = b.path("extern/zstd/lib/decompress"), .root = b.path("extern/zstd/lib/decompress"),
.files = &.{"huf_decompress_amd64.S"}, .files = &.{"huf_decompress_amd64.S"},
}); });
+6 -1
View File
@@ -3,7 +3,12 @@
.version = "0.0.6", .version = "0.0.6",
.fingerprint = 0x37ba29474b87f145, // Changing this has security and trust implications. .fingerprint = 0x37ba29474b87f145, // Changing this has security and trust implications.
.minimum_zig_version = "0.15.2", .minimum_zig_version = "0.15.2",
.dependencies = .{}, .dependencies = .{
.zlib_ng = .{
.url = "https://github.com/CalebQ42/zig-zlib-ng/archive/refs/tags/2.3.3.tar.gz",
.hash = "zlib_ng-2.3.3-2HYS4Bw_AADjgv7tkrqjjz2fVz5kRTvha8wN9LEcjYNp",
},
},
.paths = .{ .paths = .{
"build.zig", "build.zig",
"build.zig.zon", "build.zig.zon",