Merge pull request #82694 from lionello/dmd-bootstrap
dmd: 2.085.1 -> 2.091.1
This commit is contained in:
commit
3b00e78e63
52
pkgs/development/compilers/dmd/binary.nix
Normal file
52
pkgs/development/compilers/dmd/binary.nix
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{ stdenv, fetchurl, curl, tzdata, autoPatchelfHook, fixDarwinDylibNames, glibc
|
||||||
|
, version, hashes }:
|
||||||
|
with stdenv;
|
||||||
|
let
|
||||||
|
OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
|
||||||
|
MODEL = toString hostPlatform.parsed.cpu.bits;
|
||||||
|
in mkDerivation {
|
||||||
|
pname = "dmd-bootstrap";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchurl rec {
|
||||||
|
name = "dmd.${version}.${OS}.tar.xz";
|
||||||
|
url = "http://downloads.dlang.org/releases/2.x/${version}/${name}";
|
||||||
|
sha256 = hashes.${OS} or (throw "missing bootstrap sha256 for OS ${OS}");
|
||||||
|
};
|
||||||
|
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ fixDarwinDylibNames autoPatchelfHook ];
|
||||||
|
propagatedBuildInputs = [ curl tzdata ] ++ lib.optional hostPlatform.isLinux glibc;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
|
||||||
|
# try to copy model-specific binaries into bin first
|
||||||
|
mv ${OS}/bin${MODEL} $out/bin || true
|
||||||
|
|
||||||
|
mv src license.txt ${OS}/* $out/
|
||||||
|
|
||||||
|
# move man into place
|
||||||
|
mkdir -p $out/share
|
||||||
|
mv man $out/share/
|
||||||
|
|
||||||
|
# move docs into place
|
||||||
|
mkdir -p $out/share/doc
|
||||||
|
mv html/d $out/share/doc/
|
||||||
|
|
||||||
|
# fix paths in dmd.conf (one level less)
|
||||||
|
substituteInPlace $out/bin/dmd.conf --replace "/../../" "/../"
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
inherit version;
|
||||||
|
description = "Digital Mars D Compiler Package";
|
||||||
|
# As of 2.075 all sources and binaries use the boost license
|
||||||
|
license = licenses.boost;
|
||||||
|
maintainers = [ maintainers.lionello ];
|
||||||
|
homepage = "https://dlang.org/";
|
||||||
|
platforms = [ "x86_64-darwin" "i686-linux" "x86_64-linux" ];
|
||||||
|
};
|
||||||
|
}
|
9
pkgs/development/compilers/dmd/bootstrap.nix
Normal file
9
pkgs/development/compilers/dmd/bootstrap.nix
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{ callPackage }:
|
||||||
|
callPackage ./binary.nix {
|
||||||
|
version = "2.090.1";
|
||||||
|
hashes = {
|
||||||
|
# Get these from `nix-prefetch-url http://downloads.dlang.org/releases/2.x/2.090.1/dmd.2.090.1.linux.tar.xz` etc..
|
||||||
|
osx = "0rbn7j4dr3q0y09fblpj999bi063pi4230rqd5xgd3gwxxa0cz7l";
|
||||||
|
linux = "1vk6lsvd6y7ccvffd23yial4ig90azaxf2rxc6yvidqd1qhan807";
|
||||||
|
};
|
||||||
|
}
|
@ -1,11 +1,13 @@
|
|||||||
{ stdenv, lib, fetchFromGitHub
|
{ stdenv, lib, fetchFromGitHub
|
||||||
, makeWrapper, unzip, which, writeTextFile
|
, makeWrapper, unzip, which, writeTextFile
|
||||||
, curl, tzdata, gdb, darwin, git
|
, curl, tzdata, gdb, darwin, git, callPackage
|
||||||
, targetPackages, ldc
|
, targetPackages, fetchpatch, bash
|
||||||
, version ? "2.085.1"
|
, dmdBootstrap ? callPackage ./bootstrap.nix { }
|
||||||
, dmdSha256 ? "0ccidfcawrcwdpfjwjiln5xwr4ffp8i2hwx52p8zn3xmc5yxm660"
|
, HOST_DMD ? "${dmdBootstrap}/bin/dmd"
|
||||||
, druntimeSha256 ? "109f2glsqrlshk06761xlw4r5v22mivp873cq9g5gcax3g00k617"
|
, version ? "2.091.1"
|
||||||
, phobosSha256 ? "0giispqqx8j8xg6c0hm7nx77bcahiwic8rvf12sws3sv5pizv8pr"
|
, dmdSha256 ? "0brz0n84jdkhr4sq4k91w48p739psbhbb1jk2pi9q60psmx353yr"
|
||||||
|
, druntimeSha256 ? "0smgpmfriffh110ksski1s5j921kmxbc2zjy0dyj9ksyrxbzklbl"
|
||||||
|
, phobosSha256 ? "1n00anajgibrfs1xzvrmag28hvbvkc0w1fwlimqbznvhf28rhrxs"
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -51,7 +53,17 @@ stdenv.mkDerivation rec {
|
|||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
patchFlags = [ "--directory=dmd" "-p1" ];
|
patchFlags = [ "--directory=dmd" "-p1" "-F3" ];
|
||||||
|
patches = [
|
||||||
|
(fetchpatch {
|
||||||
|
url = "https://github.com/dlang/dmd/commit/4157298cf04f7aae9f701432afd1de7b7e05c30f.patch";
|
||||||
|
sha256 = "0v4xgqmrx5r8vbx5a4v88s0xnm23mam9nm99yfga7s2sxr0hi5p2";
|
||||||
|
})
|
||||||
|
(fetchpatch {
|
||||||
|
url = "https://github.com/dlang/dmd/commit/1b8a4c90b040bf2f0b68a2739de4991315580b13.patch";
|
||||||
|
sha256 = "1iih6aalv4fsw9mbrlrybhngkkchzzrzg7q8zl047w36c0x397cs";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
sourceRoot = ".";
|
sourceRoot = ".";
|
||||||
|
|
||||||
@ -62,15 +74,17 @@ stdenv.mkDerivation rec {
|
|||||||
patchShebangs .
|
patchShebangs .
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
|
postPatch = ''
|
||||||
|
substituteInPlace dmd/test/dshell/test6952.d --replace "/usr/bin/env bash" "${bash}/bin/bash"
|
||||||
|
''
|
||||||
|
+ stdenv.lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||||
substituteInPlace phobos/std/socket.d --replace "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
|
substituteInPlace phobos/std/socket.d --replace "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
|
||||||
''
|
''
|
||||||
|
|
||||||
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||||
substituteInPlace phobos/std/socket.d --replace "foreach (name; names)" "names = []; foreach (name; names)"
|
substituteInPlace phobos/std/socket.d --replace "foreach (name; names)" "names = []; foreach (name; names)"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
nativeBuildInputs = [ ldc makeWrapper unzip which gdb git ]
|
nativeBuildInputs = [ makeWrapper unzip which gdb git ]
|
||||||
|
|
||||||
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
|
++ stdenv.lib.optional stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [
|
||||||
Foundation
|
Foundation
|
||||||
@ -89,7 +103,7 @@ stdenv.mkDerivation rec {
|
|||||||
# Buid and install are based on http://wiki.dlang.org/Building_DMD
|
# Buid and install are based on http://wiki.dlang.org/Building_DMD
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
cd dmd
|
cd dmd
|
||||||
make -j$NIX_BUILD_CORES -f posix.mak INSTALL_DIR=$out BUILD=release ENABLE_RELEASE=1 PIC=1 HOST_DMD=ldmd2
|
make -j$NIX_BUILD_CORES -f posix.mak INSTALL_DIR=$out BUILD=release ENABLE_RELEASE=1 PIC=1 HOST_DMD=${HOST_DMD}
|
||||||
cd ../druntime
|
cd ../druntime
|
||||||
make -j$NIX_BUILD_CORES -f posix.mak BUILD=release ENABLE_RELEASE=1 PIC=1 INSTALL_DIR=$out DMD=${pathToDmd}
|
make -j$NIX_BUILD_CORES -f posix.mak BUILD=release ENABLE_RELEASE=1 PIC=1 INSTALL_DIR=$out DMD=${pathToDmd}
|
||||||
cd ../phobos
|
cd ../phobos
|
||||||
@ -147,8 +161,7 @@ stdenv.mkDerivation rec {
|
|||||||
# Everything is now Boost licensed, even the backend.
|
# Everything is now Boost licensed, even the backend.
|
||||||
# https://github.com/dlang/dmd/pull/6680
|
# https://github.com/dlang/dmd/pull/6680
|
||||||
license = licenses.boost;
|
license = licenses.boost;
|
||||||
maintainers = with maintainers; [ ThomasMader ];
|
maintainers = with maintainers; [ ThomasMader lionello ];
|
||||||
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
41
pkgs/development/compilers/ldc/binary.nix
Normal file
41
pkgs/development/compilers/ldc/binary.nix
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{ stdenv, fetchurl, curl, tzdata, autoPatchelfHook, fixDarwinDylibNames, libxml2
|
||||||
|
, version, hashes }:
|
||||||
|
with stdenv;
|
||||||
|
let
|
||||||
|
OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
|
||||||
|
ARCH = toString hostPlatform.parsed.cpu.name;
|
||||||
|
in mkDerivation {
|
||||||
|
pname = "ldc-bootstrap";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchurl rec {
|
||||||
|
name = "ldc2-${version}-${OS}-${ARCH}.tar.xz";
|
||||||
|
url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/${name}";
|
||||||
|
sha256 = hashes."${OS}-${ARCH}" or (throw "missing bootstrap sha256 for ${OS}-${ARCH}");
|
||||||
|
};
|
||||||
|
|
||||||
|
dontConfigure = true;
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ fixDarwinDylibNames autoPatchelfHook ];
|
||||||
|
|
||||||
|
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libxml2 stdenv.cc.cc ];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ curl tzdata ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
|
||||||
|
mv bin etc import lib LICENSE README $out/
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
inherit version;
|
||||||
|
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" "x86_64-darwin" "aarch64-linux" ];
|
||||||
|
};
|
||||||
|
}
|
10
pkgs/development/compilers/ldc/bootstrap.nix
Normal file
10
pkgs/development/compilers/ldc/bootstrap.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ callPackage }:
|
||||||
|
callPackage ./binary.nix {
|
||||||
|
version = "1.19.0";
|
||||||
|
hashes = {
|
||||||
|
# Get these from `nix-prefetch-url https://github.com/ldc-developers/ldc/releases/download/v1.19.0/ldc2-1.19.0-osx-x86_64.tar.xz` etc..
|
||||||
|
osx-x86_64 = "1bp3xkh9zp64dzq8isanib1gacb3nfbl70qv15qygwk1zan6zgy7";
|
||||||
|
linux-x86_64 = "146grr2lwarfk13wgkpyb77xb6b3as1is2rf4s2hipqjmc8biy1h";
|
||||||
|
linux-aarch64 = "1fv6jshfvi15m7masgxq1hgp216qjd5amizrqdf26vhrq3a08li3";
|
||||||
|
};
|
||||||
|
}
|
@ -1,173 +1,5 @@
|
|||||||
{ stdenv, fetchurl, cmake, ninja, llvm_5, llvm_8, curl, tzdata
|
import ./generic.nix {
|
||||||
, libconfig, lit, gdb, unzip, darwin, bash
|
version = "1.20.1";
|
||||||
, callPackage, makeWrapper, runCommand, targetPackages
|
ldcSha256 = "1bqsgab22v02pc3c9gcyf15y7aimadv24d68icaw5lpgnvzxy89b";
|
||||||
, bootstrapVersion ? false
|
|
||||||
, version ? "1.17.0"
|
|
||||||
, ldcSha256 ? "1aag5jfrng6p4ms0fs90hjbv9bcj3hj8h52r68c3cm6racdajbva"
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
bootstrapLdc = if !bootstrapVersion then
|
|
||||||
# LDC 0.17.x is the last version which doesn't need a working D compiler to
|
|
||||||
# build so we use that version to bootstrap the actual build.
|
|
||||||
callPackage ./default.nix {
|
|
||||||
bootstrapVersion = true;
|
|
||||||
version = "0.17.6";
|
|
||||||
ldcSha256 = "0qf5kbxddgmg3kqzi0kf4bgv8vdrnv16y07hcpm0cwv9mc3qr2w6";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
"";
|
|
||||||
|
|
||||||
pathConfig = runCommand "ldc-lib-paths" {} ''
|
|
||||||
mkdir $out
|
|
||||||
echo ${tzdata}/share/zoneinfo/ > $out/TZDatabaseDirFile
|
|
||||||
echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > $out/LibcurlPathFile
|
|
||||||
'';
|
|
||||||
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 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" ];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
143
pkgs/development/compilers/ldc/generic.nix
Normal file
143
pkgs/development/compilers/ldc/generic.nix
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
{ version, ldcSha256 }:
|
||||||
|
{ stdenv, fetchurl, cmake, ninja, llvm_5, llvm_8, curl, tzdata
|
||||||
|
, libconfig, lit, gdb, unzip, darwin, bash
|
||||||
|
, callPackage, makeWrapper, runCommand, targetPackages
|
||||||
|
, ldcBootstrap ? callPackage ./bootstrap.nix { }
|
||||||
|
}:
|
||||||
|
|
||||||
|
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
|
||||||
|
'';
|
||||||
|
|
||||||
|
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 .
|
||||||
|
''
|
||||||
|
+ ''
|
||||||
|
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 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 stdenv.hostPlatform.isLinux ''
|
||||||
|
substituteInPlace runtime/phobos/std/socket.d --replace "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
|
||||||
|
''
|
||||||
|
+ stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
|
||||||
|
substituteInPlace runtime/phobos/std/socket.d --replace "foreach (name; names)" "names = []; foreach (name; names)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake ninja makeWrapper unzip ldcBootstrap lit lit.python
|
||||||
|
]
|
||||||
|
++ stdenv.lib.optionals stdenv.hostPlatform.isDarwin [
|
||||||
|
darwin.apple_sdk.frameworks.Foundation
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/57120
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/59197#issuecomment-481972515
|
||||||
|
llvm_5
|
||||||
|
]
|
||||||
|
++ stdenv.lib.optionals (!stdenv.hostPlatform.isDarwin) [
|
||||||
|
llvm_8
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818
|
||||||
|
gdb
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [ curl tzdata ];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
"-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";
|
||||||
|
|
||||||
|
checkPhase = ''
|
||||||
|
# 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" ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user