Allow building ggml as a separate shared lib #468
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi, this PR allows the creation of two separate libs (e.g. ggml.dll and stable-diffusion.dll) via a build option (
SD_BUILD_SHARED_GGML_LIB
). By default, it continues to make a single shared lib (like it does today).cmake -B build -DSD_BUILD_SHARED_LIBS=1 -DSD_BUILD_SHARED_GGML_LIB=1
This option is useful when distributing updates to programs that use sd.cpp internally. For e.g. when targeting CUDA, with this PR, new versions of
stable-diffusion.cpp
can be distributed with a 4 MB DLL update, instead of re-distributing 347 MB (that includes ggml with compiled ggml CUDA kernels).ggml doesn't need to change frequently, so there isn't much point wasting bandwidth redistributing the entire static-ly built ggml (with cuda), each time
stable-diffusion.dll
needs to be updated.I've tested this on Windows, Mac and Linux (Ubuntu).
Please let me know if this PR needs anything else, thanks!