Commit Graph

854 Commits

Author SHA1 Message Date
Andrew Kelley c3212ed7d5 configurer: implement serializing InstallDir 2026-05-07 22:43:20 -07:00
Andrew Kelley c8665d59f2 configurer: update TranslateC step
and get zig's build.zig script fully compiling
2026-05-07 18:08:31 -07:00
Andrew Kelley c310049c09 maker: update ObjCopy to new system 2026-05-07 15:32:02 -07:00
Andrew Kelley 096c6b1b80 std.Build: port UpdateSourceFiles step to new system 2026-05-06 23:17:34 -07:00
Andrew Kelley fe4709209e more progress towards zig's build.zig compiling 2026-05-04 20:11:13 -07:00
Andrew Kelley 13eb50a6e6 std.Build: port Fmt step to new system
and integrate properly with LazyPath
2026-05-04 20:11:13 -07:00
Andrew Kelley 8b8f04e2f0 progress towards compiling zig's build script 2026-05-04 20:11:13 -07:00
Andrew Kelley b31b2ae9ea configurer: get InstallDir and Options steps compiling 2026-05-04 20:11:13 -07:00
Andrew Kelley 8162e405f3 Configuration: implement Storage.UnionList.tag 2026-05-04 20:11:13 -07:00
Andrew Kelley 560e2bcf6f configurer: fix compilation in the presence of dependencies 2026-05-04 20:11:13 -07:00
Andrew Kelley 9db6b01a50 build system: implement options
options which are passed to configurer and therefore observable by the
build script are added to the cache hash. A sorted list is hashed since
they are unordered.
2026-05-04 20:11:13 -07:00
Andrew Kelley de455ee0ae build system: remove unneeded args from configurer
not needed:
* zig exe path
* zig lib dir
* build root
* local cache root
* global cache root
2026-05-04 20:11:13 -07:00
Andrew Kelley 74862f6cdd rename addCliExtras to addPassthruArgs
finally, a good name
2026-05-04 20:11:13 -07:00
Andrew Kelley 6689b2b1a8 rename addBuildPositionals to addCliExtras
they don't have to be positionals
2026-05-04 20:11:13 -07:00
Andrew Kelley c78de5b3ed build system: implement cli positionals 2026-05-04 20:11:13 -07:00
Andrew Kelley f229bf9a8d maker: finish porting over run step 2026-05-04 20:10:27 -07:00
Andrew Kelley 8fac5151bc maker: port Run step logic up to spawnChildAndCollect 2026-05-04 20:10:27 -07:00
Andrew Kelley a9c7bccf5a maker: port more of Run step over 2026-05-04 20:10:27 -07:00
Andrew Kelley b0a4bb5657 fix compilation errors from rebase conflicts 2026-05-04 20:10:27 -07:00
Andrew Kelley 8f6e256df2 maker: upgrade some of the run step logic 2026-05-04 20:10:27 -07:00
Andrew Kelley a4b194583d configurer: serialize all data from run steps 2026-05-04 20:10:27 -07:00
Andrew Kelley b5802b5772 compiler: fix compilation errors 2026-05-04 20:10:27 -07:00
Andrew Kelley e43c2cf859 configurer: back out the string interning from prev commit
partial revert of 2d3fbb687fba1ed52b42998ac4dcbf2a042644ea - see its
commit message for reasoning
2026-05-04 20:10:27 -07:00
Andrew Kelley 7534e832d0 configurer: make string duplication also intern
I had this idea to make b.dupe() also intern the strings since they will
be ultimately serialized to Configuration. Unfortunately the idea does
not work, because although a process-lived arena is used for the
string_bytes ArrayList of the Configuration.Wip, when the ArrayList is
resized, Allocator.free() memsets the freed memory to undefined, even
though it still technically lives due to being in a process-scoped
arena. So this commit will need to be partially reverted. However, I
kept it for posterity, and there are some more changes which I will now
note below.

- dupePaths: don't rewrite backslashes to forward slashes. backslashes
  are valid in filenames on non-windows systems.
- always compile configurer in single-threaded mode
- use arena allocator for everything, no gpa for anything
- construct the Configuration.Wip instance earlier, so some stuff can be
  prepopulated as desired.
- don't forget to flush
2026-05-04 20:10:27 -07:00
Andrew Kelley 45d1ad1db8 maker: implement InstallArtifact and InstallFile 2026-05-04 20:10:27 -07:00
Andrew Kelley 1d280c7a14 maker: finish migrating compile step make logic 2026-05-04 20:10:27 -07:00
Andrew Kelley c78f182136 Configuration: refactor maxInt(u32) 2026-05-04 20:10:27 -07:00
Andrew Kelley b0e3d6d028 Configuration: fix bad serialization of PrefixedList and MultiList
Length zero is still serialized because there is no flag bit to hide the
length.
2026-05-04 20:10:27 -07:00
Andrew Kelley df324df3ad maker: finish migrating most of CLI lowering code 2026-05-04 20:10:27 -07:00
Andrew Kelley 7de77b8721 maker: progress towards lowering zig cli args 2026-05-04 20:10:27 -07:00
Andrew Kelley 1369f51bb1 std: rename zig.Configuration to Build.Configuration 2026-05-04 20:10:27 -07:00
Andrew Kelley d1904e00ae build system: implement LazyPath
Number of generated files is recorded in serialized Configuration. Maker
preallocates array of generated files so that loads and stores can be
synchronization-free (protected by the dependency tree ordering).

