about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/terra/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/terra/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/terra/default.nix92
1 files changed, 57 insertions, 35 deletions
diff --git a/nixpkgs/pkgs/development/compilers/terra/default.nix b/nixpkgs/pkgs/development/compilers/terra/default.nix
index bd50ea9caaaf..ac1851a683bf 100644
--- a/nixpkgs/pkgs/development/compilers/terra/default.nix
+++ b/nixpkgs/pkgs/development/compilers/terra/default.nix
@@ -1,27 +1,53 @@
-{ lib, stdenv, fetchurl, fetchFromGitHub
-, llvmPackages, ncurses, lua
-}:
+{ lib, stdenv, fetchFromGitHub, llvmPackages, ncurses, cmake, libxml2
+, symlinkJoin, breakpointHook, cudaPackages, enableCUDA ? false }:
 
 let
-  luajitArchive = "LuaJIT-2.0.5.tar.gz";
-  luajitSrc = fetchurl {
-    url    = "http://luajit.org/download/${luajitArchive}";
-    sha256 = "0yg9q4q6v028bgh85317ykc9whgxgysp76qzaqgq55y6jy11yjw7";
+  luajitRev = "9143e86498436892cb4316550be4d45b68a61224";
+  luajitBase = "LuaJIT-${luajitRev}";
+  luajitArchive = "${luajitBase}.tar.gz";
+  luajitSrc = fetchFromGitHub {
+    owner = "LuaJIT";
+    repo = "LuaJIT";
+    rev = luajitRev;
+    sha256 = "1zw1yr0375d6jr5x20zvkvk76hkaqamjynbswpl604w6r6id070b";
   };
-in
-stdenv.mkDerivation rec {
+
+  llvmMerged = symlinkJoin {
+    name = "llvmClangMerged";
+    paths = with llvmPackages; [
+      llvm.out
+      llvm.dev
+      llvm.lib
+      clang-unwrapped.out
+      clang-unwrapped.dev
+      clang-unwrapped.lib
+    ];
+  };
+
+  cuda = cudaPackages.cudatoolkit_11;
+
+  clangVersion = llvmPackages.clang-unwrapped.version;
+
+in stdenv.mkDerivation rec {
   pname = "terra";
-  version = "1.0.0pre1175_${builtins.substring 0 7 src.rev}";
+  version = "1.0.0-beta3_${builtins.substring 0 7 src.rev}";
 
   src = fetchFromGitHub {
-    owner  = "zdevito";
-    repo   = "terra";
-    rev    = "ef6a75ffee15a30f3c74f4e6943851cfbc0fec3d";
-    sha256 = "0aky17vbv3d9zng34hp17p9zb00dbzwhvzsdjzrrqvk9lmyvix0s";
+    owner = "terralang";
+    repo = "terra";
+    rev = "99ff93f8c60c89bbe2dc7c63eab9bfe2f4c4833e";
+    sha256 = "0ww54xjvv6p8jwsh6hml3v527zgnv2gj58gpb818bbg4k1jwa5fl";
   };
 
-  nativeBuildInputs = [ lua ];
-  buildInputs = with llvmPackages; [ llvm clang-unwrapped ncurses ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ llvmMerged ncurses libxml2 ] ++ lib.optional enableCUDA cuda;
+
+  cmakeFlags = [
+    "-DHAS_TERRA_VERSION=0"
+    "-DTERRA_VERSION=${version}"
+    "-DTERRA_LUA=luajit"
+    "-DCLANG_RESOURCE_DIR=${llvmMerged}/lib/clang/${clangVersion}"
+  ] ++ lib.optional enableCUDA "-DTERRA_ENABLE_CUDA=ON";
 
   doCheck = true;
   enableParallelBuilding = true;
@@ -29,40 +55,36 @@ stdenv.mkDerivation rec {
   outputs = [ "bin" "dev" "out" "static" ];
 
   patches = [ ./nix-cflags.patch ];
+
   postPatch = ''
-    substituteInPlace Makefile \
-      --replace '-lcurses' '-lncurses'
+    sed -i '/file(DOWNLOAD "''${LUAJIT_URL}" "''${LUAJIT_TAR}")/d' \
+      cmake/Modules/GetLuaJIT.cmake
 
     substituteInPlace src/terralib.lua \
       --subst-var-by NIX_LIBC_INCLUDE ${lib.getDev stdenv.cc.libc}/include
   '';
 
-  preBuild = ''
-    cat >Makefile.inc<<EOF
-    CLANG = ${lib.getBin llvmPackages.clang-unwrapped}/bin/clang
-    LLVM_CONFIG = ${lib.getBin llvmPackages.llvm}/bin/llvm-config
-    EOF
-
+  preConfigure = ''
     mkdir -p build
-    cp ${luajitSrc} build/${luajitArchive}
+    ln -s ${luajitSrc} build/${luajitBase}
+    tar --mode="a+rwX" -chzf build/${luajitArchive} -C build ${luajitBase}
+    rm build/${luajitBase}
   '';
 
-  checkPhase = "(cd tests && ../terra run)";
-
   installPhase = ''
-    install -Dm755 -t $bin/bin release/bin/terra
-    install -Dm755 -t $out/lib release/lib/terra${stdenv.hostPlatform.extensions.sharedLibrary}
-    install -Dm644 -t $static/lib release/lib/libterra.a
+    install -Dm755 -t $bin/bin bin/terra
+    install -Dm755 -t $out/lib lib/terra${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm644 -t $static/lib lib/libterra_s.a
 
     mkdir -pv $dev/include
-    cp -rv release/include/terra $dev/include
+    cp -rv include/terra $dev/include
   '';
 
   meta = with lib; {
     description = "A low-level counterpart to Lua";
-    homepage    = "http://terralang.org/";
-    platforms   = platforms.x86_64;
-    maintainers = with maintainers; [ jb55 thoughtpolice ];
-    license     = licenses.mit;
+    homepage = "http://terralang.org/";
+    platforms = platforms.x86_64;
+    maintainers = with maintainers; [ jb55 seylerius thoughtpolice ];
+    license = licenses.mit;
   };
 }