2016-11-09 15:14:48 +00:00
|
|
|
{ stdenv, fetchgit, fetchurl, python2, makeWrapper, pkgconfig, gcc,
|
2015-11-16 19:53:39 +00:00
|
|
|
pypy, libffi, libedit, libuv, boost, zlib,
|
|
|
|
variant ? "jit", buildWithPypy ? false }:
|
|
|
|
|
|
|
|
let
|
2016-08-17 21:10:40 +01:00
|
|
|
commit-count = "1356";
|
2015-11-16 19:53:39 +00:00
|
|
|
common-flags = "--thread --gcrootfinder=shadowstack --continuation";
|
|
|
|
variants = {
|
|
|
|
jit = { flags = "--opt=jit"; target = "target.py"; };
|
|
|
|
jit-preload = { flags = "--opt=jit"; target = "target_preload.py"; };
|
|
|
|
no-jit = { flags = ""; target = "target.py"; };
|
|
|
|
no-jit-preload = { flags = ""; target = "target_preload.py"; };
|
|
|
|
};
|
|
|
|
pixie-src = fetchgit {
|
|
|
|
url = "https://github.com/pixie-lang/pixie.git";
|
2016-08-17 21:10:40 +01:00
|
|
|
rev = "d2a4267ea088f711af36a74928e8dfd8360584ad";
|
|
|
|
sha256 = "1asf6yx7zy9cx4bsg8iai57dy3r3m45xcmkmw2vix70xvfy23ryf";
|
2015-11-16 19:53:39 +00:00
|
|
|
};
|
2016-08-17 21:10:40 +01:00
|
|
|
pypy-tag = "91db1a9";
|
2015-11-16 19:53:39 +00:00
|
|
|
pypy-src = fetchurl {
|
|
|
|
name = "pypy-src-${pypy-tag}";
|
|
|
|
url = "https://bitbucket.org/pypy/pypy/get/${pypy-tag}.tar.bz2";
|
2016-08-17 21:10:40 +01:00
|
|
|
sha256 = "0ylbqvhbcp5m09l15i2q2h3a0vjd055x2r37cq71lkhgmmaxrwbq";
|
2015-11-16 19:53:39 +00:00
|
|
|
};
|
2016-04-27 22:41:28 +01:00
|
|
|
libs = [ libffi libedit libuv boost.dev boost.out zlib ];
|
2015-11-16 19:53:39 +00:00
|
|
|
include-path = stdenv.lib.concatStringsSep ":"
|
|
|
|
(map (p: "${p}/include") libs);
|
|
|
|
library-path = stdenv.lib.concatStringsSep ":"
|
|
|
|
(map (p: "${p}/lib") libs);
|
|
|
|
bin-path = stdenv.lib.concatStringsSep ":"
|
|
|
|
(map (p: "${p}/bin") [ gcc ]);
|
|
|
|
build = {flags, target}: stdenv.mkDerivation rec {
|
|
|
|
name = "pixie-${version}";
|
|
|
|
version = "0-r${commit-count}-${variant}";
|
2017-09-05 23:03:42 +01:00
|
|
|
nativeBuildInputs = [ makeWrapper pkgconfig ];
|
|
|
|
buildInputs = libs;
|
2015-11-16 19:53:39 +00:00
|
|
|
PYTHON = if buildWithPypy
|
|
|
|
then "${pypy}/pypy-c/.pypy-c-wrapped"
|
2016-11-09 15:14:48 +00:00
|
|
|
else "${python2.interpreter}";
|
2015-11-16 19:53:39 +00:00
|
|
|
unpackPhase = ''
|
|
|
|
cp -R ${pixie-src} pixie-src
|
|
|
|
mkdir pypy-src
|
|
|
|
(cd pypy-src
|
|
|
|
tar --strip-components=1 -xjf ${pypy-src})
|
|
|
|
chmod -R +w pypy-src pixie-src
|
|
|
|
'';
|
|
|
|
patchPhase = ''
|
|
|
|
(cd pixie-src
|
|
|
|
patch -p1 < ${./load_paths.patch}
|
2016-04-16 18:50:01 +01:00
|
|
|
libraryPaths='["${libuv}" "${libedit}" "${libffi.dev}" "${boost.dev}" "${boost.out}" "${zlib.dev}"]'
|
2015-11-16 19:53:39 +00:00
|
|
|
export libraryPaths
|
|
|
|
substituteAllInPlace ./pixie/ffi-infer.pxi)
|
|
|
|
'';
|
|
|
|
buildPhase = ''(
|
|
|
|
PYTHONPATH="`pwd`/pypy-src:$PYTHONPATH";
|
|
|
|
RPYTHON="`pwd`/pypy-src/rpython/bin/rpython";
|
|
|
|
cd pixie-src
|
|
|
|
$PYTHON $RPYTHON ${common-flags} ${target}
|
|
|
|
export LD_LIBRARY_PATH="${library-path}:$LD_LIBRARY_PATH"
|
|
|
|
find pixie -name "*.pxi" -exec ./pixie-vm -c {} \;
|
|
|
|
)'';
|
|
|
|
installPhase = ''
|
|
|
|
mkdir -p $out/share $out/bin
|
|
|
|
cp pixie-src/pixie-vm $out/share/pixie-vm
|
|
|
|
cp -R pixie-src/pixie $out/share/pixie
|
2016-08-19 01:31:18 +01:00
|
|
|
makeWrapper $out/share/pixie-vm $out/bin/pixie-vm \
|
2015-11-16 19:53:39 +00:00
|
|
|
--prefix LD_LIBRARY_PATH : ${library-path} \
|
|
|
|
--prefix C_INCLUDE_PATH : ${include-path} \
|
|
|
|
--prefix LIBRARY_PATH : ${library-path} \
|
|
|
|
--prefix PATH : ${bin-path}
|
2016-08-19 01:31:18 +01:00
|
|
|
cat > $out/bin/pxi <<EOF
|
|
|
|
#!$shell
|
|
|
|
>&2 echo "[\$\$] WARNING: 'pxi' is a deprecated alias for 'pixie-vm', please update your scripts."
|
|
|
|
exec $out/bin/pixie-vm "\$@"
|
|
|
|
EOF
|
|
|
|
chmod +x $out/bin/pxi
|
2015-11-16 19:53:39 +00:00
|
|
|
'';
|
|
|
|
meta = {
|
2016-03-06 13:04:37 +00:00
|
|
|
description = "A clojure-like lisp, built with the pypy vm toolkit";
|
2017-08-01 21:03:30 +01:00
|
|
|
homepage = https://github.com/pixie-lang/pixie;
|
2015-11-16 19:53:39 +00:00
|
|
|
license = stdenv.lib.licenses.lgpl3;
|
2017-06-11 02:45:44 +01:00
|
|
|
platforms = ["x86_64-linux" "i686-linux"];
|
2015-11-16 19:53:39 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
in build (builtins.getAttr variant variants)
|