Fix Xcode PCH redefinition warnings for clang's libc++ hardening mode#1076
Open
SRSaunders wants to merge 3 commits intoRobertBeckebans:masterfrom
Open
Fix Xcode PCH redefinition warnings for clang's libc++ hardening mode#1076SRSaunders wants to merge 3 commits intoRobertBeckebans:masterfrom
SRSaunders wants to merge 3 commits intoRobertBeckebans:masterfrom
Conversation
This file contains hidden or 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
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.
This fixes #1075 for llvm's libc++ hardening mode starting with llvm 18.
Although the fix is designed to avoid PCH redefinition errors on Apple Xcode builds with AppleClang 17+, the solution is general in that other platforms and build types can take advantage of the improvement.
The solution defines new
CLANG_CXX_FLAGS_<build-type>cmake variables (default empty) that are appended to the existingCMAKE_CXX_FLAGS_<build-type>variables and passed to both PCH and regular build components. For Xcode builds using AppleClang 17+ (containing llvm 19+), these new variables are automatically set to match Xcode's defaults for the hardening defines. However, they can be manually set on any build type or platform for non-MSVC compilers.For example, a linux (or macOS) release build could add the following to their
cmake-<platform>-release.shscript to enable_LIBCPP_HARDENING_MODE_FAST:-DCLANG_CXX_FLAGS_RELEASE="-U_LIBCPP_HARDENING_MODE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST"This PR also fixes a small PCH cleanup issue for rbdmap when using non-MSVC IDE builds (tested with Xcode).
Tested on macOS Sequoia with Xcode 26.2 builds as well as command line builds (debug and release variants). Also tested on Linux Manjaro + clang 21 with
_LIBCPP_HARDENING_MODE_FASToverride on command line release build.