165 lines
5.3 KiB
Nix
165 lines
5.3 KiB
Nix
|
{ bootstrapVersion ? false
|
||
|
, version
|
||
|
, ldcSha256
|
||
|
}:
|
||
|
{ stdenv, fetchurl, cmake, ninja, llvm_5, llvm_8, curl, tzdata
|
||
|
, libconfig, lit, gdb, unzip, darwin, bash, ldcBootstrap
|
||
|
, callPackage, makeWrapper, runCommand, targetPackages
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
pathConfig = runCommand "ldc-lib-paths" {} ''
|
||
|
mkdir $out
|
||
|
echo ${tzdata}/share/zoneinfo/ > $out/TZDatabaseDirFile
|
||
|
echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > $out/LibcurlPathFile
|
||
|
'';
|
||
|
|
||
|
bootstrapLdc = if bootstrapVersion then null else ldcBootstrap;
|
||
|
|
||
|
in
|
||
|
|
||
|
stdenv.mkDerivation rec {
|
||
|
pname = "ldc";
|
||
|
inherit version;
|
||
|
|
||
|
enableParallelBuilding = true;
|
||
|
|
||
|
src = fetchurl {
|
||
|
url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz";
|
||
|
sha256 = ldcSha256;
|
||
|
};
|
||
|
|
||
|
# https://issues.dlang.org/show_bug.cgi?id=19553
|
||
|
hardeningDisable = [ "fortify" ];
|
||
|
|
||
|
postUnpack = ''
|
||
|
patchShebangs .
|
||
|
''
|
||
|
|
||
|
+ stdenv.lib.optionalString (!bootstrapVersion) ''
|
||
|
rm ldc-${version}-src/tests/d2/dmd-testsuite/fail_compilation/mixin_gc.d
|
||
|
rm ldc-${version}-src/tests/d2/dmd-testsuite/runnable/xtest46_gc.d
|
||
|
rm ldc-${version}-src/tests/d2/dmd-testsuite/runnable/testptrref_gc.d
|
||
|
|
||
|
# test depends on current year
|
||
|
rm ldc-${version}-src/tests/d2/dmd-testsuite/compilable/ddocYear.d
|
||
|
''
|
||
|
|
||
|
+ stdenv.lib.optionalString (!bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||
|
# https://github.com/NixOS/nixpkgs/issues/34817
|
||
|
rm -r ldc-${version}-src/tests/plugins/addFuncEntryCall
|
||
|
'';
|
||
|
|
||
|
postPatch = ''
|
||
|
# Setting SHELL=$SHELL when dmd testsuite is run doesn't work on Linux somehow
|
||
|
substituteInPlace tests/d2/dmd-testsuite/Makefile --replace "SHELL=/bin/bash" "SHELL=${bash}/bin/bash"
|
||
|
''
|
||
|
|
||
|
+ stdenv.lib.optionalString (!bootstrapVersion && stdenv.hostPlatform.isLinux) ''
|
||
|
substituteInPlace runtime/phobos/std/socket.d --replace "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
|
||
|
''
|
||
|
|
||
|
+ stdenv.lib.optionalString (!bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||
|
substituteInPlace runtime/phobos/std/socket.d --replace "foreach (name; names)" "names = []; foreach (name; names)"
|
||
|
''
|
||
|
|
||
|
+ stdenv.lib.optionalString (bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||
|
# Was not able to compile on darwin due to "__inline_isnanl"
|
||
|
# being undefined.
|
||
|
# TODO Remove with version > 0.17.6
|
||
|
substituteInPlace dmd2/root/port.c --replace __inline_isnanl __inline_isnan
|
||
|
'';
|
||
|
|
||
|
nativeBuildInputs = [ cmake ninja makeWrapper unzip ]
|
||
|
++ stdenv.lib.optionals (!bootstrapVersion) [
|
||
|
bootstrapLdc lit lit.python
|
||
|
]
|
||
|
++ stdenv.lib.optional (!bootstrapVersion && stdenv.hostPlatform.isDarwin)
|
||
|
# https://github.com/NixOS/nixpkgs/issues/57120
|
||
|
# https://github.com/NixOS/nixpkgs/pull/59197#issuecomment-481972515
|
||
|
llvm_5
|
||
|
++ stdenv.lib.optional (!bootstrapVersion && !stdenv.hostPlatform.isDarwin)
|
||
|
llvm_8
|
||
|
++ stdenv.lib.optional (!bootstrapVersion && !stdenv.hostPlatform.isDarwin)
|
||
|
# https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
|
||
|
gdb
|
||
|
++ stdenv.lib.optionals (bootstrapVersion) [
|
||
|
libconfig llvm_5
|
||
|
]
|
||
|
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin
|
||
|
darwin.apple_sdk.frameworks.Foundation;
|
||
|
|
||
|
buildInputs = [ curl tzdata ];
|
||
|
|
||
|
cmakeFlags = stdenv.lib.optionals (!bootstrapVersion) [
|
||
|
"-DD_FLAGS=-d-version=TZDatabaseDir;-d-version=LibcurlPath;-J${pathConfig}"
|
||
|
"-DCMAKE_BUILD_TYPE=Release"
|
||
|
];
|
||
|
|
||
|
postConfigure = ''
|
||
|
export DMD=$PWD/bin/ldmd2
|
||
|
'';
|
||
|
|
||
|
makeFlags = [ "DMD=$DMD" ];
|
||
|
|
||
|
fixNames = stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||
|
fixDarwinDylibNames() {
|
||
|
local flags=()
|
||
|
|
||
|
for fn in "$@"; do
|
||
|
flags+=(-change "$(basename "$fn")" "$fn")
|
||
|
done
|
||
|
|
||
|
for fn in "$@"; do
|
||
|
if [ -L "$fn" ]; then continue; fi
|
||
|
echo "$fn: fixing dylib"
|
||
|
install_name_tool -id "$fn" "''${flags[@]}" "$fn"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
fixDarwinDylibNames $(find "$(pwd)/lib" -name "*.dylib")
|
||
|
export DYLD_LIBRARY_PATH=$(pwd)/lib
|
||
|
'';
|
||
|
|
||
|
# https://github.com/ldc-developers/ldc/issues/2497#issuecomment-459633746
|
||
|
additionalExceptions = stdenv.lib.optionalString stdenv.hostPlatform.isDarwin
|
||
|
"|druntime-test-shared";
|
||
|
|
||
|
doCheck = !bootstrapVersion;
|
||
|
|
||
|
checkPhase = stdenv.lib.optionalString doCheck ''
|
||
|
# Build default lib test runners
|
||
|
ninja -j$NIX_BUILD_CORES all-test-runners
|
||
|
|
||
|
${fixNames}
|
||
|
|
||
|
# Run dmd testsuite
|
||
|
export DMD_TESTSUITE_MAKE_ARGS="-j$NIX_BUILD_CORES DMD=$DMD"
|
||
|
ctest -V -R "dmd-testsuite"
|
||
|
|
||
|
# Build and run LDC D unittests.
|
||
|
ctest --output-on-failure -R "ldc2-unittest"
|
||
|
|
||
|
# Run LIT testsuite.
|
||
|
ctest -V -R "lit-tests"
|
||
|
|
||
|
# Run default lib unittests
|
||
|
ctest -j$NIX_BUILD_CORES --output-on-failure -E "ldc2-unittest|lit-tests|dmd-testsuite${additionalExceptions}"
|
||
|
'';
|
||
|
|
||
|
postInstall = ''
|
||
|
wrapProgram $out/bin/ldc2 \
|
||
|
--prefix PATH ":" "${targetPackages.stdenv.cc}/bin" \
|
||
|
--set-default CC "${targetPackages.stdenv.cc}/bin/cc"
|
||
|
'';
|
||
|
|
||
|
meta = with stdenv.lib; {
|
||
|
description = "The LLVM-based D compiler";
|
||
|
homepage = "https://github.com/ldc-developers/ldc";
|
||
|
# from https://github.com/ldc-developers/ldc/blob/master/LICENSE
|
||
|
license = with licenses; [ bsd3 boost mit ncsa gpl2Plus ];
|
||
|
maintainers = with maintainers; [ ThomasMader lionello ];
|
||
|
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||
|
};
|
||
|
}
|