make static Dawn library easy to consume in other projects #109
Labels
No labels
CI
all
basisu
blog
bug
build
contributor-friendly
core
correctness
deferred
dev
direct3d-headers
docs
driver-os-issue
duplicate
dxcompiler
editor
examples
experiment
feature-idea
feedback
flac
freetype
gamemode
gkurve
glfw
gpu
gpu-dawn
harfbuzz
help welcome
in-progress
infrastructure
invalid
libmach
linux-audio-headers
long-term
mach
mach.gfx
mach.math
mach.physics
mach.testing
model3d
needs-triage
object
opengl-headers
opus
os/linux
os/macos
os/wasm
os/windows
package-manager
priority
proposal
proposal-accepted
question
roadmap
slipped
stability
sysaudio
sysgpu
sysjs
validating-fix
vulkan-zig-generated
wayland-headers
website
wontfix
wrench
www
x11-headers
xcode-frameworks
zig-update
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
hexops/mach#109
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Spawned from Twitter convo https://twitter.com/rsms/status/1465073396861992961
We are already doing a fair amount of work to enable effortless compilation (and cross-compilation) of Google's Dawn WebGPU implementation, it makes sense to have this exist in a standalone project in which anyone interested in building static Dawn without all the hassle of Google tools, dependencies, etc. can consume.
This should also include the C shims needed to access the portions of dawn_native's API needed to e.g. bind Dawn to a GLFW window and similar from C.
cc @rsms
@rsms a few questions for you:
(1) Preference for single big
libdawn.astatic lib, or one for each component? Right now we build one for each component:(2) Clone the repo and build from source (would require
zigandgit), or download some prebuilt binary release?(3) You mentioned on Twitter noticing Dawn's binary size being quite huge, I also noticed that - it was one of the reasons I switched to per-component static libs (was looking to debug it), right now we have:
Of course an actual triangle example binary linked against them is much smaller:
But curious if you have any thoughts/concerns around this
Thank you Stephen for making this effort!
Would you consider separating the mach code from the "static dawn lib" project? I.e. making mach a "consumer"/"user" of the dawn libraries?
Whoa that's a cool idea!
Absolutely, yes, that's the primary thing this issue is for. A few thoughts:
For Mach itself there are a lot of good reasons to prefer monorepo development, so here's how I envision this working in a way that is compatible with both your and my goals:
dawnsubdirectory in this repository: issues, PRs, etc. would be sent to this repository and once any change is merged to this repo it'll get auto-pushed to the https://github.com/hexops/mach-dawn repository.glfw/sub-directory of this repository is similarly published entirely separately from the rest of Mach so others can use it in their own projects/engines at https://github.com/hexops/mach-glfwThe dawn_utils part of the dawn library has various glfw interoperation bits in it.
Is dawn_utils part of the effort? If so it seems like it would be a good idea to have it be a third library, so that there's no hard dependency from dawn to glfw. dawn without glfw would be good...
@meshula Yeah, I'd like for you to be able to choose (via build.zig, and CLI parameters) which of the components to build. You may still pay the cost of downloading GLFW (not sure), but it wouldn't build.
I can't say how easy Dawn is to use without
dawn_utils, of course - it also implements the swap chain logic bindings to Metal/DirectX/Vulkan which you would likely want even if not using GLFW - that'd be an issue to file upstream on dawn.googlesource.comWe've gotten a lot better here:
libdawn.awith everything, and publishing them as GitHub releases. You can download the static lib, headers as JSON file, or tarball of everything.zig build -Dtarget=aarch64-macos.12 -Ddawn-from-source=true- everything is built from source with Zig build system if you pass-Ddawn-from-source=trueflag.There's still more to do, documentation to add, etc. but overall you can consume this from other projects now without much trouble I believe.
I'll close this issue, feel free to create new ones with any feedback / issues, etc.
Latest binary release: https://github.com/hexops/mach-gpu-dawn/releases/tag/release-6b59025