Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at netboot-syslinux-multiplatform 144 lines 5.1 kB view raw
1{ lib 2, stdenv 3, fetchFromGitHub 4, buildPackages 5, version 6, src 7, extraMeta ? { } 8, callPackage 9, self 10, packageOverrides ? (final: prev: {}) 11, pkgsBuildBuild 12, pkgsBuildHost 13, pkgsBuildTarget 14, pkgsHostHost 15, pkgsTargetTarget 16, passthruFun 17, enableFFI ? true 18, enableJIT ? true 19, enableJITDebugModule ? enableJIT 20, enableGC64 ? true 21, enable52Compat ? false 22, enableValgrindSupport ? false 23, valgrind ? null 24, enableGDBJITSupport ? false 25, enableAPICheck ? false 26, enableVMAssertions ? false 27, useSystemMalloc ? false 28# Upstream generates randomized string id's by default for security reasons 29# https://github.com/LuaJIT/LuaJIT/issues/626. Deterministic string id's should 30# never be needed for correctness (that should be fixed in the lua code), 31# but may be helpful when you want to embed jit-compiled raw lua blobs in 32# binaries that you want to be reproducible. 33, deterministicStringIds ? false 34, luaAttr ? "luajit_${lib.versions.major version}_${lib.versions.minor version}" 35} @ inputs: 36assert enableJITDebugModule -> enableJIT; 37assert enableGDBJITSupport -> enableJIT; 38assert enableValgrindSupport -> valgrind != null; 39let 40 41 luaPackages = self.pkgs; 42 43 XCFLAGS = with lib; 44 optional (!enableFFI) "-DLUAJIT_DISABLE_FFI" 45 ++ optional (!enableJIT) "-DLUAJIT_DISABLE_JIT" 46 ++ optional enable52Compat "-DLUAJIT_ENABLE_LUA52COMPAT" 47 ++ optional (!enableGC64) "-DLUAJIT_DISABLE_GC64" 48 ++ optional useSystemMalloc "-DLUAJIT_USE_SYSMALLOC" 49 ++ optional enableValgrindSupport "-DLUAJIT_USE_VALGRIND" 50 ++ optional enableGDBJITSupport "-DLUAJIT_USE_GDBJIT" 51 ++ optional enableAPICheck "-DLUAJIT_USE_APICHECK" 52 ++ optional enableVMAssertions "-DLUAJIT_USE_ASSERT" 53 ++ optional deterministicStringIds "-DLUAJIT_SECURITY_STRID=0" 54 ; 55 56 # LuaJIT requires build for 32bit architectures to be build on x86 not x86_64 57 # TODO support also other build architectures. The ideal way would be to use 58 # stdenv_32bit but that doesn't work due to host platform mismatch: 59 # https://github.com/NixOS/nixpkgs/issues/212494 60 buildStdenv = if buildPackages.stdenv.isx86_64 && stdenv.is32bit 61 then buildPackages.pkgsi686Linux.buildPackages.stdenv 62 else buildPackages.stdenv; 63 64in 65stdenv.mkDerivation rec { 66 pname = "luajit"; 67 inherit version src; 68 69 luaversion = "5.1"; 70 71 postPatch = '' 72 substituteInPlace Makefile --replace ldconfig : 73 if test -n "''${dontStrip-}"; then 74 # CCDEBUG must be non-empty or everything will be stripped, -g being 75 # passed by nixpkgs CC wrapper is insufficient on its own 76 substituteInPlace src/Makefile --replace "#CCDEBUG= -g" "CCDEBUG= -g" 77 fi 78 79 { 80 echo -e ' 81 #undef LUA_PATH_DEFAULT 82 #define LUA_PATH_DEFAULT "./share/lua/${luaversion}/?.lua;./?.lua;./?/init.lua" 83 #undef LUA_CPATH_DEFAULT 84 #define LUA_CPATH_DEFAULT "./lib/lua/${luaversion}/?.so;./?.so;./lib/lua/${luaversion}/loadall.so" 85 ' 86 } >> src/luaconf.h 87 ''; 88 89 dontConfigure = true; 90 91 buildInputs = lib.optional enableValgrindSupport valgrind; 92 93 buildFlags = [ 94 "amalg" # Build highly optimized version 95 ]; 96 makeFlags = [ 97 "PREFIX=$(out)" 98 "DEFAULT_CC=cc" 99 "CROSS=${stdenv.cc.targetPrefix}" 100 "HOST_CC=${buildStdenv.cc}/bin/cc" 101 ] ++ lib.optional enableJITDebugModule "INSTALL_LJLIBD=$(INSTALL_LMOD)"; 102 enableParallelBuilding = true; 103 env.NIX_CFLAGS_COMPILE = toString XCFLAGS; 104 105 postInstall = '' 106 ( cd "$out/include"; ln -s luajit-*/* . ) 107 ln -s "$out"/bin/luajit-* "$out"/bin/lua 108 if [[ ! -e "$out"/bin/luajit ]]; then 109 ln -s "$out"/bin/luajit* "$out"/bin/luajit 110 fi 111 ''; 112 113 LuaPathSearchPaths = luaPackages.luaLib.luaPathList; 114 LuaCPathSearchPaths = luaPackages.luaLib.luaCPathList; 115 116 setupHook = luaPackages.lua-setup-hook luaPackages.luaLib.luaPathList luaPackages.luaLib.luaCPathList; 117 118 # copied from python 119 passthru = let 120 # When we override the interpreter we also need to override the spliced versions of the interpreter 121 inputs' = lib.filterAttrs (n: v: ! lib.isDerivation v && n != "passthruFun") inputs; 122 override = attr: let lua = attr.override (inputs' // { self = lua; }); in lua; 123 in passthruFun rec { 124 inherit self luaversion packageOverrides luaAttr; 125 executable = "lua"; 126 luaOnBuildForBuild = override pkgsBuildBuild.${luaAttr}; 127 luaOnBuildForHost = override pkgsBuildHost.${luaAttr}; 128 luaOnBuildForTarget = override pkgsBuildTarget.${luaAttr}; 129 luaOnHostForHost = override pkgsHostHost.${luaAttr}; 130 luaOnTargetForTarget = if lib.hasAttr luaAttr pkgsTargetTarget then (override pkgsTargetTarget.${luaAttr}) else {}; 131 }; 132 133 meta = with lib; { 134 description = "High-performance JIT compiler for Lua 5.1"; 135 homepage = "https://luajit.org/"; 136 license = licenses.mit; 137 platforms = platforms.linux ++ platforms.darwin; 138 badPlatforms = [ 139 "riscv64-linux" "riscv64-linux" # See https://github.com/LuaJIT/LuaJIT/issues/628 140 "powerpc64le-linux" # `#error "No support for PPC64"` 141 ]; 142 maintainers = with maintainers; [ thoughtpolice smironov vcunat lblasc ]; 143 } // extraMeta; 144}