forked from mirrors/nixpkgs
b6bacc4bb2
llvm-config is a tool to output compile and linker flags, when compiling against llvm. The tool however outputs static library names despite libllvm is build as shared library on nixos. This was fixed for llvm 3.4, 3.5 and 3.7. For llvm 3.8 and 3.9 it printed the library extension twice (.so.so). This was fixed in 4.0 and the patch is backported to 3.8 and 3.9 in this pull request. ``` $ for i in 34 35 37 38 39; do echo "\nllvm-$i"; nix-shell -p llvmPackages_$i.llvm --run 'llvm-config --libnames'; done llvm-34 libLLVMInstrumentation.so libLLVMIRReader.so libLLVMAsmParser.so ... llvm-35 libLLVMLTO.so libLLVMObjCARCOpts.so libLLVMLinker.so libLLVMipo.so ... llvm-37 libLLVMLTO.so libLLVMObjCARCOpts.so libLLVMLinker.so libLLVMBitWriter.so ... llvm-38 libLLVM-3.8.1.so llvm-39 libLLVM-3.9.so ``` fixes #26713
82 lines
2 KiB
Nix
82 lines
2 KiB
Nix
{ stdenv
|
|
, fetch
|
|
, perl
|
|
, groff
|
|
, cmake
|
|
, python
|
|
, libffi
|
|
, binutils
|
|
, libxml2
|
|
, valgrind
|
|
, ncurses
|
|
, version
|
|
, zlib
|
|
, compiler-rt_src
|
|
, debugVersion ? false
|
|
, enableSharedLibraries ? !stdenv.isDarwin
|
|
}:
|
|
|
|
let
|
|
src = fetch "llvm" "0xf5q17kkxsrm2gsi93h4pwlv663kji73r2g4asb97klsmb626a4";
|
|
in stdenv.mkDerivation rec {
|
|
name = "llvm-${version}";
|
|
|
|
unpackPhase = ''
|
|
unpackFile ${src}
|
|
mv llvm-${version}.src llvm
|
|
sourceRoot=$PWD/llvm
|
|
unpackFile ${compiler-rt_src}
|
|
mv compiler-rt-* $sourceRoot/projects/compiler-rt
|
|
'';
|
|
|
|
buildInputs = [ perl groff cmake libxml2 python libffi ] ++ stdenv.lib.optional stdenv.isLinux valgrind;
|
|
|
|
propagatedBuildInputs = [ ncurses zlib ];
|
|
|
|
# hacky fix: created binaries need to be run before installation
|
|
preBuild = ''
|
|
mkdir -p $out/
|
|
ln -sv $PWD/lib $out
|
|
'';
|
|
|
|
cmakeFlags = with stdenv; [
|
|
"-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}"
|
|
"-DLLVM_BUILD_TESTS=ON"
|
|
"-DLLVM_ENABLE_FFI=ON"
|
|
"-DLLVM_REQUIRES_RTTI=1"
|
|
] ++ stdenv.lib.optional enableSharedLibraries
|
|
"-DBUILD_SHARED_LIBS=ON"
|
|
++ stdenv.lib.optional (!isDarwin)
|
|
"-DLLVM_BINUTILS_INCDIR=${binutils.dev}/include"
|
|
++ stdenv.lib.optionals ( isDarwin) [
|
|
"-DCMAKE_CXX_FLAGS=-stdlib=libc++"
|
|
"-DCAN_TARGET_i386=false"
|
|
];
|
|
|
|
patches = [ ./fix-15974.patch ] ++
|
|
stdenv.lib.optionals (!stdenv.isDarwin) [../fix-llvm-config.patch ];
|
|
|
|
postBuild = ''
|
|
rm -fR $out
|
|
|
|
paxmark m bin/{lli,llvm-rtdyld}
|
|
|
|
paxmark m unittests/ExecutionEngine/JIT/JITTests
|
|
paxmark m unittests/ExecutionEngine/MCJIT/MCJITTests
|
|
paxmark m unittests/Support/SupportTests
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
passthru.src = src;
|
|
|
|
meta = {
|
|
description = "Collection of modular and reusable compiler and toolchain technologies";
|
|
homepage = http://llvm.org/;
|
|
license = stdenv.lib.licenses.ncsa;
|
|
maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric ];
|
|
platforms = stdenv.lib.platforms.all;
|
|
};
|
|
}
|
|
|