7b9d3f8605
It's a long build and generally painful to split into smaller commits, so I apologize for lumping many changes into one commit but this is far easier. There are still several outdated parts of the darwin stdenv but these changes should bring us closer to the goal. Fixes #18461
102 lines
3.2 KiB
Nix
102 lines
3.2 KiB
Nix
{ stdenv, fetchFromGitHub, autoconf, automake, libtool_2
|
|
, llvm, libcxx, libcxxabi, clang, openssl, libuuid
|
|
, libobjc ? null
|
|
}:
|
|
|
|
let
|
|
baseParams = rec {
|
|
name = "cctools-port-${version}";
|
|
version = "886";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "tpoechtrager";
|
|
repo = "cctools-port";
|
|
rev = "02f0b8ecd87a3951653d838a321ae744815e21a5";
|
|
sha256 = "0bzyabzr5dvbxglr74d0kbrk2ij5x7s5qcamqi1v546q1had1wz1";
|
|
};
|
|
|
|
buildInputs = [ autoconf automake libtool_2 openssl libuuid ] ++
|
|
# Only need llvm and clang if the stdenv isn't already clang-based (TODO: just make a stdenv.cc.isClang)
|
|
stdenv.lib.optionals (!stdenv.isDarwin) [ llvm clang ] ++
|
|
stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ];
|
|
|
|
patches = [
|
|
./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch
|
|
];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
configureFlags = stdenv.lib.optionals (!stdenv.isDarwin) [ "CXXFLAGS=-I${libcxx}/include/c++/v1" ];
|
|
|
|
postPatch = ''
|
|
sed -i -e 's/addStandardLibraryDirectories = true/addStandardLibraryDirectories = false/' cctools/ld64/src/ld/Options.cpp
|
|
|
|
# FIXME: there are far more absolute path references that I don't want to fix right now
|
|
substituteInPlace cctools/configure.ac \
|
|
--replace "-isystem /usr/local/include -isystem /usr/pkg/include" "" \
|
|
--replace "-L/usr/local/lib" "" \
|
|
|
|
substituteInPlace cctools/include/Makefile \
|
|
--replace "/bin/" ""
|
|
|
|
patchShebangs tools
|
|
sed -i -e 's/which/type -P/' tools/*.sh
|
|
|
|
# Workaround for https://www.sourceware.org/bugzilla/show_bug.cgi?id=11157
|
|
cat > cctools/include/unistd.h <<EOF
|
|
#ifdef __block
|
|
# undef __block
|
|
# include_next "unistd.h"
|
|
# define __block __attribute__((__blocks__(byref)))
|
|
#else
|
|
# include_next "unistd.h"
|
|
#endif
|
|
EOF
|
|
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
|
|
sed -i -e 's|clang++|& -I${libcxx}/include/c++/v1|' cctools/autogen.sh
|
|
'';
|
|
|
|
# TODO: this builds an ld without support for LLVM's LTO. We need to teach it, but that's rather
|
|
# hairy to handle during bootstrap. Perhaps it could be optional?
|
|
preConfigure = ''
|
|
cd cctools
|
|
sh autogen.sh
|
|
'';
|
|
|
|
preInstall = ''
|
|
pushd include
|
|
make DSTROOT=$out/include RC_OS=common install
|
|
popd
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "http://www.opensource.apple.com/source/cctools/";
|
|
description = "Mac OS X Compiler Tools (cross-platform port)";
|
|
license = stdenv.lib.licenses.apsl20;
|
|
};
|
|
};
|
|
in {
|
|
native = stdenv.mkDerivation (baseParams // {
|
|
# A hack for now...
|
|
postInstall = ''
|
|
cat >$out/bin/dsymutil << EOF
|
|
#!${stdenv.shell}
|
|
EOF
|
|
chmod +x $out/bin/dsymutil
|
|
'';
|
|
});
|
|
|
|
cross =
|
|
{ cross, maloader, makeWrapper, xctoolchain}: stdenv.mkDerivation (baseParams // {
|
|
configureFlags = baseParams.configureFlags ++ [ "--target=${cross.config}" ];
|
|
|
|
postInstall = ''
|
|
for tool in dyldinfo dwarfdump dsymutil; do
|
|
${makeWrapper}/bin/makeWrapper "${maloader}/bin/ld-mac" "$out/bin/${cross.config}-$tool" \
|
|
--add-flags "${xctoolchain}/bin/$tool"
|
|
ln -s "$out/bin/${cross.config}-$tool" "$out/bin/$tool"
|
|
done
|
|
'';
|
|
});
|
|
}
|