nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ stdenv, fetchFromGitHub, fetchFromGitLab
2, llvmPackages
3, cmake, boehmgc, gmp, zlib, ncurses, boost, libelf
4, python, git, sbcl
5, wafHook
6}:
7let
8 sicl = fetchFromGitHub {
9 owner = "Bike";
10 repo = "SICL";
11 rev = "78052fb5f02a3814eb7295f3dcac09f21f98702b";
12 sha256 = "0wnmp40310ls6q9gkr5ysfkj2qirq26ljjicnkqifc53mm0ghz4i";
13 };
14 cst = fetchFromGitHub {
15 owner = "robert-strandh";
16 repo = "Concrete-Syntax-Tree";
17 rev = "8d8c5abf8f1690cb2b765241d81c2eb86d60d77e";
18 sha256 = "1rs8a5nbfffdyli126sccd0z1a8h5axp222b4pgwvgfxsb9w7g3s";
19 };
20 c2mop = fetchFromGitHub {
21 owner = "pcostanza";
22 repo = "closer-mop";
23 rev = "d4d1c7aa6aba9b4ac8b7bb78ff4902a52126633f";
24 sha256 = "1amcv0f3vbsq0aqhai7ki5bi367giway1pbfxyc47r7q3hq5hw3c";
25 };
26 acclimation = fetchFromGitHub {
27 owner = "robert-strandh";
28 repo = "Acclimation";
29 rev = "dd15c86b0866fc5d8b474be0da15c58a3c04c45c";
30 sha256 = "0ql224qs3zgflvdhfbca621v3byhhqfb71kzy70bslyczxv1bsh2";
31 };
32 eclector = fetchFromGitHub {
33 owner = "robert-strandh";
34 repo = "Eclector";
35 rev = "287ce817c0478668bd389051d2cc6b26ddc62ec9";
36 sha256 = "0v7mgkq49ddyx5vvsradcp772y5l7cv9xrll3280hyginpm8w6q3";
37 };
38 alexandria = fetchFromGitHub {
39 owner = "clasp-developers";
40 repo = "alexandria";
41 rev = "e5c54bc30b0887c237bde2827036d17315f88737";
42 sha256 = "14h7a9fwimiw9gqxjm2h47d95bfhrm7b81f6si7x8vy18d78fn4g";
43 };
44 mps = fetchFromGitHub {
45 owner = "Ravenbrook";
46 repo = "mps";
47 rev = "b8a05a3846430bc36c8200f24d248c8293801503";
48 sha256 = "1q2xqdw832jrp0w9yhgr8xihria01j4z132ac16lr9ssqznkprv6";
49 };
50 asdf = fetchFromGitLab {
51 domain = "gitlab.common-lisp.net";
52 owner = "asdf";
53 repo = "asdf";
54 rev = "3.3.1.2";
55 sha256 = "0ljr2vc0cb2wrijcyjmp9hcaj2bdhh05ci3zf4f43hdq6i2fgg6g";
56 };
57in
58stdenv.mkDerivation rec {
59 name = "${pname}-${version}";
60 pname = "clasp";
61 version = "0.8.99.20181128";
62
63 src = fetchFromGitHub {
64 owner = "drmeister";
65 repo = "clasp";
66 rev = "2f2b52ccb750048460562b5987a7eaf7a1aa4445";
67 sha256 = "0ra55vdnk59lygwzlxr5cg16vb9c45fmg59wahaxclwm461w7fwz";
68 fetchSubmodules = true;
69 };
70
71 nativeBuildInputs = [ cmake python git sbcl wafHook ] ++
72 (with llvmPackages; [ llvm clang ]);
73
74 buildInputs = with llvmPackages;
75 (
76 builtins.map (x: stdenv.lib.overrideDerivation x
77 (x: {NIX_CFLAGS_COMPILE= (x.NIX_CFLAGS_COMPILE or "") + " -frtti"; }))
78 [ llvm clang clang-unwrapped clang ]) ++
79 [
80 gmp zlib ncurses
81 boost boehmgc libelf
82 (boost.override {enableStatic = true; enableShared = false;})
83 (stdenv.lib.overrideDerivation boehmgc
84 (x: {configureFlags = (x.configureFlags or []) ++ ["--enable-static"];}))
85 ];
86
87 NIX_CXXSTDLIB_COMPILE = " -frtti ";
88
89 postPatch = ''
90 echo "
91 PREFIX = '$out'
92 " | sed -e 's/^ *//' > wscript.config
93
94 mkdir -p src/lisp/kernel/contrib/sicl
95 mkdir -p src/lisp/kernel/contrib/Concrete-Syntax-Tree
96 mkdir -p src/lisp/kernel/contrib/closer-mop
97 mkdir -p src/lisp/kernel/contrib/Acclimation
98 mkdir -p src/lisp/kernel/contrib/Eclector
99 mkdir -p src/lisp/kernel/contrib/alexandria
100 mkdir -p src/mps
101 mkdir -p src/lisp/modules/asdf
102
103 cp -rfT "${sicl}" src/lisp/kernel/contrib/sicl
104 cp -rfT "${cst}" src/lisp/kernel/contrib/Concrete-Syntax-Tree
105 cp -rfT "${c2mop}" src/lisp/kernel/contrib/closer-mop
106 cp -rfT "${acclimation}" src/lisp/kernel/contrib/Acclimation
107 cp -rfT "${eclector}" src/lisp/kernel/contrib/Eclector
108 cp -rfT "${alexandria}" src/lisp/kernel/contrib/alexandria
109 cp -rfT "${mps}" src/mps
110 cp -rfT "${asdf}" src/lisp/modules/asdf
111
112 chmod -R u+rwX src
113 ( cd src/lisp/modules/asdf; make )
114 '';
115
116 buildTargets = "build_cboehm";
117 installTargets = "install_cboehm";
118
119 CLASP_SRC_DONTTOUCH = "true";
120
121 meta = {
122 inherit version;
123 description = ''A Common Lisp implementation based on LLVM with C++ integration'';
124 license = stdenv.lib.licenses.lgpl21Plus ;
125 maintainers = [stdenv.lib.maintainers.raskin];
126 platforms = stdenv.lib.platforms.linux;
127 # Large, long to build, a private build of clang is needed, a prerelease.
128 hydraPlatforms = [];
129 homepage = "https://github.com/drmeister/clasp";
130 };
131}