about summary refs log tree commit diff
path: root/pkgs/development/compilers/terra
diff options
context:
space:
mode:
authorJ. Neto <jnetod@tuta.io>2021-05-16 03:02:00 -0300
committerSable Seyler <sable@seyleri.us>2021-06-05 18:19:23 -0700
commit6cf3ec0947b7b750c510db779ade0f7a57a832c4 (patch)
treeeb901bc5c5cb6f5d2198b67f851da6cf37af3bfa /pkgs/development/compilers/terra
parente977f0f112ad2c0212526e84791c178db7830187 (diff)
terra: 1.0.0pre1175_ef6a75f -> 1.0.0-beta3
Contains the combined single-commit work by both @jnetod and myself
from NixOS/nixpkgs#122665. Brings the build up to LLVM 10, switches to
`symlinkJoin` for putting Clang where the CMake build expects it, and
updates to a fresh update of Terra that works around a few LLVM bugs.
Diffstat (limited to 'pkgs/development/compilers/terra')
-rw-r--r--pkgs/development/compilers/terra/default.nix61
-rw-r--r--pkgs/development/compilers/terra/disable-luajit-file-download.patch13
-rw-r--r--pkgs/development/compilers/terra/get-compiler-from-envvar-fix-cpu-detection.patch31
-rw-r--r--pkgs/development/compilers/terra/nix-cflags.patch11
4 files changed, 84 insertions, 32 deletions
diff --git a/pkgs/development/compilers/terra/default.nix b/pkgs/development/compilers/terra/default.nix
index bd50ea9caaafd..b44cec95f6cdc 100644
--- a/pkgs/development/compilers/terra/default.nix
+++ b/pkgs/development/compilers/terra/default.nix
@@ -1,61 +1,70 @@
 { lib, stdenv, fetchurl, fetchFromGitHub
-, llvmPackages, ncurses, lua
+, llvmPackages, ncurses, cmake, libxml2, symlinkJoin
 }:
 
 let
-  luajitArchive = "LuaJIT-2.0.5.tar.gz";
+  luajitRev = "9143e86498436892cb4316550be4d45b68a61224";
+  luajitArchive = "LuaJIT-${luajitRev}.tar.gz";
   luajitSrc = fetchurl {
-    url    = "http://luajit.org/download/${luajitArchive}";
-    sha256 = "0yg9q4q6v028bgh85317ykc9whgxgysp76qzaqgq55y6jy11yjw7";
+    url = "https://github.com/LuaJIT/LuaJIT/archive/${luajitRev}.tar.gz";
+    sha256 = "0kasmyk40ic4b9dwd4wixm0qk10l88ardrfimwmq36yc5dhnizmy";
   };
 in
 stdenv.mkDerivation rec {
   pname = "terra";
-  version = "1.0.0pre1175_${builtins.substring 0 7 src.rev}";
+  version = "1.0.0-beta3";
 
   src = fetchFromGitHub {
-    owner  = "zdevito";
+    owner  = "terralang";
     repo   = "terra";
-    rev    = "ef6a75ffee15a30f3c74f4e6943851cfbc0fec3d";
-    sha256 = "0aky17vbv3d9zng34hp17p9zb00dbzwhvzsdjzrrqvk9lmyvix0s";
+    rev    = "release-${version}";
+    sha256 = "15ik32xnwyf3g57jvvaz24f6a18lv3a86341rzjbs30kd5045qzd";
   };
 
-  nativeBuildInputs = [ lua ];
-  buildInputs = with llvmPackages; [ llvm clang-unwrapped ncurses ];
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [
+    (symlinkJoin {
+      name = "llvmClangMerged";
+      paths = with llvmPackages; [ llvm clang-unwrapped ];
+    })
+    ncurses
+    libxml2
+  ];
+
+  cmakeFlags = [
+    "-DHAS_TERRA_VERSION=0"
+    "-DTERRA_VERSION=${src.rev}"
+    "-DTERRA_LUA=luajit"
+  ];
 
   doCheck = true;
   enableParallelBuilding = true;
   hardeningDisable = [ "fortify" ];
   outputs = [ "bin" "dev" "out" "static" ];
 
-  patches = [ ./nix-cflags.patch ];
+  patches = [
+    # Should be removed as https://github.com/terralang/terra/pull/496 get merged and released.
+    ./get-compiler-from-envvar-fix-cpu-detection.patch
+    ./nix-cflags.patch
+    ./disable-luajit-file-download.patch
+  ];
   postPatch = ''
-    substituteInPlace Makefile \
-      --replace '-lcurses' '-lncurses'
-
     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}
   '';
 
