about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/clasp/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/clasp/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/clasp/default.nix200
1 files changed, 86 insertions, 114 deletions
diff --git a/nixpkgs/pkgs/development/compilers/clasp/default.nix b/nixpkgs/pkgs/development/compilers/clasp/default.nix
index 0113a9aebc08..bd43970e55b8 100644
--- a/nixpkgs/pkgs/development/compilers/clasp/default.nix
+++ b/nixpkgs/pkgs/development/compilers/clasp/default.nix
@@ -1,129 +1,101 @@
-{ lib, stdenv, fetchFromGitHub, fetchFromGitLab
-, llvmPackages
-, cmake, boehmgc, gmp, zlib, ncurses, boost, libelf
-, python3, git, sbcl
-, wafHook
-}:
+{ pkgs, lib, fetchFromGitHub, llvmPackages_15 }:
+
+
 let
-  sicl = fetchFromGitHub {
-    owner = "Bike";
-    repo = "SICL";
-    rev = "78052fb5f02a3814eb7295f3dcac09f21f98702b";
-    sha256 = "0wnmp40310ls6q9gkr5ysfkj2qirq26ljjicnkqifc53mm0ghz4i";
-  };
-  cst = fetchFromGitHub {
-    owner = "robert-strandh";
-    repo = "Concrete-Syntax-Tree";
-    rev = "8d8c5abf8f1690cb2b765241d81c2eb86d60d77e";
-    sha256 = "1rs8a5nbfffdyli126sccd0z1a8h5axp222b4pgwvgfxsb9w7g3s";
-  };
-  c2mop = fetchFromGitHub {
-    owner = "pcostanza";
-    repo = "closer-mop";
-    rev = "d4d1c7aa6aba9b4ac8b7bb78ff4902a52126633f";
-    sha256 = "1amcv0f3vbsq0aqhai7ki5bi367giway1pbfxyc47r7q3hq5hw3c";
-  };
-  acclimation = fetchFromGitHub {
-    owner = "robert-strandh";
-    repo = "Acclimation";
-    rev = "dd15c86b0866fc5d8b474be0da15c58a3c04c45c";
-    sha256 = "0ql224qs3zgflvdhfbca621v3byhhqfb71kzy70bslyczxv1bsh2";
-  };
-  eclector = fetchFromGitHub {
-    owner = "robert-strandh";
-    repo = "Eclector";
-    rev = "287ce817c0478668bd389051d2cc6b26ddc62ec9";
-    sha256 = "0v7mgkq49ddyx5vvsradcp772y5l7cv9xrll3280hyginpm8w6q3";
-  };
-  alexandria = fetchFromGitHub {
-    owner = "clasp-developers";
-    repo = "alexandria";
-    rev = "e5c54bc30b0887c237bde2827036d17315f88737";
-    sha256 = "14h7a9fwimiw9gqxjm2h47d95bfhrm7b81f6si7x8vy18d78fn4g";
-  };
-  mps = fetchFromGitHub {
-    owner = "Ravenbrook";
-    repo = "mps";
-    rev = "b8a05a3846430bc36c8200f24d248c8293801503";
-    sha256 = "1q2xqdw832jrp0w9yhgr8xihria01j4z132ac16lr9ssqznkprv6";
-  };
-  asdf = fetchFromGitLab {
-    domain = "gitlab.common-lisp.net";
-    owner = "asdf";
-    repo = "asdf";
-    rev = "3.3.1.2";
-    sha256 = "0ljr2vc0cb2wrijcyjmp9hcaj2bdhh05ci3zf4f43hdq6i2fgg6g";
-  };
-in
-stdenv.mkDerivation rec {
-  pname = "clasp";
-  version = "0.8.99.20181128";
 
   src = fetchFromGitHub {
-    owner = "drmeister";
+    owner = "clasp-developers";
     repo = "clasp";
-    rev = "2f2b52ccb750048460562b5987a7eaf7a1aa4445";
-    sha256 = "0ra55vdnk59lygwzlxr5cg16vb9c45fmg59wahaxclwm461w7fwz";
-    fetchSubmodules = true;
+    rev = "2.2.0";
+    hash = "sha256-gvUqUb0dftW1miiBcAPJur0wOunox4y2SUYeeJpR9R4=";
   };
 
-  nativeBuildInputs = [ cmake python3 git sbcl wafHook ] ++
-    (with llvmPackages; [ llvm clang ]);
-
-  buildInputs = with llvmPackages;
-  (
-   builtins.map (x: lib.overrideDerivation x
-           (x: {NIX_CFLAGS_COMPILE= (x.NIX_CFLAGS_COMPILE or "") + " -frtti"; }))
-   [ llvm clang clang-unwrapped clang ]) ++
-  [
-    gmp zlib ncurses
-    boost boehmgc libelf
-    (boost.override {enableStatic = true; enableShared = false;})
-    (lib.overrideDerivation boehmgc
-      (x: {configureFlags = (x.configureFlags or []) ++ ["--enable-static"];}))
+  reposDirs = [
+    "dependencies"
+    "src/lisp/kernel/contrib"
+    "src/lisp/modules/asdf"
+    "src/mps"
+    "src/bdwgc"
+    "src/libatomic_ops"
   ];
 
-  NIX_CXXSTDLIB_COMPILE = " -frtti ";
-
-  postPatch = ''
-    echo "
-      PREFIX = '$out'
-    " | sed -e 's/^ *//' > wscript.config
-
-    mkdir -p src/lisp/kernel/contrib/sicl
-    mkdir -p src/lisp/kernel/contrib/Concrete-Syntax-Tree
-    mkdir -p src/lisp/kernel/contrib/closer-mop
-    mkdir -p src/lisp/kernel/contrib/Acclimation
-    mkdir -p src/lisp/kernel/contrib/Eclector
-    mkdir -p src/lisp/kernel/contrib/alexandria
-    mkdir -p src/mps
-    mkdir -p src/lisp/modules/asdf
-
-    cp -rfT "${sicl}" src/lisp/kernel/contrib/sicl
-    cp -rfT "${cst}" src/lisp/kernel/contrib/Concrete-Syntax-Tree
-    cp -rfT "${c2mop}" src/lisp/kernel/contrib/closer-mop
-    cp -rfT "${acclimation}" src/lisp/kernel/contrib/Acclimation
-    cp -rfT "${eclector}" src/lisp/kernel/contrib/Eclector
-    cp -rfT "${alexandria}" src/lisp/kernel/contrib/alexandria
-    cp -rfT "${mps}" src/mps
-    cp -rfT "${asdf}" src/lisp/modules/asdf
-
-    chmod -R u+rwX src
-    ( cd src/lisp/modules/asdf; make )
-  '';
-
-  buildTargets = "build_cboehm";
-  installTargets = "install_cboehm";
+  reposTarball = llvmPackages_15.stdenv.mkDerivation {
+    pname = "clasp-repos";
+    version = "tarball";
+    inherit src;
+    patches = [ ./clasp-pin-repos-commits.patch ];
+    nativeBuildInputs = with pkgs; [
+      sbcl
+      git
+      cacert
+    ];
+    buildPhase = ''
+      export SOURCE_DATE_EPOCH=1
+      export ASDF_OUTPUT_TRANSLATIONS=$(pwd):$(pwd)/__fasls
+      sbcl --script koga --help
+      for x in {${lib.concatStringsSep "," reposDirs}}; do
+        find $x -type d -name .git -exec rm -rvf {} \; || true
+      done
+    '';
+    installPhase = ''
+      tar --owner=0 --group=0 --numeric-owner --format=gnu \
+        --sort=name --mtime="@$SOURCE_DATE_EPOCH" \
+        -czf $out ${lib.concatStringsSep " " reposDirs}
+    '';
+    outputHashMode = "flat";
+    outputHashAlgo = "sha256";
+    outputHash = "sha256-vgwThjn2h3nKnShtKoHgaPdH/FDHv28fLMQvKFEwG6o=";
+  };
 
-  CLASP_SRC_DONTTOUCH = "true";
+in llvmPackages_15.stdenv.mkDerivation {
+  pname = "clasp";
+  version = "2.2.0";
+  inherit src;
+  nativeBuildInputs = (with pkgs; [
+    sbcl
+    git
+    pkg-config
+    fmt
+    gmpxx
+    libelf
+    boost
+    libunwind
+    ninja
+  ]) ++ (with llvmPackages_15; [
+    llvm
+    libclang
+  ]);
+  configurePhase = ''
+  export SOURCE_DATE_EPOCH=1
+  export ASDF_OUTPUT_TRANSLATIONS=$(pwd):$(pwd)/__fasls
+  tar xf ${reposTarball}
+  sbcl --script koga \
+    --skip-sync \
+    --cc=$NIX_CC/bin/cc \
+    --cxx=$NIX_CC/bin/c++ \
+    --reproducible-build \
+    --package-path=/ \
+    --bin-path=$out/bin \
+    --lib-path=$out/lib \
+    --share-path=$out/share
+'';
+  buildPhase = ''
+  ninja -C build
+'';
+  installPhase = ''
+  ninja -C build install
+'';
 
   meta = {
     description = "A Common Lisp implementation based on LLVM with C++ integration";
     license = lib.licenses.lgpl21Plus ;
-    maintainers = [lib.maintainers.raskin];
-    platforms = lib.platforms.linux;
-    # Large, long to build, a private build of clang is needed, a prerelease.
-    hydraPlatforms = [];
-    homepage = "https://github.com/drmeister/clasp";
+    maintainers = lib.teams.lisp.members;
+    platforms = ["x86_64-linux" "x86_64-darwin"];
+    # Upstream claims support, but breaks with:
+    # error: use of undeclared identifier 'aligned_alloc'
+    broken = llvmPackages_15.stdenv.isDarwin;
+    homepage = "https://github.com/clasp-developers/clasp";
   };
+
 }
+