More progress on Compile Step Zig CLI lowering.
2026-05-04 20:10:27 -07:00
Andrew Kelley ede8a181e2 maker: progress towards lowering Compile Step CLI args
next thing to do is figure out how LazyPath is supposed to work now.
something like this:
* each Step that provides LazyPath objects has a setLazyPath and
  getLazyPath function which takes a tagged union identifying which one
  to access
* steps that fulfill LazyPath objects can freely call setLazyPath
  without obtaining a lock because the dependency graph prevents
  simultaneous access.
* similarly, steps that access LazyPath results can freely call
  getLazyPath without obtaining a lock, because after modification,
  there may be simultaneous reads from dependencies but they will all be
  read-only
* a fulfilled LazyPath object is a read-only std.Build.Cache.Path.
2026-05-04 20:10:27 -07:00
Andrew Kelley 218b6337a2 Configuration: serialize remaining Module information
also handle properly Module circular references and introduce a general
deduplication mechanism.
2026-05-04 20:10:27 -07:00
Andrew Kelley 0c32dc795f Configuration: implement UnionList storage 2026-05-04 20:10:27 -07:00
Andrew Kelley ebc4606935 std.Build.Configure: implement FlagOptional serialization 2026-05-04 20:09:00 -07:00
Andrew Kelley d415908f6b zig build: make --error-limit globally configurable
still overridable by individual Compile steps
2026-05-04 20:09:00 -07:00
Andrew Kelley 13db9ce4f3 Maker.Step.Compile: progress towards lowering zig args 2026-05-04 20:09:00 -07:00
Andrew Kelley 0de7297d83 massage Step code into compiling 2026-05-04 20:09:00 -07:00
Andrew Kelley 6a0f441f00 make runner: prepare steps for execution 2026-05-04 20:06:12 -07:00
Andrew Kelley a87bf37b8a configure runner: serialization of Module 2026-05-04 20:04:15 -07:00
Andrew Kelley b9f3c19b0b configure runner: serialization of compile step 2026-05-04 20:04:15 -07:00
Andrew Kelley 159f74e359 configure runner: add Step.Run serialization 2026-05-04 20:04:15 -07:00
Andrew Kelley 1880148e86 configure runner: implement serialization of InstallArtifact 2026-05-04 20:04:15 -07:00
Andrew Kelley c92aee3da1 zig build: configure runner basics implemented 2026-05-04 20:04:15 -07:00
Andrew Kelley 2cdb8a7650 configure/make phase process separation sketch
`zig build` CLI kicks off async task to compile optimized make runner
executable, does fetch, compiles configure process in debug mode, then
checks cache for the CLI options that affect configuration only. On hit,
skips building/running the configure script. On miss, runs it, saves
result in cache.

The cached artifact is a "configuration" file - a serialized build step
graph, which also includes unlazy package dependencies and additional
file system dependencies.

Next, awaits task for compiling optimized make runner executable, passes
configuration file to it. Make runner is responsible for the CLI after
that point.

For the use case of detecting when `git describe` needs to be rerun, we
can allow the configure process to manually add a file system mtime
dependencies, in this case it would be on `.git/index` and `.git/HEAD`.

This will enable two optimizations:

1. The bulk of the build system will not be rebuilt when user changes
   their configure script.

2. The user logic can be completely bypassed when the CLI options
   provided do not affect the configure phase - even if they affect the
   make phase.

Remaining tasks in the branch:

* some stuff in `zig build` CLI is `@panic("TODO")`.
* configure runner needs to implement serialization of build graph using
  std.zig.Configuration
* build runner needs to be transformed into make runner, consuming
  configuration file as input and deserializing the step graph.
* introduce depending only on a file's metadata and *not* its contents
  into the cache system, and add a std.Build API for using it.
2026-05-04 20:04:14 -07:00
GasInfinity 1deb029a66 std: rename bit_set variants and deprecate the managed one.
* aliases and deprecates the previous names.
* also update callsites to use the non-deprecated declarations.
2026-04-27 16:46:26 +02:00
Andrew Kelley e7d74e49b0 declare linker test bankruptcy
The active contributors and maintainers of Zig's linker code have
generally found the current linker test harness to be cumbersome. The
tests require a lot of maintenance, but do not provide a lot of
coverage, and when they fail it is painful to troubleshoot.

Furthermore, as part of working on #31691, I don't want to port over the
CheckObject step, because I don't like the code anyway.

The plan forward is to start enhancing `zig objdump` to assist in
linker development, as well as using it as the basis for snapshot
testing.

We absolutely need linker test coverage, but we need to try to improve
these things about the next attempt:
* less effort to create and maintain tests
* less CPU overhead - we should be able to add a lot of tests without
  adding a lot of CI time.
* more helpful failures. A failed linker test should provide the next
  steps a developer can take to understand why the test failed.
* a goal of porting over all of LLD's test suite, or at least the good
  ones.

I'm not going to open an issue to track the lost linker test coverage,
because there was already so much lack of coverage for linker stuff.

However I will open issues to track this lost coverage:
* the deleted checks from test/standalone/glibc_compat/build.zig
* the deleted checks from test/standalone/compiler_rt_panic/build.zig
* the deleted checks from test/standalone/ios/build.zig
2026-04-26 00:15:07 +02:00
Kendall Condon 332d632ccc collect all stderr on fuzzing crash 2026-04-22 20:54:17 -04:00
Kendall Condon 122e0c26f2 properly scan through inputs when saving fuzzing crash 2026-04-22 20:54:17 -04:00