BRANCH_TODO

 * build & link against compiler-rt
 * build & link against freestanding libc
 * Cache integration for stage1 zig code compilation
 * `zig test`
 * `zig build`
 * `-ftime-report`
 *  -fstack-report               print stack size diagnostics\n"
 *  -fdump-analysis              write analysis.json file with type information\n"
 *  -femit-docs                  create a docs/ dir with html documentation\n"
 *  -fno-emit-docs               do not produce docs/ dir with html documentation\n"
 *  -femit-asm                   output .s (assembly code)\n"
 *  -fno-emit-asm                (default) do not output .s (assembly code)\n"
 *  -femit-llvm-ir               produce a .ll file with LLVM IR\n"
 *  -fno-emit-llvm-ir            (default) do not produce a .ll file with LLVM IR\n"
 *  --cache-dir [path]           override the local cache directory\n"
 * make sure zig cc works
   - using it as a preprocessor (-E)
   - try building some software
 * support rpaths in ELF linker code
 * repair @cImport
 * add CLI support for a way to pass extra flags to c source files
 * capture lld stdout/stderr better
 * musl
 * mingw-w64
 * use global zig-cache dir for crt files
 * MachO LLD linking
 * COFF LLD linking
 * WASM LLD linking
 * implement proper parsing of LLD stderr/stdout and exposing compile errors
 * implement proper parsing of clang stderr/stdout and exposing compile errors
 * implement proper compile errors for failing to build glibc crt files and shared libs
 * improve the stage2 tests to support testing with LLVM extensions enabled
 * multi-thread building C objects
 * support cross compiling stage2 with `zig build`
 * implement emit-h in stage2
 * implement -fno-emit-bin
 * audit the base cache hash
 * --main-pkg-path
 * audit the CLI options for stage2
 * `zig init-lib`
 * `zig init-exe`
 * `zig run`
 * restore error messages for stage2_add_link_lib

 * implement serialization/deserialization of incremental compilation metadata
 * incremental compilation - implement detection of which source files changed
 * improve the cache hash logic for c objects with respect to extra flags and file parameters
 * LLVM codegen backend: put a sub-arch in the triple in some cases
 * implement an LLVM backend for stage2
 * implement outputting dynamic libraries in self-hosted linker
 * implement outputting static libraries (archive files) in self-hosted linker
 * support linking against object files in self-hosted linker
 * avoid invoking lld when it's just 1 object file (the `zig cc -c` case)
 * `zig fmt --check` should output to stdout not stderr.
 * main.zig: If there was an argsAllocZ we could avoid this allocation
 * improve robustness of response file parsing
 * there are a couple panic("TODO") in clang options parsing
 * std.testing needs improvement to support exposing directory path for its tmp dir (look for "bogus")
 * integrate target features into building assembly code
 * libc_installation.zig: make it look for msvc only if msvc abi is chosen
 * switch the default C ABI for windows to be mingw-w64
 * port windows_sdk.cpp to zig
 * change glibc log errors to normal exposed compile errors
 * update Package to use Compilation.Directory in create()
   - skip LLD caching when bin directory is not in the cache (so we don't put `id.txt` into the cwd)
     (maybe make it an explicit option and have main.zig disable it)
   - make it possible for Package to not openDir and reference already existing resources.
 * rename src/ to src/stage1/
 * rename src-self-hosted/ to src/
 * improve Directory.join to only use 1 allocation in a clean way.
 * tracy builds with lc++
 * some kind of "zig identifier escape" function rather than unconditionally using @"" syntax
   in builtin.zig
 * rename Mode to OptimizeMode