Closed slimsag closed 10 months ago
First-order dependencies are almost finished, awesome! Remaining blockers:
addPaths
, instead of a single function? We'll have to try updating a package with xcode-frameworks to learn why.spirv-cross
, directx-headers
, why? Additionally, let's try eliminating direct3d-headers in favor of directx-headers during this update process.
Renamed:
var -> const
changes must be made, if you have ZLS installed and open each Zig file and save, it will do it automatically for you.std.build.Builder
-> std.Build
std.build.RunStep
-> std.Build.Step.Run
std.build.CompileStep
-> std.Build.Step.Compile
std.build.ModuleDependency
-> std.Build.Module.Import
std.zig.CrossTarget
-> std.Build.ResolvedTarget
std.mem.copy(T, dst, src)
-> @memcpy(dst, src)
std.fs.openIterableDirAbsolute
-> std.fs.openDirAbsolute(dir, .{.iterate = true})
target.toTarget().os.tag
-> target.result.os.tag
step.target_info
-> step.rootModuleTarget()
target.getOsTag()
-> target.os.tag
target.getAbi()
-> target.abi
target.getCpuArch()
-> target.cpu.arch
target.isWindows()
-> target.os.tag == .windows
std.atomic.Atomic(T)
-> std.atomic.Value(T)
step.addModule("foo", bar)
-> step.root_module.addImport("foo", bar)
.dependencies = &.{}
-> .imports = &.{}
comptime const foo
-> const foo
Error resolutions:
error: no field named 'source_file' in struct 'Build.Module.CreateOptions'
Change .source_file
-> .root_source_file
error: expected type expression, found 'invalid bytes'
error: expected type expression, found 'invalid bytes'
#include "hb-aat-layout.cc"
^
src/harfbuzz.cc:1:1: note: invalid byte: '#'
.root_source_file
can no longer be C/C++ files, only .zig
. Remove .root_source_file
entirely and add the C/C++ file to the module using e.g. this instead:
lib.addCSourceFile(.{ .file = .{ .path = "src/harfbuzz.cc" } });
panic: @memcpy arguments have non-equal lengths
Ensure both arguments to memcpy have the same lengths. For example a previously valid copy can be updated like this:
-@memcpy(title[0..], opt.title);
+@memcpy(title[0..opt.title.len], opt.title);
- unnecessary
var -> const
changes must be made, if you have ZLS installed and open each Zig file and save, it will do it automatically for you.
That feature has been removed from autofix in https://github.com/zigtools/zls/pull/1652 so it is only an ordinary code action. The autofix feature has also been disabled by default in https://github.com/zigtools/zls/pull/1657 😭.
gnused, bash alternative
if [[ ! -d "$1" ]]; then
printf 'error: no such directory: %s\n' "$1"
exit 1
fi
cd "$1"
has_wontfix=0
while {
IFS=$':' read -r file line col msg;
} do
if [[ "$msg" ]]; then
case "$msg" in
*"local variable is never mutated")
printf 'autofix: %s\n' "$file:$line:$col:$msg" 1>&2
sed -i "''${line}s/var/const/" "$file"
;;
*)
printf 'wontfix: %s\n' "$file:$line:$col:$msg" 1>&2
has_wontfix=1
;;
esac
fi
done < <(zig build 2>&1 | grep "error:")
exit $has_wontfix
Super useful!!
A couple extra things I had to do when updating Tides (from a pretty old Zig build):
std.builtin.Endian.Little
-> little
Actually not sure if this one is correct but I guess so?
comptime var arg_count = ecsu.meta.argCount(function);
-> const arg_count = comptime ecsu.meta.argCount(function);
std.zig.system.NativeTargetInfo.detect(target)
-> std.zig.system.resolveTargetQuery(target.query)
exe.linkSystemLibraryName("imm32");
-> exe.linkSystemLibrary("imm32");
Periodically we nominate a new Zig nightly version to be the version that Mach targets, and begin the meticulous process of updating every Mach project to use that new version.
This is the tracking issue to do that for the next scheduled nomination (see the date in the issue title.)
You may have been linked to this issue because you sent a pull request to update a Mach project to use a new Zig API - if that is the case we do appreciate the PR and will look at merging it once this process begins. In the meantime, your PR may stay open for a while. You can either use a fork of the project, or use the version of Zig that Mach currently supports.
Update process
machengine.org
repositorystatic/zig
folder,wrench script nominate-zig-index-update nominate 2024.1.0-mach-wip
has been ran and theindex.json
has been updated.!wrench schedule-now update-zig-version
) has created new pull requests to update the Zig version used in CI of all our projects, and it matches index.json.**IN-PROGRESS:** This version is currently being nominated, see [the tracking issue](https://github.com/hexops/mach/issues/1135) for details. Once everything looks good, the new Zig version is confirmed to be working with Mach, we will declare success, close the issue, and remove this in-progress warning.
.Beginning the process of nominating a new Zig version! (you should wait to upgrade until we've updated everything to confirm it works) $GITHUB_ISSUE
!wrench script-all install-zig
) has updated the Zig version used by self-hosted GitHub actions runners. TODO this needs some work..zigversion
file https://github.com/hexops/mach/blob/main/.zigversion has been updated.machengine.org
repositorystatic/zig
folder,wrench script nominate-zig-index-update finalize 2024.1.0-mach-wip
has been ran and theindex.json
has had-wip
removed and themach-latest
entry has been updated.**IN-PROGRESS**
warning in the Nomination history has been removed.First-order projects
These projects have zero
build.zig.zon
dependencies, we update them first - and in any order.Second-order projects
These projects have dependencies on other projects. We update them in the exact order below, top-to-bottom.