about summary refs log tree commit diff
path: root/pkgs/development/compilers/ante/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/ante/default.nix')
-rw-r--r--pkgs/development/compilers/ante/default.nix53
1 files changed, 53 insertions, 0 deletions
diff --git a/pkgs/development/compilers/ante/default.nix b/pkgs/development/compilers/ante/default.nix
new file mode 100644
index 0000000000000..7730c594204df
--- /dev/null
+++ b/pkgs/development/compilers/ante/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub
+, lib
+, libffi
+, libxml2
+, llvmPackages_13
+, ncurses
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "ante";
+  version = "unstable-2022-08-22";
+  src = fetchFromGitHub {
+    owner = "jfecher";
+    repo = "ante";
+    rev = "8b708d549c213c34e4ca62d31cf0dd25bfa7b548";
+    sha256 = "sha256-s8nDuG32lI4pBLsOzgfyUGpc7/r0j4EhzH54ErBK7A0=";
+  };
+  cargoSha256 = "sha256-29D7kPG7vop9lIxWQnaHkCTRY8YsCjERRCOvbU7oemQ=";
+
+  /*
+     https://crates.io/crates/llvm-sys#llvm-compatibility
+     llvm-sys requires a specific version of llvmPackages,
+     that is not the same as the one included by default with rustPlatform.
+  */
+  nativeBuildInputs = [ llvmPackages_13.llvm ];
+  buildInputs = [ libffi libxml2 ncurses ];
+
+  postPatch = ''
+    substituteInPlace tests/golden_tests.rs --replace \
+      'target/debug' "target/$(rustc -vV | sed -n 's|host: ||p')/release"
+  '';
+  preBuild =
+    let
+      major = lib.versions.major llvmPackages_13.llvm.version;
+      minor = lib.versions.minor llvmPackages_13.llvm.version;
+      llvm-sys-ver = "${major}${builtins.substring 0 1 minor}";
+    in
+    ''
+      # On some architectures llvm-sys is not using the package listed inside nativeBuildInputs
+      export LLVM_SYS_${llvm-sys-ver}_PREFIX=${llvmPackages_13.llvm.dev}
+      export ANTE_STDLIB_DIR=$out/lib
+      mkdir -p $ANTE_STDLIB_DIR
+      cp -r $src/stdlib/* $ANTE_STDLIB_DIR
+    '';
+
+  meta = with lib; {
+    homepage = "https://antelang.org/";
+    description = "A low-level functional language for exploring refinement types, lifetime inference, and algebraic effects";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ehllie ];
+  };
+}