ldc: 1.12.0 -> 1.14.0
This commit is contained in:
parent
a44784e811
commit
98c6d9d799
@ -2,8 +2,8 @@
|
||||
, python, libconfig, lit, gdb, unzip, darwin, bash
|
||||
, callPackage, makeWrapper, targetPackages
|
||||
, bootstrapVersion ? false
|
||||
, version ? "1.12.0"
|
||||
, ldcSha256 ? "1fdma1w8j37wkr0pqdar11slkk36qymamxnk6d9k8ybhjmxaaawm"
|
||||
, version ? "1.14.0"
|
||||
, ldcSha256 ? "147vlzzzjx2n6zyz9wj54gj046i1mw5p5wixwzi5wkllgxghyy9c"
|
||||
}:
|
||||
|
||||
let
|
||||
@ -18,208 +18,156 @@ let
|
||||
else
|
||||
"";
|
||||
|
||||
ldcBuild = stdenv.mkDerivation rec {
|
||||
name = "ldcBuild-${version}";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz";
|
||||
sha256 = ldcSha256;
|
||||
};
|
||||
|
||||
postUnpack = ''
|
||||
patchShebangs .
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (!bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||||
# http://forum.dlang.org/thread/xtbbqthxutdoyhnxjhxl@forum.dlang.org
|
||||
rm -r ldc-${version}-src/tests/dynamiccompile
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/issues/34817
|
||||
rm -r ldc-${version}-src/tests/plugins/addFuncEntryCall
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
|
||||
rm -r ldc-${version}-src/tests/debuginfo/classtypes_gdb.d
|
||||
rm -r ldc-${version}-src/tests/debuginfo/nested_gdb.d
|
||||
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/runnable/test16096.sh
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/compilable/ldc_output_filenames.sh
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/compilable/crlf.sh
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/compilable/issue15574.sh
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/compilable/test6461.sh
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
echo ${tzdata}/share/zoneinfo/ > ldc-${version}-src/TZDatabaseDirFile
|
||||
|
||||
# Remove cppa test for now because it doesn't work.
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/runnable/cppa.d
|
||||
rm ldc-${version}-src/tests/d2/dmd-testsuite/runnable/extra-files/cppb.cpp
|
||||
'';
|
||||
|
||||
datetimePath = if bootstrapVersion then
|
||||
"phobos/std/datetime.d"
|
||||
else
|
||||
"phobos/std/datetime/timezone.d";
|
||||
|
||||
postPatch = ''
|
||||
# https://issues.dlang.org/show_bug.cgi?id=15391
|
||||
substituteInPlace runtime/phobos/std/net/curl.d \
|
||||
--replace libcurl.so ${curl.out}/lib/libcurl.so
|
||||
|
||||
substituteInPlace tests/d2/dmd-testsuite/Makefile \
|
||||
--replace "SHELL=/bin/bash" "SHELL=${bash}/bin/bash"
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (bootstrapVersion && stdenv.hostPlatform.isDarwin) ''
|
||||
# Was not able to compile on darwin due to "__inline_isnanl"
|
||||
# being undefined.
|
||||
substituteInPlace dmd2/root/port.c --replace __inline_isnanl __inline_isnan
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake makeWrapper llvm bootstrapLdc python lit gdb unzip ]
|
||||
|
||||
++ stdenv.lib.optional (bootstrapVersion) [
|
||||
libconfig
|
||||
]
|
||||
|
||||
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
|
||||
Foundation
|
||||
]);
|
||||
|
||||
|
||||
buildInputs = [ curl tzdata ];
|
||||
|
||||
#"-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc"
|
||||
# Xcode 9.0.1 fixes that bug according to ldc release notes
|
||||
#"-DRT_ARCHIVE_WITH_LDC=OFF"
|
||||
#"-DD_FLAGS=TZ_DATABASE_DIR=${tzdata}/share/zoneinfo/"
|
||||
#"-DCMAKE_BUILD_TYPE=Release"
|
||||
#"-DCMAKE_SKIP_RPATH=ON"
|
||||
|
||||
#-DINCLUDE_INSTALL_DIR=$out/include/dlang/ldc
|
||||
#
|
||||
cmakeFlagsString = stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
"-DD_FLAGS=-d-version=TZDatabaseDir;-J$PWD"
|
||||
'';
|
||||
|
||||
preConfigure = stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
cmakeFlagsArray=(
|
||||
${cmakeFlagsString}
|
||||
)
|
||||
'';
|
||||
|
||||
postConfigure = ''
|
||||
export DMD=$PWD/bin/ldmd2
|
||||
'';
|
||||
|
||||
makeFlags = [ "DMD=$DMD" ];
|
||||
|
||||
doCheck = !bootstrapVersion;
|
||||
|
||||
checkPhase = ''
|
||||
# Build and run LDC D unittests.
|
||||
ctest --output-on-failure -R "ldc2-unittest"
|
||||
# Run LIT testsuite.
|
||||
ctest -V -R "lit-tests"
|
||||
# Run DMD testsuite.
|
||||
DMD_TESTSUITE_MAKE_ARGS=-j$NIX_BUILD_CORES ctest -V -R "dmd-testsuite"
|
||||
'';
|
||||
|
||||
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 ];
|
||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Need to test Phobos in a fixed-output derivation, otherwise the
|
||||
# network stuff in Phobos would fail if sandbox mode is enabled.
|
||||
#
|
||||
# Disable tests on Darwin for now because of
|
||||
# https://github.com/NixOS/nixpkgs/issues/41099
|
||||
# https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
|
||||
ldcUnittests = if (!bootstrapVersion && !stdenv.hostPlatform.isDarwin) then
|
||||
stdenv.mkDerivation rec {
|
||||
name = "ldcUnittests-${version}";
|
||||
|
||||
enableParallelBuilding = ldcBuild.enableParallelBuilding;
|
||||
preferLocalBuild = true;
|
||||
inputString = ldcBuild.outPath;
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = builtins.hashString "sha256" inputString;
|
||||
|
||||
src = ldcBuild.src;
|
||||
|
||||
postUnpack = ldcBuild.postUnpack;
|
||||
|
||||
postPatch = ldcBuild.postPatch;
|
||||
|
||||
nativeBuildInputs = ldcBuild.nativeBuildInputs
|
||||
|
||||
++ [
|
||||
ldcBuild
|
||||
];
|
||||
|
||||
buildInputs = ldcBuild.buildInputs;
|
||||
|
||||
preConfigure = ''
|
||||
cmakeFlagsArray=(
|
||||
${ldcBuild.cmakeFlagsString}
|
||||
"-DD_COMPILER=${ldcBuild.out}/bin/ldmd2"
|
||||
)
|
||||
'';
|
||||
|
||||
postConfigure = ldcBuild.postConfigure;
|
||||
|
||||
makeFlags = ldcBuild.makeFlags;
|
||||
|
||||
buildCmd = if bootstrapVersion then
|
||||
"ctest -V -R \"build-druntime-ldc-unittest|build-phobos2-ldc-unittest\""
|
||||
else
|
||||
"make -j$NIX_BUILD_CORES DMD=${ldcBuild.out}/bin/ldc2 phobos2-test-runner phobos2-test-runner-debug";
|
||||
|
||||
testCmd = if bootstrapVersion then
|
||||
"ctest -j$NIX_BUILD_CORES --output-on-failure -E \"dmd-testsuite|lit-tests|ldc2-unittest|llvm-ir-testsuite\""
|
||||
else
|
||||
"ctest -j$NIX_BUILD_CORES --output-on-failure -E \"dmd-testsuite|lit-tests|ldc2-unittest\"";
|
||||
|
||||
buildPhase = ''
|
||||
${buildCmd}
|
||||
ln -s ${ldcBuild.out}/bin/ldmd2 $PWD/bin/ldmd2
|
||||
${testCmd}
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
echo -n $inputString > $out
|
||||
'';
|
||||
}
|
||||
else
|
||||
"";
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit ldcUnittests;
|
||||
name = "ldc-${version}";
|
||||
phases = "installPhase";
|
||||
buildInputs = ldcBuild.buildInputs;
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
cp -r --symbolic-link ${ldcBuild}/* $out/
|
||||
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 && stdenv.hostPlatform.isDarwin) ''
|
||||
# https://github.com/NixOS/nixpkgs/issues/34817
|
||||
rm -r ldc-${version}-src/tests/plugins/addFuncEntryCall
|
||||
''
|
||||
|
||||
+ stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
echo ${tzdata}/share/zoneinfo/ > ldc-${version}-src/TZDatabaseDirFile
|
||||
|
||||
echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > ldc-${version}-src/LibcurlPathFile
|
||||
'';
|
||||
|
||||
meta = ldcBuild.meta;
|
||||
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 makeWrapper llvm unzip ]
|
||||
|
||||
++ stdenv.lib.optional (!bootstrapVersion) [
|
||||
bootstrapLdc python lit
|
||||
]
|
||||
|
||||
++ stdenv.lib.optional (!bootstrapVersion && !stdenv.hostPlatform.isDarwin) [
|
||||
# https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
|
||||
gdb
|
||||
]
|
||||
|
||||
++ stdenv.lib.optional (bootstrapVersion) [
|
||||
libconfig
|
||||
]
|
||||
|
||||
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
|
||||
Foundation
|
||||
]);
|
||||
|
||||
|
||||
buildInputs = [ curl tzdata ];
|
||||
|
||||
cmakeFlagsString = stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
"-DD_FLAGS=-d-version=TZDatabaseDir;-d-version=LibcurlPath;-J$PWD"
|
||||
"-DCMAKE_BUILD_TYPE=Release"
|
||||
'';
|
||||
|
||||
preConfigure = stdenv.lib.optionalString (!bootstrapVersion) ''
|
||||
cmakeFlagsArray=(
|
||||
${cmakeFlagsString}
|
||||
)
|
||||
'';
|
||||
|
||||
postConfigure = ''
|
||||
export DMD=$PWD/bin/ldmd2
|
||||
'';
|
||||
|
||||
makeFlags = [ "DMD=$DMD" ];
|
||||
|
||||
fixNames = if stdenv.hostPlatform.isDarwin then ''
|
||||
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")
|
||||
''
|
||||
else
|
||||
"";
|
||||
|
||||
# https://github.com/ldc-developers/ldc/issues/2497#issuecomment-459633746
|
||||
additionalExceptions = if stdenv.hostPlatform.isDarwin then
|
||||
"|druntime-test-shared"
|
||||
else
|
||||
"";
|
||||
|
||||
doCheck = !bootstrapVersion;
|
||||
|
||||
checkPhase = stdenv.lib.optionalString doCheck ''
|
||||
# Build default lib test runners
|
||||
make -j$NIX_BUILD_CORES all-test-runners
|
||||
|
||||
${fixNames}
|
||||
|
||||
# Run dmd testsuite
|
||||
export DMD_TESTSUITE_MAKE_ARGS="-j$NIX_BUILD_CORES DMD=$DMD CC=$CXX"
|
||||
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 ];
|
||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user