-  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; {
diff --git a/pkgs/development/compilers/terra/disable-luajit-file-download.patch b/pkgs/development/compilers/terra/disable-luajit-file-download.patch
new file mode 100644
index 0000000000000..7d7d71b26f45a
--- /dev/null
+++ b/pkgs/development/compilers/terra/disable-luajit-file-download.patch
@@ -0,0 +1,13 @@
+diff --git a/cmake/Modules/GetLuaJIT.cmake b/cmake/Modules/GetLuaJIT.cmake
+index 023b5c2..8564b92 100644
+--- a/cmake/Modules/GetLuaJIT.cmake
++++ b/cmake/Modules/GetLuaJIT.cmake
+@@ -63,8 +63,6 @@ string(CONCAT
+   "${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ 
+-file(DOWNLOAD "${LUAJIT_URL}" "${LUAJIT_TAR}")
+-
+ execute_process(
+   COMMAND "${CMAKE_COMMAND}" -E tar xzf "${LUAJIT_TAR}"
+   WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
diff --git a/pkgs/development/compilers/terra/get-compiler-from-envvar-fix-cpu-detection.patch b/pkgs/development/compilers/terra/get-compiler-from-envvar-fix-cpu-detection.patch
new file mode 100644
index 0000000000000..5f29f9859ae64
--- /dev/null
+++ b/pkgs/development/compilers/terra/get-compiler-from-envvar-fix-cpu-detection.patch
@@ -0,0 +1,31 @@
+diff --git a/src/tcompiler.cpp b/src/tcompiler.cpp
+index 873d25e..61f3517 100644
+--- a/src/tcompiler.cpp
++++ b/src/tcompiler.cpp
+@@ -312,6 +312,10 @@ int terra_inittarget(lua_State *L) {
+     else
+         TT->CPU = llvm::sys::getHostCPUName().str();
+ 
++    if (TT->CPU == "generic") {
++        TT->CPU = "x86-64";
++    }
++
+     if (!lua_isnil(L, 3))
+         TT->Features = lua_tostring(L, 3);
+     else {
+@@ -3198,10 +3202,13 @@ static int terra_disassemble(lua_State *L) {
+ static bool FindLinker(terra_State *T, LLVM_PATH_TYPE *linker, const char *target) {
+ #ifndef _WIN32
+ #if LLVM_VERSION >= 36
+-    *linker = *sys::findProgramByName("gcc");
++    const char *linker_name = getenv("CC");
++    if (!linker_name) linker_name = getenv("CXX");
++    if (!linker_name) linker_name = "gcc";
++    *linker = *sys::findProgramByName(linker_name);
+     return *linker == "";
+ #else
+-    *linker = sys::FindProgramByName("gcc");
++    *linker = sys::FindProgramByName(getenv("CXX"));
+     return *linker == "";
+ #endif
+ #else
diff --git a/pkgs/development/compilers/terra/nix-cflags.patch b/pkgs/development/compilers/terra/nix-cflags.patch
index 339ae23cef65d..90ba7e63f1d0d 100644
--- a/pkgs/development/compilers/terra/nix-cflags.patch
+++ b/pkgs/development/compilers/terra/nix-cflags.patch
@@ -1,12 +1,11 @@
 diff --git a/src/terralib.lua b/src/terralib.lua
-index 351238d..e638c90 100644
+index 532ed18..2c265dc 100644
 --- a/src/terralib.lua
 +++ b/src/terralib.lua
-@@ -3395,6 +3395,17 @@ function terra.includecstring(code,cargs,target)
+@@ -3426,6 +3426,16 @@ function terra.includecstring(code,cargs,target)
      	args:insert("-internal-isystem")
      	args:insert(path)
      end
-+
 +    -- NOTE(aseipp): include relevant Nix header files
 +    args:insert("-isystem")
 +    args:insert("@NIX_LIBC_INCLUDE@")
@@ -17,6 +16,6 @@ index 351238d..e638c90 100644
 +          args:insert(w)
 +        end
 +    end
-     
-     if cargs then
-         args:insertall(cargs)
+     -- Obey the SDKROOT variable on macOS to match Clang behavior.
+     local sdkroot = os.getenv("SDKROOT")
+     if sdkroot then