diff options
author | J. Neto <jnetod@tuta.io> | 2021-05-16 03:02:00 -0300 |
---|---|---|
committer | Sable Seyler <sable@seyleri.us> | 2021-06-05 18:19:23 -0700 |
commit | 6cf3ec0947b7b750c510db779ade0f7a57a832c4 (patch) | |
tree | eb901bc5c5cb6f5d2198b67f851da6cf37af3bfa /pkgs/development/compilers/terra | |
parent | e977f0f112ad2c0212526e84791c178db7830187 (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')
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 |