lol
1{ stdenv
2, fetch
3, perl
4, groff
5, cmake
6, python
7, libffi
8, binutils
9, libxml2
10, valgrind
11, ncurses
12, version
13, zlib
14, compiler-rt_src
15}:
16
17let
18 src = fetch "llvm" "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn";
19in stdenv.mkDerivation rec {
20 name = "llvm-${version}";
21
22 unpackPhase = ''
23 unpackFile ${src}
24 mv llvm-${version}.src llvm
25 sourceRoot=$PWD/llvm
26 unpackFile ${compiler-rt_src}
27 mv compiler-rt-* $sourceRoot/projects/compiler-rt
28 '';
29
30 buildInputs = [ perl groff cmake libxml2 python libffi ] /* ++ stdenv.lib.optional stdenv.isLinux valgrind */;
31
32 propagatedBuildInputs = [ ncurses zlib ];
33
34 # hacky fix: created binaries need to be run before installation
35 preBuild = ''
36 mkdir -p $out/
37 ln -sv $PWD/lib $out
38 '';
39
40 cmakeFlags = with stdenv; [
41 "-DCMAKE_BUILD_TYPE=Release"
42 "-DLLVM_BUILD_TESTS=ON"
43 "-DLLVM_ENABLE_FFI=ON"
44 "-DLLVM_ENABLE_RTTI=ON"
45 ] ++ stdenv.lib.optionals (!isDarwin) [
46 "-DBUILD_SHARED_LIBS=ON"
47 "-DLLVM_BINUTILS_INCDIR=${binutils}/include"
48 ] ++ stdenv.lib.optionals ( isDarwin) [
49 "-DCMAKE_CXX_FLAGS=-stdlib=libc++"
50 "-DCAN_TARGET_i386=false"
51 ];
52
53 postBuild = ''
54 rm -fR $out
55
56 paxmark m bin/{lli,llvm-rtdyld}
57
58 paxmark m unittests/ExecutionEngine/JIT/JITTests
59 paxmark m unittests/ExecutionEngine/MCJIT/MCJITTests
60 paxmark m unittests/Support/SupportTests
61 '';
62
63 enableParallelBuilding = true;
64
65 passthru.src = src;
66
67 meta = {
68 description = "Collection of modular and reusable compiler and toolchain technologies";
69 homepage = http://llvm.org/;
70 license = stdenv.lib.licenses.bsd3;
71 maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric ];
72 platforms = stdenv.lib.platforms.all;
73 };
74}