Skip to content

Zig 0.15.1 #651

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 7 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
workflow_dispatch:

env:
ZIG_VERSION: 0.14.1
ZIG_VERSION: master

jobs:
formatting-check:
Expand Down Expand Up @@ -220,7 +220,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master
- name: Build Website
run: zig build
working-directory: website
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Extract version
run: echo "MICROZIG_VERSION=$(zig build package -- get-version)" >> $GITHUB_ENV
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/drivers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Run Test Suite
working-directory: drivers
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Build linter
working-directory: tools/linter
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-github-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Download and install GitHub CLI
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sim-aviron.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Build
working-directory: sim/aviron
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/tools-regz-wizard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
- name: Setup Zig
uses: mlugg/setup-zig@v2
with:
version: 0.14.1
version: master

- name: Build
working-directory: tools/regz-wizard
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## What version of Zig to use

Zig 0.14.1
Zig master

## Getting Started With MicroZig

Expand Down
8 changes: 6 additions & 2 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,17 @@ const exe_targets: []const std.Target.Query = &.{
pub fn build(b: *Build) void {
const optimize = b.standardOptimizeOption(.{});

const generate_linker_script_exe = b.addExecutable(.{
.name = "generate_linker_script",
const generate_linker_script_mod = b.createModule(.{
.root_source_file = b.path("tools/generate_linker_script.zig"),
.target = b.graph.host,
.optimize = optimize,
});

const generate_linker_script_exe = b.addExecutable(.{
.name = "generate_linker_script",
.root_module = generate_linker_script_mod,
});

generate_linker_script_exe.root_module.addImport(
"build-internals",
b.dependency("build-internals", .{}).module("build-internals"),
Expand Down
5 changes: 4 additions & 1 deletion core/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ pub fn build(b: *std.Build) !void {
const unit_tests = b.addTest(.{
// We're not using the `start.zig` entrypoint as it overrides too much
// configuration
.root_source_file = b.path("src/microzig.zig"),
.root_module = b.createModule(.{
.root_source_file = b.path("src/microzig.zig"),
.target = b.graph.host,
}),
});

const run_unit_tests = b.addRunArtifact(unit_tests);
Expand Down
1 change: 0 additions & 1 deletion drivers/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ pub fn build(b: *std.Build) void {

const test_suite = b.addTest(.{
.root_module = drivers_mod,
.target = b.graph.host,
});

const run_tests = b.addRunArtifact(test_suite);
Expand Down
12 changes: 7 additions & 5 deletions modules/foundation-libc/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ pub fn build(b: *std.Build) void {
b.getInstallStep().dependOn(validation_step);
}

const libc = b.addStaticLibrary(.{
const libc = b.addLibrary(.{
.name = "foundation",
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/libc.zig"),
.single_threaded = single_threaded,
.root_module = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/libc.zig"),
.single_threaded = single_threaded,
}),
});

libc.addIncludePath(b.path("include"));
Expand Down
4 changes: 2 additions & 2 deletions tools/esp-image/build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
.version = "0.1.0",
.dependencies = .{
.clap = .{
.url = "git+https://github.com/Hejsil/zig-clap.git#e47028deaefc2fb396d3d9e9f7bd776ae0b2a43a",
.hash = "clap-0.10.0-oBajB434AQBDh-Ei3YtoKIRxZacVPF1iSwp3IX_ZB8f0",
.url = "git+https://github.com/Hejsil/zig-clap.git#5289e0753cd274d65344bef1c114284c633536ea",
.hash = "clap-0.11.0-oBajB-HnAQDPCKYzwF7rO3qDFwRcD39Q0DALlTSz5H7e",
},
},
.paths = .{
Expand Down
65 changes: 36 additions & 29 deletions tools/esp-image/src/elf2image.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ pub const std_options: std.Options = .{
.log_level = .warn,
};

var elf_file_reader_buf: [1024]u8 = undefined;
var output_writer_buf: [1024]u8 = undefined;

pub fn main() !void {
var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
defer _ = debug_allocator.deinit();
Expand All @@ -26,7 +29,10 @@ pub fn main() !void {
\\
);

var diag = clap.Diagnostic{};
const stderr = std.fs.File.stderr();
var stderr_writer = stderr.writer(&.{});

var diag: clap.Diagnostic = .{};
var res = clap.parse(clap.Help, &args, .{
.u16 = clap.parsers.int(u16, 10),
.str = clap.parsers.string,
Expand All @@ -38,13 +44,14 @@ pub fn main() !void {
.diagnostic = &diag,
.allocator = allocator,
}) catch |err| {
diag.report(std.io.getStdErr().writer(), err) catch {};
diag.report(&stderr_writer.interface, err) catch {};
return err;
};
defer res.deinit();

if (res.args.help != 0)
return clap.help(std.io.getStdErr().writer(), clap.Help, &args, .{});
if (res.args.help != 0) {
return clap.help(&stderr_writer.interface, clap.Help, &args, .{});
}

const elf_path = res.positionals[0] orelse return error.MissingInputFile;
const output_path = res.args.output orelse return error.MissingOutputFile;
Expand All @@ -64,28 +71,29 @@ pub fn main() !void {

const elf_file = try std.fs.cwd().openFile(elf_path, .{});
defer elf_file.close();
const elf_header = try std.elf.Header.read(elf_file);
var elf_file_reader = elf_file.reader(&elf_file_reader_buf);
const elf_header = try std.elf.Header.read(&elf_file_reader.interface);

const entry_point: u32 = @intCast(elf_header.entry);

var flash_segments: std.ArrayListUnmanaged(Segment) = .empty;
var flash_segments: std.ArrayList(Segment) = .empty;
defer flash_segments.deinit(allocator);
defer for (flash_segments.items) |segment| {
segment.deinit(allocator);
};

var ram_segments: std.ArrayListUnmanaged(Segment) = .empty;
var ram_segments: std.ArrayList(Segment) = .empty;
defer ram_segments.deinit(allocator);
defer for (ram_segments.items) |segment| {
segment.deinit(allocator);
};

{
var info_list: std.ArrayListUnmanaged(SegmentInfo) = .empty;
var info_list: std.ArrayList(SegmentInfo) = .empty;
defer info_list.deinit(allocator);

if (use_segments) {
var it = elf_header.program_header_iterator(elf_file);
var it = elf_header.iterateProgramHeaders(&elf_file_reader);
while (try it.next()) |hdr| {
if (hdr.p_type == std.elf.PT_LOAD and hdr.p_memsz > 0 and hdr.p_filesz > 0) {
try info_list.append(allocator, .{
Expand All @@ -96,7 +104,7 @@ pub fn main() !void {
}
}
} else {
var it = elf_header.section_header_iterator(elf_file);
var it = elf_header.iterateSectionHeaders(&elf_file_reader);
while (try it.next()) |hdr| {
if (hdr.sh_type == std.elf.SHT_PROGBITS and hdr.sh_flags & std.elf.SHF_ALLOC != 0 and hdr.sh_size > 0) {
try info_list.append(allocator, .{
Expand Down Expand Up @@ -139,7 +147,7 @@ pub fn main() !void {
std.log.debug("ram segment at addr 0x{x} of size 0x{x}", .{ segment.addr, segment.size });
}

var segment_data: std.ArrayListUnmanaged(u8) = .empty;
var segment_data: std.ArrayList(u8) = .empty;
defer segment_data.deinit(allocator);

var segment_count: u8 = 0;
Expand Down Expand Up @@ -175,12 +183,9 @@ pub fn main() !void {

const output_file = try std.fs.cwd().createFile(output_path, .{});
defer output_file.close();
const output_file_writer = output_file.writer();
var output_file_writer = output_file.writer(&.{});

var sha256: Sha256 = .init(.{});

var multi_writer = std.io.multiWriter(.{ output_file_writer, sha256.writer() });
const multi_writer_writer = multi_writer.writer();
var sha256_hasher = output_file_writer.interface.hashed(Sha256.init(.{}), &output_writer_buf);

const file_header: FileHeader = .{
.number_of_segments = segment_count,
Expand All @@ -199,24 +204,26 @@ pub fn main() !void {
.hash = !no_digest,
};

try file_header.write_to(multi_writer_writer);
try extended_file_header.write_to(multi_writer_writer);
try file_header.write_to(&sha256_hasher.writer);
try extended_file_header.write_to(&sha256_hasher.writer);

try multi_writer_writer.writeAll(segment_data.items);
try sha256_hasher.writer.writeAll(segment_data.items);

// TODO: Add secure boot option (v1 or v2) and append a signature if enabled.

const position = try output_file.getPos();
const padding: [16]u8 = @splat(0);
try multi_writer_writer.writeAll(padding[0 .. 15 - position % 16]);
try multi_writer_writer.writeByte(checksum);
try sha256_hasher.writer.flush(); // flush before getting the position
try sha256_hasher.writer.splatByteAll(0, 15 - output_file_writer.pos % 16);
try sha256_hasher.writer.writeByte(checksum);

try sha256_hasher.writer.flush();

if (!no_digest) {
try output_file_writer.writeAll(&sha256.finalResult());
try output_file_writer.interface.writeAll(&sha256_hasher.hasher.finalResult());
try output_file_writer.interface.flush();
}
}

fn do_segment_merge(allocator: std.mem.Allocator, segment_list: *std.ArrayListUnmanaged(Segment)) !void {
fn do_segment_merge(allocator: std.mem.Allocator, segment_list: *std.ArrayList(Segment)) !void {
if (segment_list.items.len >= 2) {
var i: usize = segment_list.items.len - 1;
while (i > 0) : (i -= 1) {
Expand Down Expand Up @@ -292,7 +299,7 @@ const FileHeader = struct {
flash_freq: FlashFreq,
entry_point: u32,

pub fn write_to(self: FileHeader, writer: anytype) !void {
pub fn write_to(self: FileHeader, writer: *std.Io.Writer) !void {
try writer.writeAll(&.{
0xE9,
self.number_of_segments,
Expand All @@ -315,7 +322,7 @@ const ExtendedFileHeader = struct {
max_rev: u16,
hash: bool,

pub fn write_to(self: ExtendedFileHeader, writer: anytype) !void {
pub fn write_to(self: ExtendedFileHeader, writer: *std.Io.Writer) !void {
try writer.writeByte(@intFromEnum(self.wp));
try writer.writeInt(u24, self.flash_pins_drive_settings, .little);
try writer.writeInt(u16, @intFromEnum(self.chip_id), .little);
Expand Down Expand Up @@ -441,7 +448,7 @@ test "Segment.get_padding_len" {
test "do_segment_merge" {
var allocator = std.testing.allocator;

var segment_list: std.ArrayListUnmanaged(Segment) = .empty;
var segment_list: std.ArrayList(Segment) = .empty;
defer segment_list.deinit(allocator);
defer for (segment_list.items) |segment| {
segment.deinit(allocator);
Expand Down Expand Up @@ -480,7 +487,7 @@ test "Segment.write_to" {

@memset(segment.data, 'a');

var segment_data: std.ArrayListUnmanaged(u8) = .empty;
var segment_data: std.ArrayList(u8) = .empty;
defer segment_data.deinit(allocator);
const writer = segment_data.writer(allocator);

Expand Down
2 changes: 1 addition & 1 deletion tools/printer/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ pub fn build(b: *std.Build) void {
if (b.option(bool, "rebuild-test-elf", "rebuild the test program elf") == true) {
const mz_dep = b.lazyDependency("microzig", .{}) orelse return;

const mb = @import("microzig").MicroBuild(.{
const mb = b.lazyImport(@This(), "microzig").?.MicroBuild(.{
.rp2xxx = true,
}).init(b, mz_dep) orelse return;

Expand Down
2 changes: 1 addition & 1 deletion tools/printer/build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
.url = "git+https://github.com/ZigEmbeddedGroup/serial#ad338133eda8d86332718bbdc58c641a66307c84",
.hash = "serial-0.0.1-PoeRzI20AABcp4FffI6HXKOL6LcGPKmeqfN4Bna4-YYm",
},
// use to compile the test program
// used to compile the test program
.microzig = .{ .path = "../..", .lazy = true },
},
.paths = .{
Expand Down
Loading
Loading