summaryrefslogtreecommitdiffhomepage
path: root/nix-overlays/ldc
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2023-06-09 16:48:04 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2023-06-09 16:48:04 -0400
commit77ca961d67f7dc1c6de5b5f89f7a55ff703bddde (patch)
tree945510aa8c5995b775e1a57101b4d5d11eb38f99 /nix-overlays/ldc
parentnix dev + update direnv 2.2.1 => 2.3.0 (diff)
nix overlays introduced and tracked
Diffstat (limited to 'nix-overlays/ldc')
-rw-r--r--nix-overlays/ldc/binary.nix43
-rw-r--r--nix-overlays/ldc/bootstrap.nix11
-rw-r--r--nix-overlays/ldc/default.nix4
-rw-r--r--nix-overlays/ldc/generic.nix137
4 files changed, 195 insertions, 0 deletions
diff --git a/nix-overlays/ldc/binary.nix b/nix-overlays/ldc/binary.nix
new file mode 100644
index 0000000..dd4d51c
--- /dev/null
+++ b/nix-overlays/ldc/binary.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, curl, tzdata, autoPatchelfHook, fixDarwinDylibNames, libxml2
+, version, hashes }:
+
+let
+ inherit (stdenv) hostPlatform;
+ OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name;
+ ARCH = if hostPlatform.isDarwin && hostPlatform.isAarch64 then "arm64" else hostPlatform.parsed.cpu.name;
+in stdenv.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 = lib.optionals hostPlatform.isLinux [
+ autoPatchelfHook
+ ] ++ lib.optional hostPlatform.isDarwin fixDarwinDylibNames;
+
+ 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; {
+ 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" "aarch64-darwin" ];
+ };
+}
diff --git a/nix-overlays/ldc/bootstrap.nix b/nix-overlays/ldc/bootstrap.nix
new file mode 100644
index 0000000..7724cbc
--- /dev/null
+++ b/nix-overlays/ldc/bootstrap.nix
@@ -0,0 +1,11 @@
+{ callPackage }:
+callPackage ./binary.nix {
+ version = "1.25.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 = "sha256-6iKnbS+oalLKmyS8qYD/wS21b7+O+VgsWG2iT4PrWPU=";
+ linux-x86_64 = "sha256-sfg47RdlsIpryc3iZvE17OtLweh3Zw6DeuNJYgpuH+o=";
+ linux-aarch64 = "sha256-UDZ43x4flSo+SfsPeE8juZO2Wtk2ZzwySk0ADHnvJBI=";
+ osx-arm64 = "sha256-O/x0vy0wwQFaDc4uWSeMhx+chJKqbQb6e5QNYf+7DCw=";
+ };
+}
diff --git a/nix-overlays/ldc/default.nix b/nix-overlays/ldc/default.nix
new file mode 100644
index 0000000..5badb07
--- /dev/null
+++ b/nix-overlays/ldc/default.nix
@@ -0,0 +1,4 @@
+import ./generic.nix {
+ version = "1.30.0";
+ sha256 = "sha256-/bs3bwgkLZF5IqaiKnc5gCF/r6MQBG/F1kWUkK8j2s0=";
+}
diff --git a/nix-overlays/ldc/generic.nix b/nix-overlays/ldc/generic.nix
new file mode 100644
index 0000000..979d78c
--- /dev/null
+++ b/nix-overlays/ldc/generic.nix
@@ -0,0 +1,137 @@
+{ version, sha256 }:
+{ lib, stdenv, fetchurl, cmake, ninja, llvm_15, 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;
+
+ src = fetchurl {
+ url = "https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz";
+ inherit sha256;
+ };
+
+ # https://issues.dlang.org/show_bug.cgi?id=19553
+ hardeningDisable = [ "fortify" ];
+
+ postUnpack = ''
+ patchShebangs .
+ ''
+ + ''
+ rm ldc-${version}-src/tests/dmd/fail_compilation/mixin_gc.d
+ rm ldc-${version}-src/tests/dmd/runnable/xtest46_gc.d
+ rm ldc-${version}-src/tests/dmd/runnable/testptrref_gc.d
+
+ # test depends on current year
+ rm ldc-${version}-src/tests/dmd/compilable/ddocYear.d
+ ''
+ + 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/dmd/Makefile --replace "SHELL=/bin/bash" "SHELL=${bash}/bin/bash"
+ ''
+ + lib.optionalString stdenv.hostPlatform.isLinux ''
+ substituteInPlace runtime/phobos/std/socket.d --replace "assert(ih.addrList[0] == 0x7F_00_00_01);" ""
+ ''
+ + lib.optionalString stdenv.hostPlatform.isDarwin ''
+ substituteInPlace runtime/phobos/std/socket.d --replace "foreach (name; names)" "names = []; foreach (name; names)"
+ '';
+
+ nativeBuildInputs = [
+ cmake ldcBootstrap lit lit.python llvm_15.dev makeWrapper ninja unzip
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isDarwin [
+ darwin.apple_sdk.frameworks.Foundation
+ ]
+ ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
+ # 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 = 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 = 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 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" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+ };
+}