summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authors1341 <github@shmarya.net>2023-11-27 08:02:52 +0200
committerJohn Ericson <John.Ericson@Obsidian.Systems>2024-07-26 19:49:09 -0400
commit344902e09835cd90cb29661e3066b95be7fca9ce (patch)
tree205c77955f7d97be0163d9db1cbc197a321c92fa
parentMerge pull request #330062 from Sigmanificient/fastfetch (diff)
downloadnixpkgs-344902e09835cd90cb29661e3066b95be7fca9ce.tar.gz
llvm: Fix compiler-rt missing sanitizers when using useLLVM
-rw-r--r--pkgs/development/compilers/llvm/12/default.nix88
-rw-r--r--pkgs/development/compilers/llvm/common/compiler-rt/default.nix39
-rw-r--r--pkgs/development/compilers/llvm/common/default.nix153
3 files changed, 211 insertions, 69 deletions
diff --git a/pkgs/development/compilers/llvm/12/default.nix b/pkgs/development/compilers/llvm/12/default.nix
index 43f940a84661..4e2754def4de 100644
--- a/pkgs/development/compilers/llvm/12/default.nix
+++ b/pkgs/development/compilers/llvm/12/default.nix
@@ -2,6 +2,7 @@
, preLibcCrossHeaders
, substitute, substituteAll, fetchFromGitHub, fetchpatch, fetchurl
, overrideCC, wrapCCWith, wrapBintoolsWith
+, libxcrypt
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
, targetLlvm
@@ -49,6 +50,10 @@ let
ln -s "${cc.lib}/lib/clang/${metadata.release_version}/include" "$rsrc"
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
'';
+ mkExtraBuildCommandsBasicRt = cc: mkExtraBuildCommands0 cc + ''
+ ln -s "${targetLlvmLibraries.compiler-rt-no-libc.out}/lib" "$rsrc/lib"
+ ln -s "${targetLlvmLibraries.compiler-rt-no-libc.out}/share" "$rsrc/share"
+ '';
mkExtraBuildCommands = cc: mkExtraBuildCommands0 cc + ''
ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib"
ln -s "${targetLlvmLibraries.compiler-rt.out}/share" "$rsrc/share"
@@ -245,34 +250,50 @@ let
'' + mkExtraBuildCommands cc;
};
- clangNoLibcxx = wrapCCWith rec {
+ clangWithLibcAndBasicRtAndLibcxx = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = targetLlvmLibraries.libcxx;
+ bintools = bintools';
+ extraPackages = [
+ targetLlvmLibraries.compiler-rt-no-libc
+ ] ++ lib.optionals (!stdenv.targetPlatform.isWasm) [
+ targetLlvmLibraries.libunwind
+ ];
+ extraBuildCommands = ''
+ echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
+ echo "-Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommandsBasicRt cc;
+ };
+
+ clangWithLibcAndBasicRt = wrapCCWith rec {
cc = tools.clang-unwrapped;
libcxx = null;
bintools = bintools';
extraPackages = [
- targetLlvmLibraries.compiler-rt
+ targetLlvmLibraries.compiler-rt-no-libc
];
extraBuildCommands = ''
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
- echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
echo "-nostdlib++" >> $out/nix-support/cc-cflags
- '' + mkExtraBuildCommands cc;
+ '' + mkExtraBuildCommandsBasicRt cc;
};
- clangNoLibc = wrapCCWith rec {
+ clangNoLibcWithBasicRt = wrapCCWith rec {
cc = tools.clang-unwrapped;
libcxx = null;
bintools = bintoolsNoLibc';
extraPackages = [
- targetLlvmLibraries.compiler-rt
+ targetLlvmLibraries.compiler-rt-no-libc
];
extraBuildCommands = ''
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
- echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
- '' + mkExtraBuildCommands cc;
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommandsBasicRt cc;
};
- clangNoCompilerRt = wrapCCWith rec {
+ clangNoLibcNoRt = wrapCCWith rec {
cc = tools.clang-unwrapped;
libcxx = null;
bintools = bintoolsNoLibc';
@@ -282,6 +303,8 @@ let
'' + mkExtraBuildCommands0 cc;
};
+ # This is an "oddly ordered" bootstrap just for Darwin. Probably
+ # don't want it otherwise.
clangNoCompilerRtWithLibc = wrapCCWith rec {
cc = tools.clang-unwrapped;
libcxx = null;
@@ -290,13 +313,23 @@ let
extraBuildCommands = mkExtraBuildCommands0 cc;
};
+ # Aliases
+ clangNoCompilerRt = tools.clangNoLibcNoRt;
+ clangNoLibc = tools.clangNoLibcWithBasicRt;
+ clangNoLibcxx = tools.clangWithLibcAndBasicRt;
});
libraries = lib.makeExtensible (libraries: let
callPackage = newScope (libraries // buildLlvmTools // args // metadata);
in {
- compiler-rt-libc = callPackage ../common/compiler-rt {
+ compiler-rt-libc = callPackage ../common/compiler-rt (let
+ stdenv =
+ if args.stdenv.hostPlatform.useLLVM or false then
+ overrideCC args.stdenv buildLlvmTools.clangWithLibcAndBasicRtAndLibcxx
+ else
+ args.stdenv;
+ in {
src = fetch "compiler-rt" "1950rg294izdwkaasi7yjrmadc9mzdd5paf0q63jjcq2m3rdbj5l";
patches = [
../common/compiler-rt/7-12-codesign.patch # Revert compiler-rt commit that makes codesign mandatory
@@ -312,10 +345,12 @@ let
../common/compiler-rt/armv6-sync-ops-no-thumb.patch
../common/compiler-rt/armv6-no-ldrexd-strexd.patch
];
- stdenv = if stdenv.hostPlatform.useLLVM or false
- then overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc
- else stdenv;
- };
+ inherit stdenv;
+ } // lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ libxcrypt = (libxcrypt.override { inherit stdenv; }).overrideAttrs (old: {
+ configureFlags = old.configureFlags ++ [ "--disable-symvers" ];
+ });
+ });
compiler-rt-no-libc = callPackage ../common/compiler-rt {
src = fetch "compiler-rt" "1950rg294izdwkaasi7yjrmadc9mzdd5paf0q63jjcq2m3rdbj5l";
@@ -333,15 +368,22 @@ let
../common/compiler-rt/armv6-sync-ops-no-thumb.patch
../common/compiler-rt/armv6-no-ldrexd-strexd.patch
];
- stdenv = if stdenv.hostPlatform.useLLVM or false
- then overrideCC stdenv buildLlvmTools.clangNoCompilerRt
- else stdenv;
+ stdenv =
+ if stdenv.hostPlatform.isDarwin && stdenv.hostPlatform == stdenv.buildPlatform then
+ stdenv
+ else
+ # TODO: make this branch unconditional next rebuild
+ overrideCC stdenv buildLlvmTools.clangNoLibcNoRt;
};
- # N.B. condition is safe because without useLLVM both are the same.
- compiler-rt = if stdenv.hostPlatform.isAndroid
- then libraries.compiler-rt-libc
- else libraries.compiler-rt-no-libc;
+ compiler-rt =
+ # Building the with-libc compiler-rt and WASM doesn't yet work,
+ # because wasilibc doesn't provide some expected things. See
+ # compiler-rt's file for further details.
+ if stdenv.hostPlatform.libc == null || stdenv.hostPlatform.isWasm then
+ libraries.compiler-rt-no-libc
+ else
+ libraries.compiler-rt-libc;
stdenv = overrideCC stdenv buildLlvmTools.clang;
@@ -376,7 +418,7 @@ let
];
})
];
- stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
+ stdenv = overrideCC stdenv buildLlvmTools.clangWithLibcAndBasicRt;
};
libunwind = callPackage ../common/libunwind {
@@ -384,7 +426,7 @@ let
patches = [
./libunwind/gnu-install-dirs.patch
];
- stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
+ stdenv = overrideCC stdenv buildLlvmTools.clangWithLibcAndBasicRt;
};
openmp = callPackage ../common/openmp {
diff --git a/pkgs/development/compilers/llvm/common/compiler-rt/default.nix b/pkgs/development/compilers/llvm/common/compiler-rt/default.nix
index 67f9661cf743..769c362738e3 100644
--- a/pkgs/development/compilers/llvm/common/compiler-rt/default.nix
+++ b/pkgs/development/compilers/llvm/common/compiler-rt/default.nix
@@ -12,6 +12,7 @@
, python3
, xcbuild
, libllvm
+, libcxx
, linuxHeaders
, libxcrypt
@@ -33,6 +34,9 @@ let
useLLVM = stdenv.hostPlatform.useLLVM or false;
bareMetal = stdenv.hostPlatform.parsed.kernel.name == "none";
haveLibc = stdenv.cc.libc != null;
+ # TODO: Make this account for GCC having libstdcxx, which will help
+ # use clean up the `cmakeFlags` rats nest below.
+ haveLibcxx = stdenv.cc.libcxx != null;
isDarwinStatic = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isStatic && lib.versionAtLeast release_version "16";
inherit (stdenv.hostPlatform) isMusl isAarch64;
@@ -46,7 +50,7 @@ let
cp -r ${monorepoSrc}/${baseName} "$out"
'' else src;
- preConfigure = lib.optionalString (useLLVM && !haveLibc) ''
+ preConfigure = lib.optionalString (!haveLibc) ''
cmakeFlagsArray+=(-DCMAKE_C_FLAGS="-nodefaultlibs -ffreestanding")
'';
in
@@ -82,23 +86,32 @@ stdenv.mkDerivation ({
"-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}"
] ++ lib.optionals (haveLibc && stdenv.hostPlatform.libc == "glibc") [
"-DSANITIZER_COMMON_CFLAGS=-I${libxcrypt}/include"
- ] ++ lib.optionals ((useLLVM || bareMetal || isMusl || isAarch64) && (lib.versions.major release_version == "13")) [
+ ] ++ lib.optionals (useLLVM && haveLibc && stdenv.cc.libcxx == libcxx) [
+ "-DSANITIZER_CXX_ABI=libcxxabi"
+ "-DSANITIZER_CXX_ABI_LIBNAME=libcxxabi"
+ "-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON"
+ ] ++ lib.optionals ((!haveLibc || bareMetal || isMusl || isAarch64) && (lib.versions.major release_version == "13")) [
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
- ] ++ lib.optionals (useLLVM || bareMetal || isMusl || isDarwinStatic) [
+ ] ++ lib.optionals (useLLVM && haveLibc) [
+ "-DCOMPILER_RT_BUILD_SANITIZERS=ON"
+ ] ++ lib.optionals (!haveLibc || bareMetal || isMusl || isDarwinStatic) [
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
+ ] ++ lib.optionals ((useLLVM && !haveLibcxx) || !haveLibc || bareMetal || isMusl || isDarwinStatic) [
"-DCOMPILER_RT_BUILD_XRAY=OFF"
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
"-DCOMPILER_RT_BUILD_MEMPROF=OFF"
"-DCOMPILER_RT_BUILD_ORC=OFF" # may be possible to build with musl if necessary
- ] ++ lib.optionals (useLLVM || bareMetal) [
+ ] ++ lib.optionals (useLLVM && haveLibc) [
+ "-DCOMPILER_RT_BUILD_PROFILE=ON"
+ ] ++ lib.optionals (!haveLibc || bareMetal) [
"-DCOMPILER_RT_BUILD_PROFILE=OFF"
- ] ++ lib.optionals ((useLLVM && !haveLibc) || bareMetal || isDarwinStatic) [
+ ] ++ lib.optionals (!haveLibc || bareMetal || isDarwinStatic) [
"-DCMAKE_CXX_COMPILER_WORKS=ON"
- ] ++ lib.optionals ((useLLVM && !haveLibc) || bareMetal) [
+ ] ++ lib.optionals (!haveLibc || bareMetal) [
"-DCMAKE_C_COMPILER_WORKS=ON"
"-DCOMPILER_RT_BAREMETAL_BUILD=ON"
"-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}"
- ] ++ lib.optionals (useLLVM && !haveLibc) [
+ ] ++ lib.optionals (!haveLibc) [
"-DCMAKE_C_FLAGS=-nodefaultlibs"
] ++ lib.optionals (useLLVM) [
"-DCOMPILER_RT_BUILD_BUILTINS=ON"
@@ -133,7 +146,7 @@ stdenv.mkDerivation ({
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace cmake/config-ix.cmake \
--replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)'
- '' + lib.optionalString (useLLVM && !haveLibc) ((lib.optionalString (lib.versionAtLeast release_version "18") ''
+ '' + lib.optionalString (!haveLibc) ((lib.optionalString (lib.versionAtLeast release_version "18") ''
substituteInPlace lib/builtins/aarch64/sme-libc-routines.c \
--replace "<stdlib.h>" "<stddef.h>"
'') + ''
@@ -185,8 +198,12 @@ stdenv.mkDerivation ({
# "All of the code in the compiler-rt project is dual licensed under the MIT
# license and the UIUC License (a BSD-like license)":
license = with lib.licenses; [ mit ncsa ];
- # compiler-rt requires a Clang stdenv on 32-bit RISC-V:
- # https://reviews.llvm.org/D43106#1019077
- broken = stdenv.hostPlatform.isRiscV32 && !stdenv.cc.isClang;
+ broken =
+ # compiler-rt requires a Clang stdenv on 32-bit RISC-V:
+ # https://reviews.llvm.org/D43106#1019077
+ (stdenv.hostPlatform.isRiscV32 && !stdenv.cc.isClang)
+ # emutls wants `<pthread.h>` which isn't avaiable (without exeprimental WASM threads proposal).
+ # `enable_execute_stack.c` Also doesn't sound like something WASM would support.
+ || (stdenv.hostPlatform.isWasm && haveLibc);
};
} // (if lib.versionOlder release_version "16" then { inherit preConfigure; } else {}))
diff --git a/pkgs/development/compilers/llvm/common/default.nix b/pkgs/development/compilers/llvm/common/default.nix
index b84fcab17f1b..6753a1e6791c 100644
--- a/pkgs/development/compilers/llvm/common/default.nix
+++ b/pkgs/development/compilers/llvm/common/default.nix
@@ -5,6 +5,7 @@
lib,
stdenv,
preLibcCrossHeaders,
+ libxcrypt,
substitute,
substituteAll,
fetchFromGitHub,
@@ -114,6 +115,13 @@ let
ln -s "${cc.lib}/lib/clang/${clangVersion}/include" "$rsrc"
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
'';
+ mkExtraBuildCommandsBasicRt =
+ cc:
+ mkExtraBuildCommands0 cc
+ + ''
+ ln -s "${targetLlvmLibraries.compiler-rt-no-libc.out}/lib" "$rsrc/lib"
+ ln -s "${targetLlvmLibraries.compiler-rt-no-libc.out}/share" "$rsrc/share"
+ '';
mkExtraBuildCommands =
cc:
mkExtraBuildCommands0 cc
@@ -443,25 +451,76 @@ let
}
);
- clangNoLibcxx = wrapCCWith (
+ clangWithLibcAndBasicRtAndLibcxx = wrapCCWith (
+ rec {
+ cc = tools.clang-unwrapped;
+ libcxx = targetLlvmLibraries.libcxx;
+ bintools = bintools';
+ extraPackages =
+ [ targetLlvmLibraries.compiler-rt-no-libc ]
+ ++ lib.optionals (!stdenv.targetPlatform.isWasm && !stdenv.targetPlatform.isFreeBSD) [
+ targetLlvmLibraries.libunwind
+ ];
+ extraBuildCommands =
+ lib.optionalString (lib.versions.major metadata.release_version == "13") (
+ ''
+ echo "-rtlib=compiler-rt -Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
+ ''
+ + lib.optionalString (!stdenv.targetPlatform.isWasm) ''
+ echo "--unwindlib=libunwind" >> $out/nix-support/cc-cflags
+ echo "-L${targetLlvmLibraries.libunwind}/lib" >> $out/nix-support/cc-ldflags
+ ''
+ + lib.optionalString (!stdenv.targetPlatform.isWasm && stdenv.targetPlatform.useLLVM or false) ''
+ echo "-lunwind" >> $out/nix-support/cc-ldflags
+ ''
+ + lib.optionalString stdenv.targetPlatform.isWasm ''
+ echo "-fno-exceptions" >> $out/nix-support/cc-cflags
+ ''
+ )
+ + mkExtraBuildCommandsBasicRt cc;
+ }
+ // lib.optionalAttrs (lib.versionAtLeast metadata.release_version "14") {
+ nixSupport.cc-cflags =
+ [
+ "-rtlib=compiler-rt"
+ "-Wno-unused-command-line-argument"
+ "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib"
+ ]
+ ++ lib.optional (
+ !stdenv.targetPlatform.isWasm && !stdenv.targetPlatform.isFreeBSD
+ ) "--unwindlib=libunwind"
+ ++ lib.optional (
+ !stdenv.targetPlatform.isWasm
+ && !stdenv.targetPlatform.isFreeBSD
+ && stdenv.targetPlatform.useLLVM or false
+ ) "-lunwind"
+ ++ lib.optional stdenv.targetPlatform.isWasm "-fno-exceptions";
+ nixSupport.cc-ldflags = lib.optionals (
+ !stdenv.targetPlatform.isWasm && !stdenv.targetPlatform.isFreeBSD
+ ) [ "-L${targetLlvmLibraries.libunwind}/lib" ];
+ }
+ );
+
+ clangWithLibcAndBasicRt = wrapCCWith (
rec {
cc = tools.clang-unwrapped;
libcxx = null;
bintools = bintools';
- extraPackages = [ targetLlvmLibraries.compiler-rt ];
+ extraPackages = [ targetLlvmLibraries.compiler-rt-no-libc ];
extraBuildCommands =
lib.optionalString (lib.versions.major metadata.release_version == "13") ''
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
- echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
echo "-nostdlib++" >> $out/nix-support/cc-cflags
''
- + mkExtraBuildCommands cc;
+ + mkExtraBuildCommandsBasicRt cc;
}
// lib.optionalAttrs (lib.versionAtLeast metadata.release_version "14") {
nixSupport.cc-cflags =
[
"-rtlib=compiler-rt"
- "-B${targetLlvmLibraries.compiler-rt}/lib"
+ "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib"
"-nostdlib++"
]
++ lib.optional (
@@ -470,24 +529,24 @@ let
}
);
- clangNoLibc = wrapCCWith (
+ clangNoLibcWithBasicRt = wrapCCWith (
rec {
cc = tools.clang-unwrapped;
libcxx = null;
bintools = bintoolsNoLibc';
- extraPackages = [ targetLlvmLibraries.compiler-rt ];
+ extraPackages = [ targetLlvmLibraries.compiler-rt-no-libc ];
extraBuildCommands =
lib.optionalString (lib.versions.major metadata.release_version == "13") ''
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
- echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib" >> $out/nix-support/cc-cflags
''
- + mkExtraBuildCommands cc;
+ + mkExtraBuildCommandsBasicRt cc;
}
// lib.optionalAttrs (lib.versionAtLeast metadata.release_version "14") {
nixSupport.cc-cflags =
[
"-rtlib=compiler-rt"
- "-B${targetLlvmLibraries.compiler-rt}/lib"
+ "-B${targetLlvmLibraries.compiler-rt-no-libc}/lib"
]
++ lib.optional (
lib.versionAtLeast metadata.release_version "15" && stdenv.targetPlatform.isWasm
@@ -495,7 +554,7 @@ let
}
);
- clangNoCompilerRt = wrapCCWith (
+ clangNoLibcNoRt = wrapCCWith (
rec {
cc = tools.clang-unwrapped;
libcxx = null;
@@ -516,6 +575,8 @@ let
}
);
+ # This is an "oddly ordered" bootstrap just for Darwin. Probably
+ # don't want it otherwise.
clangNoCompilerRtWithLibc =
wrapCCWith rec {
cc = tools.clang-unwrapped;
@@ -527,6 +588,11 @@ let
// lib.optionalAttrs (
lib.versionAtLeast metadata.release_version "15" && stdenv.targetPlatform.isWasm
) { nixSupport.cc-cflags = [ "-fno-exceptions" ]; };
+
+ # Aliases
+ clangNoCompilerRt = tools.clangNoLibcNoRt;
+ clangNoLibc = tools.clangNoLibcWithBasicRt;
+ clangNoLibcxx = tools.clangWithLibcAndBasicRt;
}
// lib.optionalAttrs (lib.versionAtLeast metadata.release_version "15") {
# TODO: pre-15: lldb/docs/index.rst:155:toctree contains reference to nonexisting document 'design/structureddataplugins'
@@ -601,40 +667,57 @@ let
);
in
{
- compiler-rt-libc = callPackage ./compiler-rt {
- patches = compiler-rtPatches;
- stdenv =
- if
- stdenv.hostPlatform.useLLVM or false
- || (
+ compiler-rt-libc = callPackage ./compiler-rt (
+ let
+ # temp rename to avoid infinite recursion
+ stdenv =
+ if args.stdenv.hostPlatform.useLLVM or false then
+ overrideCC args.stdenv buildLlvmTools.clangWithLibcAndBasicRtAndLibcxx
+ else if
lib.versionAtLeast metadata.release_version "16"
- && stdenv.hostPlatform.isDarwin
- && stdenv.hostPlatform.isStatic
- )
- then
- overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc
- else
- args.stdenv;
- };
+ && args.stdenv.hostPlatform.isDarwin
+ && args.stdenv.hostPlatform.isStatic
+ then
+ overrideCC args.stdenv buildLlvmTools.clangNoCompilerRtWithLibc
+ else
+ args.stdenv;
+ in
+ {
+ patches = compiler-rtPatches;
+ inherit stdenv;
+ }
+ // lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ libxcrypt = (libxcrypt.override { inherit stdenv; }).overrideAttrs (old: {
+ configureFlags = old.configureFlags ++ [ "--disable-symvers" ];
+ });
+ }
+ );
compiler-rt-no-libc = callPackage ./compiler-rt {
patches = compiler-rtPatches;
stdenv =
- if stdenv.hostPlatform.useLLVM or false then
- overrideCC stdenv buildLlvmTools.clangNoCompilerRt
+ if stdenv.hostPlatform.isDarwin && stdenv.hostPlatform == stdenv.buildPlatform then
+ stdenv
else
- stdenv;
+ # TODO: make this branch unconditional next rebuild
+ overrideCC stdenv buildLlvmTools.clangNoLibcNoRt;
};
- # N.B. condition is safe because without useLLVM both are the same.
compiler-rt =
if
- stdenv.hostPlatform.isAndroid
- || (lib.versionAtLeast metadata.release_version "16" && stdenv.hostPlatform.isDarwin)
+ stdenv.hostPlatform.libc == null
+ # Building the with-libc compiler-rt and WASM doesn't yet work,
+ # because wasilibc doesn't provide some expected things. See
+ # compiler-rt's file for further details.
+ || stdenv.hostPlatform.isWasm
+ # Failing `#include <term.h>` in
+ # `lib/sanitizer_common/sanitizer_platform_limits_freebsd.cpp`
+ # sanitizers, not sure where to get it.
+ || stdenv.hostPlatform.isFreeBSD
then
- libraries.compiler-rt-libc
+ libraries.compiler-rt-no-libc
else
- libraries.compiler-rt-no-libc;
+ libraries.compiler-rt-libc;
stdenv = overrideCC stdenv buildLlvmTools.clang;
@@ -698,7 +781,7 @@ let
)
# https://github.com/llvm/llvm-project/issues/64226
(metadata.getVersionFile "libcxx/0001-darwin-10.12-mbstate_t-fix.patch");
- stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
+ stdenv = overrideCC stdenv buildLlvmTools.clangWithLibcAndBasicRt;
}
// lib.optionalAttrs (lib.versionOlder metadata.release_version "14") {
# TODO: remove this, causes LLVM 13 packages rebuild.
@@ -710,7 +793,7 @@ let
patches = lib.optional (lib.versionOlder metadata.release_version "17") (
metadata.getVersionFile "libunwind/gnu-install-dirs.patch"
);
- stdenv = overrideCC stdenv buildLlvmTools.clangNoLibcxx;
+ stdenv = overrideCC stdenv buildLlvmTools.clangWithLibcAndBasicRt;
};
openmp = callPackage ./openmp {