ba2f069a4a
Finished MetadataReader Finished DirEntry Started work on File Added most important things to Inode Fixed test.zig Fixed some build issues causing SEGV
174 lines
5.7 KiB
Zig
174 lines
5.7 KiB
Zig
const std = @import("std");
|
|
const Build = std.Build;
|
|
const Step = Build.Step;
|
|
|
|
pub fn build(b: *std.Build) !void {
|
|
const use_zig_decomp = b.option(bool, "use_zig_decomp", "Use zig standard library for decompression.") orelse false;
|
|
const allow_lzo = b.option(bool, "allow_lzo", "Compile with lzo support") orelse false;
|
|
var debug = b.option(bool, "debug", "Enable options to make debugging easier.") orelse false;
|
|
const dynamic = b.option(bool, "dynamic", "Use dynamic linking for C libraries (if used).") orelse false;
|
|
var version_string = b.option([]const u8, "version", "Version of the library/binary") orelse "0.0.0-testing";
|
|
|
|
const target = b.standardTargetOptions(.{});
|
|
var optimize = b.standardOptimizeOption(.{});
|
|
|
|
const zig_squashfs_options = b.addOptions();
|
|
zig_squashfs_options.addOption(bool, "use_zig_decomp", use_zig_decomp);
|
|
zig_squashfs_options.addOption(bool, "allow_lzo", allow_lzo);
|
|
|
|
version_string = std.mem.trimStart(u8, version_string, "v");
|
|
const version = try std.SemanticVersion.parse(version_string);
|
|
const unsquashfs_options = b.addOptions();
|
|
unsquashfs_options.addOption(
|
|
std.SemanticVersion,
|
|
"version",
|
|
version,
|
|
);
|
|
|
|
if (debug) optimize = .Debug;
|
|
if (optimize == .Debug) debug = true;
|
|
|
|
const c_import = b.addTranslateC(.{
|
|
.root_source_file = b.path("src/c.h"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
if (allow_lzo) c_import.defineCMacro("ALLOW_LZO", null);
|
|
if (dynamic) {
|
|
c_import.linkSystemLibrary("zlib-ng", .{});
|
|
c_import.linkSystemLibrary("lzma", .{});
|
|
if (allow_lzo)
|
|
c_import.linkSystemLibrary("minilzo", .{});
|
|
c_import.linkSystemLibrary("lz4", .{});
|
|
c_import.linkSystemLibrary("zstd", .{});
|
|
}
|
|
|
|
var lib = b.addLibrary(.{
|
|
.name = "squashfs",
|
|
.root_module = b.addModule("squashfs", .{
|
|
.root_source_file = b.path("src/root.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
.valgrind = debug,
|
|
.error_tracing = debug,
|
|
.strip = !debug,
|
|
.imports = &.{
|
|
.{ .name = "config", .module = zig_squashfs_options.createModule() },
|
|
.{ .name = "c", .module = c_import.createModule() },
|
|
},
|
|
}),
|
|
.use_llvm = debug,
|
|
.version = version,
|
|
});
|
|
|
|
const deps = try getDependencies(b, target, optimize, allow_lzo, dynamic);
|
|
|
|
for (deps) |d|
|
|
lib.root_module.linkLibrary(d);
|
|
|
|
const exe = b.addExecutable(.{
|
|
.name = "unsquashfs",
|
|
.root_module = b.createModule(.{
|
|
.root_source_file = b.path("src/bin/unsquashfs.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
.imports = &.{
|
|
.{ .name = "config", .module = unsquashfs_options.createModule() },
|
|
.{ .name = "squashfs", .module = lib.root_module },
|
|
},
|
|
.valgrind = debug,
|
|
.error_tracing = debug,
|
|
.strip = !debug,
|
|
}),
|
|
.use_llvm = debug,
|
|
.version = version,
|
|
});
|
|
|
|
b.installArtifact(lib);
|
|
b.installArtifact(exe);
|
|
|
|
const mod_tests = b.addTest(.{
|
|
.root_module = b.createModule(.{
|
|
.root_source_file = b.path("src/root.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
.valgrind = true,
|
|
.error_tracing = true,
|
|
.strip = false,
|
|
.imports = &.{
|
|
.{ .name = "config", .module = zig_squashfs_options.createModule() },
|
|
.{ .name = "c", .module = c_import.createModule() },
|
|
},
|
|
}),
|
|
.use_llvm = debug, // Helps with lldb degugging
|
|
});
|
|
|
|
for (deps) |d|
|
|
mod_tests.root_module.linkLibrary(d);
|
|
|
|
if (dynamic) {
|
|
mod_tests.root_module.linkSystemLibrary("zlib-ng", .{});
|
|
mod_tests.root_module.linkSystemLibrary("lzma", .{});
|
|
mod_tests.root_module.linkSystemLibrary("minilzo", .{});
|
|
mod_tests.root_module.linkSystemLibrary("lz4", .{});
|
|
}
|
|
|
|
const run_mod_tests = b.addRunArtifact(mod_tests);
|
|
const test_step = b.step("test", "Run tests");
|
|
test_step.dependOn(&run_mod_tests.step);
|
|
|
|
// zls build check steps
|
|
const lib_check = b.addLibrary(.{
|
|
.name = "squashfs",
|
|
.root_module = lib.root_module,
|
|
});
|
|
const exe_check = b.addExecutable(.{
|
|
.name = "unsquashfs",
|
|
.root_module = exe.root_module,
|
|
});
|
|
const check = b.step("check", "Check if unsquashfs compiles");
|
|
check.dependOn(&lib_check.step);
|
|
check.dependOn(&exe_check.step);
|
|
}
|
|
|
|
fn getDependencies(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, allow_lzo: bool, dynamic: bool) ![]*Step.Compile {
|
|
if (dynamic) return &.{};
|
|
|
|
var list: std.ArrayList(*Step.Compile) = .empty;
|
|
errdefer list.clearAndFree(b.allocator);
|
|
|
|
var zlib_ng = b.dependency("zlib_ng", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
try list.append(b.allocator, zlib_ng.artifact("zng"));
|
|
|
|
var xz = b.dependency("xz", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
try list.append(b.allocator, xz.artifact("lzma"));
|
|
|
|
if (allow_lzo) {
|
|
var minilzo = b.dependency("minilzo", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
try list.append(b.allocator, minilzo.artifact("minilzo"));
|
|
}
|
|
|
|
var lz4 = b.dependency("lz4", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
try list.append(b.allocator, lz4.artifact("lz4"));
|
|
|
|
var zstd = b.dependency("zstd", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
try list.append(b.allocator, zstd.artifact("zstd"));
|
|
|
|
return list.toOwnedSlice(b.allocator);
|
|
}
|