Skip to content

Commit 9e4fe6c

Browse files
authored
Refactor printer lib and tests (#668)
1 parent 11b68c5 commit 9e4fe6c

14 files changed

+352
-398
lines changed

tools/printer/build.zig

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ pub fn build(b: *std.Build) void {
6262
}),
6363
});
6464

65-
const test_exe = b.addExecutable(.{
65+
const test_runner_exe = b.addExecutable(.{
6666
.name = "test",
6767
.root_module = b.createModule(.{
6868
.root_source_file = b.path("tests/test.zig"),
@@ -75,39 +75,67 @@ pub fn build(b: *std.Build) void {
7575
}),
7676
});
7777

78-
const generate_test_data_run = b.addRunArtifact(generate_test_data_exe);
79-
if (b.option(bool, "rebuild-test-elf", "rebuild the test program elf") == true) {
80-
const mz_dep = b.lazyDependency("microzig", .{}) orelse return;
78+
const test_dwarf32_exe = b.addExecutable(.{
79+
.name = "test_program.dwarf32",
80+
.root_module = b.createModule(.{
81+
.root_source_file = b.path("tests/test_program.zig"),
82+
.optimize = .Debug,
83+
.target = b.resolveTargetQuery(.{
84+
.os_tag = .linux,
85+
.cpu_arch = .x86_64,
86+
.abi = .gnu,
87+
.ofmt = .elf,
88+
}),
89+
.dwarf_format = .@"32",
90+
.strip = false,
91+
}),
92+
});
8193

82-
const mb = b.lazyImport(@This(), "microzig").?.MicroBuild(.{
83-
.rp2xxx = true,
84-
}).init(b, mz_dep) orelse return;
94+
const test_dwarf64_exe = b.addExecutable(.{
95+
.name = "test_program.dwarf64",
96+
.root_module = b.createModule(.{
97+
.root_source_file = b.path("tests/test_program.zig"),
98+
.optimize = .Debug,
99+
.target = b.resolveTargetQuery(.{
100+
.os_tag = .linux,
101+
.cpu_arch = .x86_64,
102+
.abi = .gnu,
103+
.ofmt = .elf,
104+
}),
105+
.dwarf_format = .@"64",
106+
}),
107+
});
85108

86-
generate_test_data_run.addFileArg(blk: {
87-
break :blk mb.add_firmware(.{
88-
.name = "test_program.dwarf32",
89-
.root_source_file = b.path("tests/test_program.zig"),
90-
.optimize = .Debug,
91-
.target = mb.ports.rp2xxx.boards.raspberrypi.pico2_arm,
92-
.dwarf_format = .@"32",
93-
}).get_emitted_elf();
94-
});
109+
const generate_test_data_step = b.step("generate-test-data", "regenerate test data");
110+
const test_step = b.step("test", "test printer");
95111

96-
generate_test_data_run.addFileArg(blk: {
97-
break :blk mb.add_firmware(.{
98-
.name = "test_program.dwarf64",
99-
.root_source_file = b.path("tests/test_program.zig"),
100-
.optimize = .Debug,
101-
.target = mb.ports.rp2xxx.boards.raspberrypi.pico2_arm,
102-
.dwarf_format = .@"64",
103-
}).get_emitted_elf();
104-
});
112+
inline for (&.{ test_dwarf32_exe, test_dwarf64_exe }) |exe| {
113+
register_test(
114+
b,
115+
generate_test_data_step,
116+
generate_test_data_exe,
117+
test_step,
118+
test_runner_exe,
119+
exe,
120+
);
105121
}
122+
}
106123

107-
const generate_test_results_step = b.step("generate-test-data", "regenerate test data");
108-
generate_test_results_step.dependOn(&generate_test_data_run.step);
124+
pub fn register_test(
125+
b: *std.Build,
126+
generate_test_data_step: *std.Build.Step,
127+
generate_test_data_exe: *std.Build.Step.Compile,
128+
test_step: *std.Build.Step,
129+
test_runner_exe: *std.Build.Step.Compile,
130+
test_exe: *std.Build.Step.Compile,
131+
) void {
132+
const generate_test_data_run = b.addRunArtifact(generate_test_data_exe);
133+
generate_test_data_run.addFileArg(test_exe.getEmittedBin());
134+
generate_test_data_run.addFileArg(b.path(b.fmt("tests/{s}.zon", .{test_exe.name})));
135+
generate_test_data_step.dependOn(&generate_test_data_run.step);
109136

110-
const run_tests_run = b.addRunArtifact(test_exe);
111-
const run_tests_step = b.step("test", "test printer");
112-
run_tests_step.dependOn(&run_tests_run.step);
137+
const test_runner_run = b.addRunArtifact(test_runner_exe);
138+
test_runner_run.addFileArg(test_exe.getEmittedBin());
139+
test_runner_run.addFileArg(b.path(b.fmt("tests/{s}.zon", .{test_exe.name})));
140+
test_step.dependOn(&test_runner_run.step);
113141
}

tools/printer/build.zig.zon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
.hash = "serial-0.0.1-PoeRzF60AAAN8Iu0yXTIX-t3DVzsnmN7vWHKM2HA2Zbq",
1010
},
1111
// used to compile the test program
12-
.microzig = .{ .path = "../..", .lazy = true },
12+
// .microzig = .{ .path = "../..", .lazy = true },
1313
},
1414
.paths = .{
1515
"build.zig",

tools/printer/examples/rp2xxx_runner.zig

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ const printer = @import("printer");
33
const serial = @import("serial");
44

55
var elf_file_reader_buf: [1024]u8 = undefined;
6+
var in_stream_buf: [1024]u8 = undefined;
67
var out_stream_buf: [1024]u8 = undefined;
7-
var printer_writer_buf: [512]u8 = undefined;
88

99
pub fn main() !void {
1010
var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
@@ -24,10 +24,10 @@ pub fn main() !void {
2424
defer elf_file.close();
2525
var elf_file_reader = elf_file.reader(&elf_file_reader_buf);
2626

27-
var elf = try printer.Elf.init(allocator, &elf_file_reader);
27+
var elf: printer.Elf = try .init(allocator, &elf_file_reader);
2828
defer elf.deinit(allocator);
2929

30-
var debug_info = try printer.DebugInfo.init(allocator, elf);
30+
var debug_info: printer.DebugInfo = try .init(allocator, elf);
3131
defer debug_info.deinit(allocator);
3232

3333
const serial_device = try std.fs.cwd().openFile(serial_device_path, .{});
@@ -36,7 +36,7 @@ pub fn main() !void {
3636
.baud_rate = baud_rate,
3737
});
3838
try serial.flushSerialPort(serial_device, .both);
39-
var in_stream = serial_device.reader(&.{});
39+
var in_stream = serial_device.reader(&in_stream_buf);
4040

4141
{
4242
var flash_cmd: std.process.Child = .init(&.{
@@ -58,20 +58,13 @@ pub fn main() !void {
5858

5959
const stdout = std.fs.File.stdout();
6060
var out_stream = stdout.writer(&out_stream_buf);
61-
const out_tty_config = std.io.tty.detectConfig(stdout);
61+
const out_tty_config = std.Io.tty.detectConfig(stdout);
6262

63-
var printer_writer: printer.Writer = .init(
64-
&printer_writer_buf,
63+
try printer.annotate(
64+
&in_stream.interface,
6565
&out_stream.interface,
6666
out_tty_config,
6767
elf,
6868
&debug_info,
6969
);
70-
71-
while (true) {
72-
_ = try in_stream.interface.stream(&printer_writer.interface, .unlimited);
73-
74-
try printer_writer.interface.flush();
75-
try out_stream.interface.flush();
76-
}
7770
}

tools/printer/src/main.zig

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const std = @import("std");
2+
const builtin = @import("builtin");
23
const printer = @import("printer");
34

45
var elf_file_reader_buf: [1024]u8 = undefined;
6+
var in_stream_buf: [1024]u8 = undefined;
57
var out_stream_buf: [1024]u8 = undefined;
6-
var printer_writer_buf: [512]u8 = undefined;
78

89
pub fn main() !void {
910
var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
@@ -22,37 +23,28 @@ pub fn main() !void {
2223
defer elf_file.close();
2324
var elf_file_reader = elf_file.reader(&elf_file_reader_buf);
2425

25-
var elf = try printer.Elf.init(allocator, &elf_file_reader);
26+
var elf: printer.Elf = try .init(allocator, &elf_file_reader);
2627
defer elf.deinit(allocator);
2728

28-
var debug_info = try printer.DebugInfo.init(allocator, elf);
29+
var debug_info: printer.DebugInfo = try .init(allocator, elf);
2930
defer debug_info.deinit(allocator);
3031

3132
const input_file = if (args.len <= 2 or std.mem.eql(u8, args[2], "-"))
3233
std.fs.File.stdin()
3334
else
3435
try std.fs.cwd().openFile(args[2], .{});
3536
defer input_file.close();
36-
var in_stream = input_file.reader(&.{});
37+
var in_stream = input_file.reader(&in_stream_buf);
3738

3839
const stdout = std.fs.File.stdout();
3940
var out_stream = stdout.writer(&out_stream_buf);
4041
const out_tty_config = std.io.tty.detectConfig(stdout);
4142

42-
var printer_writer: printer.Writer = .init(
43-
&printer_writer_buf,
43+
try printer.annotate(
44+
&in_stream.interface,
4445
&out_stream.interface,
4546
out_tty_config,
4647
elf,
4748
&debug_info,
4849
);
49-
50-
while (true) {
51-
_ = try in_stream.interface.stream(&printer_writer.interface, .unlimited);
52-
53-
// flush the writers
54-
// TODO: Is there a better way to do this?
55-
try printer_writer.interface.flush();
56-
try out_stream.interface.flush();
57-
}
5850
}

0 commit comments

Comments
 (0)