Crafter.Build/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jorijn van der Graaf ab998081e1
fix: give the mingw target a sysroot that holds mingw-w64 alone
Inside the Flatpak the mingw-w64 prefix is the host's /usr, and it was
clang's --sysroot as is. clang's mingw driver takes a sysroot for a tree
that holds mingw-w64 alone, and adds its include/ to the include path
and its lib/ to the library path. For /usr those are the Linux system's
own: every header mingw-w64 lacks came from glibc, and libstdc++'s
<ext/atomicity.h>, finding <sys/single_threaded.h>, had shared_ptr read
__libc_single_threaded, which nothing on Windows defines. Every program
that used one failed to link, among them every Crafter.Graphics Win32
executable, through Crafter.Asset's GLB loader. CRAFTER_MINGW_DIR=/usr
did the same outside the Flatpak (#43).

The sysroot is now MingwSysroot(): a directory in the cache, one per
prefix, holding only links to the prefix's x86_64-w64-mingw32/, lib/gcc/
and lib64/gcc/ (where openSUSE keeps gcc). Through it clang finds
mingw-w64, gcc's version and libstdc++ exactly as it does through the
mingw gcc on PATH, and nothing else. It is made by the first mingw
compile, link or CMake configure of a process, so no other command
writes to the cache for it and a failure to make it is that build's
error. The Toolchain field is now mingwPrefix, since clang never gets
the prefix itself, and it is made absolute when the toolchain is
resolved, as it ends up in link targets and directory names. Messages
keep naming paths under the prefix rather than under the view.

The prefix is also part of the mingw target's VariantId and of its std
PCM directory. Units do not track the std PCM they import: when the
fixed release built in a directory a broken build had left, the std
module was rebuilt and the objects compiled against glibc's headers
were only relinked, failing as before. As with a compiler update, a new
directory is what gets them rebuilt. It also keeps two releases that
share a cache, as the Flatpak's branches do, from rebuilding one std PCM
under each other's PCMs, and two prefixes apart. Without a prefix both
stay as they were: clang's own discovery has not changed.

Two shorter ways do not work: --sysroot=<prefix>/x86_64-w64-mingw32
loses the directory gcc's version names, so <string> is not found, and
clang ignores --gcc-toolchain and --gcc-install-dir for this target.

Fixes #43

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 20:48:06 +01:00
..
CleanProject test(cli): a word after format is a glob, not the clean verb 2026-10-20 19:08:26 +02:00
CompilerWarning refactor: drop Windows host support 2026-10-02 22:03:34 +02:00
ConcurrentCacheRace linting 2026-07-23 01:24:42 +02:00
ConcurrentDependencyReset linting 2026-07-23 01:24:42 +02:00
ConcurrentExternalFetch test(external): race BuildExternal as well as GitFetch 2026-10-31 02:09:24 +01:00
DependencyLink linting 2026-07-23 01:24:42 +02:00
DependencyNotes feat(agents): write AGENTS.md from a tracked AGENTS.template.md 2026-10-31 16:53:42 +01:00
DuplicateModule test: two builds of one module are refused before anything compiles 2026-10-31 05:19:30 +01:00
ExternalArtifactTime fix(external): fetch and build each clone once per build pass 2026-10-31 02:09:24 +01:00
GitSubmodules fix: rebuild and relink on what changed, submodules at their revisions, and mingw found where it is 2026-10-20 20:20:29 +02:00
HelloWorld linting 2026-07-23 01:24:42 +02:00
HostCacheSourceStamp test(host-cache): changed declarations recompile project.so 2026-10-06 16:50:41 +02:00
HostCacheToolchainKey fix: key PCM and project.so freshness on content, not installed mtimes 2026-10-02 23:18:09 +02:00
HostToolingSibling test: a project and its pragma dependency load a shared sibling apart 2026-10-31 05:11:41 +01:00
IncrementalHeaderChange test: header-change incrementality across every compile path 2026-07-31 11:11:49 +00:00
IncrementalInterfaceChange fix: re-resolve module imports before checking staleness 2026-07-30 17:12:24 +00:00
LinkFlagsChange fix: rebuild and relink on what changed, submodules at their revisions, and mingw found where it is 2026-10-20 20:20:29 +02:00
Lint feat(lint): const-local and constexpr-constant rules 2026-07-31 00:50:48 +02:00
MingwMissing fix: rebuild and relink on what changed, submodules at their revisions, and mingw found where it is 2026-10-20 20:20:29 +02:00
ModuleInterface linting 2026-07-23 01:24:42 +02:00
ProjectArgs test: specs and ProjectDependency() in a project file's static initialisers 2026-10-31 05:11:41 +01:00
ProjectDependency test: specs and ProjectDependency() in a project file's static initialisers 2026-10-31 05:11:41 +01:00
RunSingleTestExit linting 2026-07-23 01:24:42 +02:00
Script test: -- reaches neither the project args nor the script 2026-10-31 05:11:41 +01:00
ShaderCompile fix: rebuild and relink on what changed, submodules at their revisions, and mingw found where it is 2026-10-20 20:20:29 +02:00
ShaderIncludeChange fix: rebuild and relink on what changed, submodules at their revisions, and mingw found where it is 2026-10-20 20:20:29 +02:00
ShaderVariantBuild test(shader): variants through the Shader API and through Build() 2026-10-06 16:50:41 +02:00
SharedExternalFetch test(external): tests that share a dependency fetch it once a run 2026-10-31 02:09:24 +01:00
StandardArgs fix: key the host PCM cache on source content, add clean, hash project args 2026-07-30 17:43:09 +00:00
StaticLib linting 2026-07-23 01:24:42 +02:00
SysrootCompileFlags test(sysroot): the compile command forces the sysroot's libc++ 2026-10-06 16:50:41 +02:00
SysrootStdModule test(sysroot): cover the std module source choice for a sysroot build 2026-10-03 16:37:00 +02:00
TestRunnerSpec feat(toolchain): resolve the compiler in one place 2026-10-02 22:26:31 +02:00
ToolchainResolve fix: give the mingw target a sysroot that holds mingw-w64 alone 2026-10-31 20:48:06 +01:00
TransitiveInterfaceChange test change 2026-08-05 05:49:42 +02:00
VariantId test(incremental): a compiler update perturbs VariantId 2026-10-03 20:09:22 +02:00
VersionFlag feat(toolchain): resolve the compiler in one place 2026-10-02 22:26:31 +02:00
WasiBrowserRuntime fix(wasm): what the review found 2026-10-31 06:10:41 +01:00
WasiBrowserRuntimeExit test(wasi-runtime): exit and park, under node 2026-10-31 05:55:32 +01:00
WasiSysrootWithoutExceptions test(wasm): the cases the review found 2026-10-31 06:10:41 +01:00
WasmBuildRefusals test(wasm): the cases the review found 2026-10-31 06:10:41 +01:00
WasmExceptions feat(wasm): link libsetjmp, so setjmp needs no flag 2026-10-31 06:29:52 +01:00
WasmHelloRuns test(wasm): exceptions in a wasm build, and a sysroot without them 2026-10-31 05:54:48 +01:00
WasmVariants fix(wasm): what the review found 2026-10-31 06:10:41 +01:00