Skip to content

Commit

Permalink
llvmPackages.clang: move add-nostdlibinc-flag.patch to cc-wrapper
Browse files Browse the repository at this point in the history
Remove a patch to decrease the divergence from upstream.

Motivation is a continuation of trying to reduce the number of clang
builds floating around. Wrapper builds are cheap, compiler builds are
not.

It's expected that this patch can be removed at some point and replaced
with some other cc-wrapper logic. This will be a little bit easier with
the logic already in the cc-wrapper.

Ongoing discussion in #191152. It would be nice to drop this but we
think it's probably needed at least on systems where /usr/include may be
available to prevent the possibility of picking up unwanted includes.

One potential method for eliminating nostdlibinc in the future is by
providing a non-existent -sysroot but that was reverted in #213185, and
remains a can of worms.

Signed-off-by: Peter Waller <[email protected]>
  • Loading branch information
pwaller committed Nov 15, 2024
1 parent 6915a16 commit b941415
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 35 deletions.
15 changes: 15 additions & 0 deletions pkgs/build-support/cc-wrapper/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,21 @@ stdenvNoCC.mkDerivation {
echo " -L${libcxx_solib}" >> $out/nix-support/cc-ldflags
''


## Prevent clang from seeing /usr/include. There is a desire to achieve this
## through alternate means because it breaks -sysroot and related functionality.
#
# This flag prevents global system header directories from
# leaking through on non‐NixOS Linux. However, on macOS, the
# SDK path is used as the sysroot, and forcing `-nostdlibinc`
# breaks `-isysroot` with an unwrapped compiler. As macOS has
# no `/usr/include`, there’s essentially no risk to skipping
# the patch there. See discussion in NixOS/nixpkgs#191152.
#
+ optionalString ((cc.isClang or false) && !targetPlatform.isDarwin) ''
echo " -nostdlibinc" >> $out/nix-support/cc-cflags
''

##
## Man page and info support
##
Expand Down

This file was deleted.

17 changes: 0 additions & 17 deletions pkgs/development/compilers/llvm/common/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -529,23 +529,6 @@ let
# mis-compilation in firefox.
# See: https://bugzilla.mozilla.org/show_bug.cgi?id=1741454
(metadata.getVersionFile "clang/revert-malloc-alignment-assumption.patch")
# This patch prevents global system header directories from
# leaking through on non‐NixOS Linux. However, on macOS, the
# SDK path is used as the sysroot, and forcing `-nostdlibinc`
# breaks `-isysroot` with an unwrapped compiler. As macOS has
# no `/usr/include`, there’s essentially no risk to skipping
# the patch there. It’s possible that Homebrew headers in
# `/usr/local/include` might leak through to unwrapped
# compilers being used without an SDK set or something, but
# it hopefully shouldn’t matter.
#
# TODO: Figure out a better solution to this whole problem so
# that we won’t have to choose between breaking unwrapped
# compilers breaking libclang when we can do Linux‐to‐Darwin
# cross‐compilation again.
++ lib.optional (
!args.stdenv.hostPlatform.isDarwin || !args.stdenv.targetPlatform.isDarwin
) ./clang/add-nostdlibinc-flag.patch
++ [
(substituteAll {
src =
Expand Down

0 comments on commit b941415

Please sign in to comment.