Commit 7047ba9c authored by Peter Waller's avatar Peter Waller
Browse files

llvmPackages.clang: move add-nostdlibinc-flag.patch to cc-wrapper



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: default avatarPeter Waller <p@pwaller.net>
parent 6915a163
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -629,6 +629,20 @@ 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 dropping
    # the flag 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
    ##
+0 −18
Original line number Diff line number Diff line
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index 3f29afd35971..223d2769cdfc 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -491,6 +491,13 @@ DerivedArgList *Driver::TranslateInputArgs(const InputArgList &Args) const {
   }
 #endif
 
+  {
+    Arg *A = DAL->MakeFlagArg(/*BaseArg=*/nullptr,
+                              Opts.getOption(options::OPT_nostdlibinc));
+    A->claim();
+    DAL->append(A);
+  }
+
   return DAL;
 }
 
+0 −17
Original line number Diff line number Diff line
@@ -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 =