diff options
author | Peter Waller <p@pwaller.net> | 2023-08-01 15:09:18 +0100 |
---|---|---|
committer | Peter Waller <p@pwaller.net> | 2023-08-22 17:33:24 +0100 |
commit | 6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8 (patch) | |
tree | 8f68d3df515c81bfb3b220ce92111105ae9971bd /pkgs/development/compilers/llvm/16/compiler-rt/default.nix | |
parent | 2ff705ac55b1aaca6a394a706c069f5ef3124c8d (diff) | |
download | nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar.gz nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar.bz2 nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar.lz nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar.xz nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.tar.zst nixpkgs-6ba1b5b0b3e57a7def4e837f5599aa3ac68589a8.zip |
llvmPackages_15, llvmPackages_16: Make the pkgsLLVM.stdenv work
What changed: * Fixed crtbeginS.o and crtendS.o missing (they may or may not be called crt{begin_end},{,_shared}. * Fixed implicit function declaration causing build errors for various builds by supplying -Wno-implicit-function-declaration. * Fixed __cxxabi_config.h missing, by adding -I${cxxabi}/include/c++/v1 in the wrapper. * Fixed libcxx failing to build due to missing libunwind symbols by including libunwind as a buildInput, and setting -DLIBCXX_ADDITIONAL_LIBRARIES=unwind for stdenv.hostPlatform.useLLVM == true. * libcxxabi wants to find libunwind at libunwind_shared.so, so symlink it there in libunwind. * llvmPackages_16.libcxxabi: Pass -nostdlib via CMAKE_*_LINKER_FLAGS Without this flag, the link of libcxxabi.so tries to pull in libgcc and friends, from the clang compiler driver. * Drop unneeded musl hack patch from libcxx. * Pass -Wno-error=implicit-function-declaration only to compiler-rt See LLVM forum discussion: https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213 In summary, LLVM 16 made implicit function declaration an error. This happens a lot in configure scripts which can break things. * llvmPackages_16: !isDarwin: Supply -DLIBCXX_ABI_USE_LLVM_UNWINDER=On Otherwise it fails with various undefined references to _Unwind_* functions: (full list: _Unwind_DeleteException _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_GetRegionStart _Unwind_RaiseException _Unwind_Resume _Unwind_SetGR _Unwind_SetIP). * 16.libcxxabi: Only pass -nostdlib for useLLVM and Darwin builds What was tested: * x86_64-linux, aarch64-linux, the stdenv builds. * Additionally I was able to get nix to build, with an overlay to fix a couple of minor issues in downstream packages (overlay supplied in PR #246577. * aarch64-darwin fails spuriously in a single LLVM test strip-preserve-atime.test checking atime timestamps. * The same for pkgsLLVM with llvmPackages = llvmPackages_15. Signed-off-by: Peter Waller <p@pwaller.net>
Diffstat (limited to 'pkgs/development/compilers/llvm/16/compiler-rt/default.nix')
-rw-r--r-- | pkgs/development/compilers/llvm/16/compiler-rt/default.nix | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/pkgs/development/compilers/llvm/16/compiler-rt/default.nix b/pkgs/development/compilers/llvm/16/compiler-rt/default.nix index aa248c0e60e..fc0d7533c99 100644 --- a/pkgs/development/compilers/llvm/16/compiler-rt/default.nix +++ b/pkgs/development/compilers/llvm/16/compiler-rt/default.nix @@ -32,9 +32,16 @@ stdenv.mkDerivation { ++ lib.optional stdenv.isDarwin xcbuild.xcrun; buildInputs = lib.optional stdenv.hostPlatform.isDarwin libcxxabi; - env.NIX_CFLAGS_COMPILE = toString [ + env.NIX_CFLAGS_COMPILE = toString ([ "-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0" - ]; + ] ++ lib.optionals (!haveLibc) [ + # The compiler got stricter about this, and there is a usellvm patch below + # which patches out the assert include causing an implicit definition of + # assert. It would be nicer to understand why compiler-rt thinks it should + # be able to #include <assert.h> in the first place; perhaps it's in the + # wrong, or perhaps there is a way to provide an assert.h. + "-Wno-error=implicit-function-declaration" + ]); cmakeFlags = [ "-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON" @@ -102,7 +109,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) '' + '' + lib.optionalString (useLLVM && !haveLibc) '' substituteInPlace lib/builtins/int_util.c \ --replace "#include <stdlib.h>" "" substituteInPlace lib/builtins/clear_cache.c \ @@ -117,6 +124,12 @@ stdenv.mkDerivation { '' + lib.optionalString (useLLVM) '' ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o + # Note the history of crt{begin,end}S in previous versions of llvm in nixpkg: + # The presence of crtbegin_shared has been added and removed; it's possible + # people have added/removed it to get it working on their platforms. + # Try each in turn for now. + ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbeginS.o + ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtendS.o ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o '' + lib.optionalString doFakeLibgcc '' |