d8a0307a5d
This reinstates the libSystem selective symbol export machinery we used to have, but locks it to the symbols that were present in 10.11 and skips the actual compiled code we put into that library in favor of the system initialization code. That should make it more stable and less likely to do weird stuff than the last time we did this.
91 lines
2.5 KiB
Nix
91 lines
2.5 KiB
Nix
{ stdenv
|
|
, fetch
|
|
, perl
|
|
, groff
|
|
, cmake
|
|
, python
|
|
, libffi
|
|
, binutils
|
|
, libxml2
|
|
, valgrind
|
|
, ncurses
|
|
, version
|
|
, zlib
|
|
, compiler-rt_src
|
|
, libcxxabi
|
|
, debugVersion ? false
|
|
, enableSharedLibraries ? !stdenv.isDarwin
|
|
}:
|
|
|
|
let
|
|
src = fetch "llvm" "1masakdp9g2dan1yrazg7md5am2vacbkb3nahb3dchpc1knr8xxy";
|
|
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.isDarwin libcxxabi;
|
|
|
|
propagatedBuildInputs = [ ncurses zlib ];
|
|
|
|
# The goal here is to disable LLVM bindings (currently go and ocaml) regardless
|
|
# of whether the impure CMake search sheananigans find the compilers in global
|
|
# paths. This mostly exists because sandbox builds don't work very well on Darwin
|
|
# and sometimes you get weird behavior if CMake finds go in your system path.
|
|
# This would be far prettier if there were a CMake option to just disable bindings
|
|
# but from what I can tell, there isn't such a thing. The file in question only
|
|
# contains `if(WIN32)` conditions to check whether to disable bindings, so making
|
|
# those always succeed has the net effect of disabling all bindings.
|
|
prePatch = ''
|
|
substituteInPlace cmake/config-ix.cmake --replace "if(WIN32)" "if(1)"
|
|
'';
|
|
|
|
# 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_INSTALL_UTILS=ON" # Needed by rustc
|
|
"-DLLVM_BUILD_TESTS=ON"
|
|
"-DLLVM_ENABLE_FFI=ON"
|
|
"-DLLVM_ENABLE_RTTI=ON"
|
|
] ++ stdenv.lib.optional enableSharedLibraries
|
|
"-DBUILD_SHARED_LIBS=ON"
|
|
++ stdenv.lib.optional (!isDarwin)
|
|
"-DLLVM_BINUTILS_INCDIR=${binutils.dev}/include"
|
|
++ stdenv.lib.optionals ( isDarwin) [
|
|
"-DLLVM_ENABLE_LIBCXX=ON"
|
|
"-DCAN_TARGET_i386=false"
|
|
];
|
|
|
|
NIX_LDFLAGS = "-lpthread"; # no idea what's the problem
|
|
|
|
postBuild = ''
|
|
rm -fR $out
|
|
|
|
paxmark m bin/{lli,llvm-rtdyld}
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
passthru.src = src;
|
|
|
|
meta = {
|
|
description = "Collection of modular and reusable compiler and toolchain technologies";
|
|
homepage = http://llvm.org/;
|
|
license = stdenv.lib.licenses.bsd3;
|
|
maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric ];
|
|
platforms = stdenv.lib.platforms.all;
|
|
};
|
|
}
|