diff options
author | Herwig Hochleitner <herwig@bendlas.net> | 2015-11-16 20:53:39 +0100 |
---|---|---|
committer | Herwig Hochleitner <herwig@bendlas.net> | 2016-02-28 03:15:07 +0100 |
commit | 1c380842d10c7e0a5f385be3d095cddee8ab9da9 (patch) | |
tree | eaa65ef190db3ce56e36d0f4caa3337de583885f /pkgs | |
parent | 40c586b7ce2c559374df435f46d673baf711c543 (diff) | |
download | nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar.gz nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar.bz2 nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar.lz nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar.xz nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.tar.zst nixlib-1c380842d10c7e0a5f385be3d095cddee8ab9da9.zip |
pixie: init at 0-1333
This is the pixie language, a clojure-like lisp, utilizing the pypy vm toolkit for JIT, GC and C bindings.
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/development/interpreters/pixie/default.nix | 79 | ||||
-rw-r--r-- | pkgs/development/interpreters/pixie/load_paths.patch | 25 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 2 |
3 files changed, 106 insertions, 0 deletions
diff --git a/pkgs/development/interpreters/pixie/default.nix b/pkgs/development/interpreters/pixie/default.nix new file mode 100644 index 000000000000..85af751809c6 --- /dev/null +++ b/pkgs/development/interpreters/pixie/default.nix @@ -0,0 +1,79 @@ +{ stdenv, fetchgit, fetchurl, python, makeWrapper, pkgconfig, gcc, + pypy, libffi, libedit, libuv, boost, zlib, + variant ? "jit", buildWithPypy ? false }: + +let + commit-count = "1333"; + 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"; + rev = "36ce07e1cd85ca82eedadf366bef3bb57a627a2a"; + sha256 = "1b3v99c0is33w029r15qvd0mkrc5n1mrvjjmfpcd9yvhvqb2vcjs"; + }; + pypy-tag = "81254"; + pypy-src = fetchurl { + name = "pypy-src-${pypy-tag}"; + url = "https://bitbucket.org/pypy/pypy/get/${pypy-tag}.tar.bz2"; + sha256 = "1cs9xqs1rmzdcnwxxkbvy064s5cbp6vvzhn2jmyzh5kg4di1r3bn"; + }; + libs = [ libffi libedit libuv boost.dev boost.lib zlib ]; + 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}"; + nativeBuildInputs = libs; + buildInputs = [ pkgconfig makeWrapper ]; + PYTHON = if buildWithPypy + then "${pypy}/pypy-c/.pypy-c-wrapped" + else "${python}/bin/python"; + 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} + libraryPaths='["${libuv}" "${libedit}" "${libffi}" "${boost.dev}" "${boost.lib}" "${zlib}"]' + 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 + makeWrapper $out/share/pixie-vm $out/bin/pxi \ + --prefix LD_LIBRARY_PATH : ${library-path} \ + --prefix C_INCLUDE_PATH : ${include-path} \ + --prefix LIBRARY_PATH : ${library-path} \ + --prefix PATH : ${bin-path} + ''; + meta = { + description = "Pixie is a clojure-like lisp, built with the pypy vm toolkit."; + homepage = "https://github.com/pixie-lang/pixie"; + license = stdenv.lib.licenses.lgpl3; + platforms = stdenv.lib.platforms.linux; + }; + }; +in build (builtins.getAttr variant variants) diff --git a/pkgs/development/interpreters/pixie/load_paths.patch b/pkgs/development/interpreters/pixie/load_paths.patch new file mode 100644 index 000000000000..a36d280c5867 --- /dev/null +++ b/pkgs/development/interpreters/pixie/load_paths.patch @@ -0,0 +1,25 @@ +diff --git a/pixie/ffi-infer.pxi b/pixie/ffi-infer.pxi +index 9f13ac7..74301c2 100644 +--- a/pixie/ffi-infer.pxi ++++ b/pixie/ffi-infer.pxi +@@ -1,15 +1,12 @@ + (ns pixie.ffi-infer + (:require [pixie.io-blocking :as io])) + ++(defn -add-library-path [p] ++ (swap! load-paths conj (str p "/include")) ++ (swap! load-paths conj (str p "/lib"))) + +-(defn -add-rel-path [rel] +- (swap! load-paths conj (str (first @load-paths) "/" rel))) +- +-(-add-rel-path "lib") +-(-add-rel-path "include") +-(-add-rel-path "../lib") +-(-add-rel-path "../include") +- ++(doseq [lp @libraryPaths@] ++ (-add-library-path lp)) + + (def *config* nil) + (set-dynamic! (var *config*)) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0f756a175ac9..74bba53647cd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5507,6 +5507,8 @@ let wrapPython = pythonPackages.wrapPython; }; + pixie = callPackage ../development/interpreters/pixie { }; + bundix = callPackage ../development/interpreters/ruby/bundix { ruby = ruby_2_1_3; }; |