add lib and module stuff

This commit is contained in:
Hamcha 2024-05-10 19:36:01 +02:00
parent 7d3604957e
commit ae9b3e5eb1
Signed by: hamcha
GPG key ID: 1669C533B8CF6D89
3 changed files with 34 additions and 7 deletions

View file

@ -24,6 +24,8 @@ pub fn build(b: *std.Build) void {
const run_step = b.step("run", "Run the app"); const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step); run_step.dependOn(&run_cmd.step);
addModule(b);
// Testing // Testing
const elf_unit_tests = b.addTest(.{ const elf_unit_tests = b.addTest(.{
.root_source_file = b.path("src/elf.zig"), .root_source_file = b.path("src/elf.zig"),
@ -36,3 +38,10 @@ pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Run unit tests"); const test_step = b.step("test", "Run unit tests");
test_step.dependOn(&run_elf_unit_tests.step); test_step.dependOn(&run_elf_unit_tests.step);
} }
/// Module function for depending on the elphin module
pub fn addModule(b: *std.Build) void {
_ = b.addModule("elphin", .{
.root_source_file = .{ .path = "src/lib.zig" },
});
}

22
src/lib.zig Normal file
View file

@ -0,0 +1,22 @@
const elf = @import("elf.zig");
const dol = @import("dol.zig");
pub const ELFError = elf.ELFError;
pub const ELFSegments = elf.ELFSegments;
pub const readELF = elf.readELF;
pub const createDOLMapping = dol.createDOLMapping;
pub const writeDOL = dol.writeDOL;
/// Converts an ELF file to a DOL file.
/// `input` and `output` must be open files.
pub fn convert(input: anytype, output: anytype) !void {
// Read input
const map = try elf.readELF(input);
// Align segments to 64 byte boundaries
const dolMap = dol.createDOLMapping(map);
// Write header and copy over segments from input
try dol.writeDOL(dolMap, input, output);
}

View file

@ -1,6 +1,5 @@
const std = @import("std"); const std = @import("std");
const elf = @import("elf.zig"); const lib = @import("lib.zig");
const dol = @import("dol.zig");
pub fn main() !void { pub fn main() !void {
// Get allocator // Get allocator
@ -23,13 +22,10 @@ pub fn main() !void {
// Read input // Read input
const input = try std.fs.cwd().openFile(inputPath, .{}); const input = try std.fs.cwd().openFile(inputPath, .{});
defer input.close(); defer input.close();
const map = try elf.readELF(input);
// Align segments to 64 byte boundaries
const dolMap = dol.createDOLMapping(map);
// Write header and copy over segments from input // Write header and copy over segments from input
const output = try std.fs.cwd().createFile(outputPath, .{}); const output = try std.fs.cwd().createFile(outputPath, .{});
defer output.close(); defer output.close();
try dol.writeDOL(dolMap, input, output);
try lib.convert(input, output);
} }