From b0d0b1adfe917f2fadd49fc4931fbfb61f762c60 Mon Sep 17 00:00:00 2001 From: Benjamin Saunders Date: Thu, 24 May 2018 14:43:31 -0700 Subject: clang_6: fix sanitizers under libstdc++ --- pkgs/build-support/cc-wrapper/default.nix | 4 ++-- pkgs/development/compilers/llvm/6/default.nix | 13 +++++++++---- pkgs/test/cc-wrapper/default.nix | 2 -- 3 files changed, 11 insertions(+), 8 deletions(-) (limited to 'pkgs') diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index a0955088eb7..7a18993d607 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -9,7 +9,7 @@ , stdenvNoCC, nativeTools, propagateDoc ? !nativeTools, noLibc ? false, nativeLibc, nativePrefix ? "" , cc ? null, libc ? null, bintools, coreutils ? null, shell ? stdenvNoCC.shell , extraPackages ? [], extraBuildCommands ? "" -, isGNU ? false, isClang ? cc.isClang or false, isCompilerRT ? false, gnugrep ? null +, isGNU ? false, isClang ? cc.isClang or false, gnugrep ? null , buildPackages ? {} }: @@ -90,7 +90,7 @@ stdenv.mkDerivation { # Binutils, and Apple's "cctools"; "bintools" as an attempt to find an # unused middle-ground name that evokes both. inherit bintools; - inherit libc nativeTools nativeLibc nativePrefix isGNU isClang isCompilerRT default_cxx_stdlib_compile; + inherit libc nativeTools nativeLibc nativePrefix isGNU isClang default_cxx_stdlib_compile; emacsBufferSetup = pkgs: '' ; We should handle propagation here too diff --git a/pkgs/development/compilers/llvm/6/default.nix b/pkgs/development/compilers/llvm/6/default.nix index da5a97a9bba..17c743c0408 100644 --- a/pkgs/development/compilers/llvm/6/default.nix +++ b/pkgs/development/compilers/llvm/6/default.nix @@ -38,10 +38,16 @@ let clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang; - libstdcxxClang = wrapCCWith { + libstdcxxClang = wrapCCWith rec { cc = tools.clang-unwrapped; - extraPackages = [ libstdcxxHook ]; - extraBuildCommands = stdenv.lib.optionalString stdenv.targetPlatform.isLinux '' + extraPackages = [ libstdcxxHook targetLlvmLibraries.compiler-rt ]; + extraBuildCommands = '' + rsrc="$out/resource-root" + mkdir "$rsrc" + ln -s "${cc}/lib/clang/${release_version}/include" "$rsrc" + ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" + echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags + '' + stdenv.lib.optionalString stdenv.targetPlatform.isLinux '' echo "--gcc-toolchain=${tools.clang-unwrapped.gcc}" >> $out/nix-support/cc-cflags ''; }; @@ -53,7 +59,6 @@ let targetLlvmLibraries.libcxxabi targetLlvmLibraries.compiler-rt ]; - isCompilerRT = true; extraBuildCommands = '' rsrc="$out/resource-root" mkdir "$rsrc" diff --git a/pkgs/test/cc-wrapper/default.nix b/pkgs/test/cc-wrapper/default.nix index 06113e40561..87d070f5616 100644 --- a/pkgs/test/cc-wrapper/default.nix +++ b/pkgs/test/cc-wrapper/default.nix @@ -38,11 +38,9 @@ stdenv.mkDerivation { NIX_LDFLAGS="-L$NIX_BUILD_TOP/foo/lib -rpath $NIX_BUILD_TOP/foo/lib" $CC -lfoo -o ldflags-check ${./ldflags-main.c} ./ldflags-check - '' + stdenv.lib.optionalString (stdenv.cc.isCompilerRT or false) '' $CC -o sanitizers -fsanitize=address,undefined ${./sanitizers.c} ./sanitizers - '' + '' touch $out ''; -- cgit 1.4.1