abseil-cpp now depends on `pthread.h`, it previously didn't. But this appears to
be a bug in abseil of sorts, because if you have `ABSL_FORCE_THREAD_IDENTITY_MODE` set
to `ABSL_THREAD_IDENTITY_MODE_USE_CPP11` it doesn't appear to be used/needed.
[Zig doesn't ship with pthread for the MinGW / `x86_64-windows-gnu` target](https://github.com/ziglang/zig/issues/10989),
and so the header is missing - but we don't actually need it, so we just add an
empty file to prevent the missing include error.
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
`mach/gpu` has an example of how to use the bindings: https://github.com/hexops/mach/tree/main/gpu/examples
The example here is largely duplicative of that, and doesn't currently build. It would need to be updated
to reflect the latest Dawn example code.
Instead, let's keep `mach/gpu-dawn` just scoped to building Dawn with Zig. `mach/gpu` will deal with using it.
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
* Add shared option which builds glfw into it's own shared library
* glfw: separate shared test build step
* glfw: cleanup shared linking
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
Co-authored-by: Stephen Gutekanst <stephen@hexops.com>
Prior to this change, cross-compiling Mach to other OSes was not working due to a regression.
e.g. to windows:
```
zig build -Dtarget=x86_64-windows run-example-boids
LLD Link... error(link): DLL import library for -ldxguid not found
error: DllImportLibraryNotFound
error: example-boids...
```
The problem was that one build step may invoke `getSdkRoot` and the target might be for say macOS,
since it's building e.g. GLFW for macOS as the target of tests, and `getSdkRoot` would cache the
SDK root _forever_ as being the macOS SDK (in an attempt to avoid running the various git commands
needed to resolve the SDK root multiple times, which slows builds down.)
We instead need to cache the SDK root per step, because the target may not be the same.
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This issue with the previous (commented out) implementation was that by
remaking the iterator each loop, the same element was attempted to be
freed each iteration, as the element was not actually removed from the
map.