b426c85ce2
This requires some small changes in the stdenv, then working around the weird choice LLVM made to hardcode @rpath in its install name, and then lets us remove a ton of annoying workaround hacks in many of our Go packages. With any luck this will mean less hackery going forward.
87 lines
2.2 KiB
Nix
87 lines
2.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 ];
|
|
|
|
prePatch = ''
|
|
substituteInPlace CMakeLists.txt \
|
|
--replace 'set(CMAKE_INSTALL_NAME_DIR "@rpath")' "set(CMAKE_INSTALL_NAME_DIR "$out/lib")" \
|
|
--replace 'set(CMAKE_INSTALL_RPATH "@executable_path/../lib")' ""
|
|
'';
|
|
|
|
# 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=${stdenv.lib.getDev binutils}/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;
|
|
};
|
|
}
|
|
|