-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consume libraries that we vendor fully by building separately and using a custom prefix path #113176
Draft
jkoritzinsky
wants to merge
15
commits into
dotnet:main
Choose a base branch
from
jkoritzinsky:vendored-libs
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+438
−257
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
… easily build two variants, one that has LTCG and one that doesn't.
…hat record into build.ninja, and log the environment variables before building
…ic around handling ZLIB::ZLIB vs zlib
Tagging subscribers to this area: @dotnet/area-system-io-compression |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Today, we consume 2 libraries that we "fully vendor" (ie we build the libraries using their build infrastructure and don't just extract some files out to build): zlib-ng and brotli.
These projects we currently include using CMake's FetchContent module, which effectively adds them into the existing build tree. This works pretty well as we get a lot of control to poke and prod at the build to make it work in our repo. It also means that we don't need to build any projects ourselves.
However, it also means that we can't use any of CMake's logic around how it discovers dependencies, requiring some special handling for ie system zlib vs our zlib.
Additionally, it means that we can only build each dependency project once per our build. We need to build two copies of the static libraries when we're building CoreCLR: no-IPO for NativeAOT, and with-IPO for the single-file host.
The new approach has us manually building each of our vendored projects one time per required configuration and installing them into a fake "sysroot"-style layout, which we pass to CMake as a way for it to find the packages. This way, we can build multiple copies and we can remove custom logic around "use system x" vs "use vendored x".