This commit is contained in:
Robin Appelman 2023-07-09 17:13:58 +02:00
commit f1707cebd8
9 changed files with 314 additions and 174 deletions

View file

@ -12,14 +12,15 @@
inherit (nixpkgs.lib.lists) concatMap; inherit (nixpkgs.lib.lists) concatMap;
inherit (builtins) map; inherit (builtins) map;
systems = with utils.lib.system; [x86_64-linux i686-linux]; systems = with utils.lib.system; [x86_64-linux i686-linux];
in utils.lib.eachSystem systems (system: let in
utils.lib.eachSystem systems (system: let
inherit (builtins) mapAttrs attrNames elem; inherit (builtins) mapAttrs attrNames elem;
inherit (pkgs) lib; inherit (pkgs) lib;
inherit (lib.attrsets) filterAttrs; inherit (lib.attrsets) filterAttrs;
overlays = [(import ./pkgs)]; overlays = [(import ./pkgs)];
pkgs = (import nixpkgs) { pkgs = (import nixpkgs) {
inherit system overlays; inherit system overlays;
# crossSystem = { config = "i686-unknown-linux-gnu"; }; # crossSystem = { config = "i686-unknown-linux-gnu"; };
}; };
testScript = pkgs.fetchurl { testScript = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/spiretf/nocheats/master/plugin/nocheats.sp"; url = "https://raw.githubusercontent.com/spiretf/nocheats/master/plugin/nocheats.sp";
@ -30,7 +31,10 @@
packages = rec { packages = rec {
inherit (pkgs) ambuild sourcemod sourcepawn sourcemod-includes buildSourcePawnScript hl2sdk; inherit (pkgs) ambuild sourcemod sourcepawn sourcemod-includes buildSourcePawnScript hl2sdk;
sourcemods = mapAttrs (name: sdk: pkgs.sourcemod.override {sdks = {${name} = sdk;};}) hl2sdk; sourcemods = mapAttrs (name: sdk: pkgs.sourcemod.override {sdks = {${name} = sdk;};}) hl2sdk;
buildTestScript = buildSourcePawnScript {name = "test"; src = testScript;}; buildTestScript = buildSourcePawnScript {
name = "test";
src = testScript;
};
}; };
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
@ -40,7 +44,8 @@
sdks = attrNames platformSdks; sdks = attrNames platformSdks;
overlays.default = import ./pkgs; overlays.default = import ./pkgs;
}) // { })
// {
matrix = { matrix = {
include = concatMap (system: map (sdk: {inherit system sdk;}) self.sdks.${system}) systems; include = concatMap (system: map (sdk: {inherit system sdk;}) self.sdks.${system}) systems;
}; };

View file

@ -1,5 +1,8 @@
{ lib, buildPythonPackage, fetchFromGitHub }: {
lib,
buildPythonPackage,
fetchFromGitHub,
}:
buildPythonPackage rec { buildPythonPackage rec {
pname = "ambuild"; pname = "ambuild";
version = "2.2.3-dev"; version = "2.2.3-dev";

View file

@ -1,24 +1,36 @@
{ lib, stdenv, sourcemod-includes, sourcepawn, which }:
{ {
lib,
stdenv,
sourcemod-includes,
sourcepawn,
which,
}: {
defaultIncludes ? true, defaultIncludes ? true,
includes ? [], includes ? [],
src, src,
outPath ? "", outPath ? "",
... ...
}@args: let } @ args: let
inherit (lib) optionals; inherit (lib) optionals;
inherit (builtins) removeAttrs; inherit (builtins) removeAttrs;
allIncludes = includes ++ optionals defaultIncludes [sourcemod-includes]; allIncludes = includes ++ optionals defaultIncludes [sourcemod-includes];
forwardAttrs = removeAttrs args ["defaultIncludes" "includes" "entrypoint"]; forwardAttrs = removeAttrs args ["defaultIncludes" "includes" "entrypoint"];
spEnv = sourcepawn.buildEnv allIncludes; spEnv = sourcepawn.buildEnv allIncludes;
outPathRelative = if outPath == "" then "" else "/${outPath}"; outPathRelative =
mkdirOut = if outPath == "" then "" else "mkdir -p $out"; if outPath == ""
in stdenv.mkDerivation (rec { then ""
else "/${outPath}";
mkdirOut =
if outPath == ""
then ""
else "mkdir -p $out";
in
stdenv.mkDerivation (rec {
nativeBuildInputs = [spEnv which]; nativeBuildInputs = [spEnv which];
dontUnpack = true; dontUnpack = true;
buildPhase = '' buildPhase = ''
# absolute path is needed for spcomp to find the includes # absolute path is needed for spcomp to find the includes
${spEnv}/bin/spcomp ${src} -o out.smx spcomp ${src} -o out.smx
''; '';
installPhase = '' installPhase = ''
${mkdirOut} ${mkdirOut}
@ -27,4 +39,5 @@ in stdenv.mkDerivation (rec {
testPhase = '' testPhase = ''
verifier out.smx verifier out.smx
''; '';
} // args) }
// args)

View file

@ -1,44 +1,130 @@
{fetchFromGitHub, mkDerivation, lib}: let {
fetchFromGitHub,
mkDerivation,
lib,
}: let
inherit (builtins) mapAttrs elem; inherit (builtins) mapAttrs elem;
inherit (lib) optionals; inherit (lib) optionals;
revisions = { revisions = {
csgo = {rev = "4e0975afe5b2994c76ec9b40951b6347b8788463"; sha256 = "sha256-Z5LD3I4uPKGIXTeSC3yQcJl6455XFwQVuiitND8ULEQ=";}; csgo = {
tf2 = {rev = "2d3560994fbc31aebbe3a250048bbbc7f76d2803"; sha256 = "sha256-hKwF1cqg08NRPoZk77+lpC2cPMZeKVhsYFpGNi5IH30=";}; rev = "4e0975afe5b2994c76ec9b40951b6347b8788463";
swarm = {rev = "f6026555a7227b2ff8ebed4f86dd760e50de96db"; sha256 = "sha256-jU3yCEVZUWkiOhqPbbX3oEx26tQaZCpaneMGNSQVnxI=";}; sha256 = "sha256-Z5LD3I4uPKGIXTeSC3yQcJl6455XFwQVuiitND8ULEQ=";
portal2 = {rev = "4555a278a5f3a6cf956a0b78f9c481b40664aa4f"; sha256 = "sha256-Zx5d1qhzoqTybFQQWdJw9/QqbnHUcOB3IyRVbZ/5YyA=";}; };
gmod = {rev = "c12fac7c95d9ef5eca89627f944f397af16ae9b4"; sha256 = "sha256-zO1MJIY0ZgHOt9NKtWBi494bOQixk9wo5ybiQI7Esc8=";}; tf2 = {
nucleardawn = {rev = "568c25dcc3ded2123f851d77f27bf2a3c15382b7"; sha256 = "sha256-81O9XVd39Zq15uiTI4vNVtwTtx/qyyR+xZKNjkEze70=";}; rev = "2d3560994fbc31aebbe3a250048bbbc7f76d2803";
ep2 = {rev = "968ec84e340343f42e3d0552dbd74500ef3034d1"; sha256 = "sha256-XZYJvsIeH+Wh5xzTFHm9fB6JPJh1CELIq/F8ERivZcc="; dirName = "orangebox";}; sha256 = "sha256-hKwF1cqg08NRPoZk77+lpC2cPMZeKVhsYFpGNi5IH30=";
bgt = {rev = "a9a75c4d74e87d53b190680e4d71e93f59b3539e"; sha256 = "sha256-e7XgRvfWod6gEElNvqLC09HiUy3affoed3eqFOizk/I=";}; };
darkm = {rev = "e659cbdd058fe197a2a5ead4038a591c75063331"; sha256 = "sha256-4RMOMUHLjStsqTMHToxMnxzV2TrP/buiFP3pECYf5IE=";}; swarm = {
eye = {rev = "f152e66ac838fb5b8eca1a9076eb26122ac3cb51"; sha256 = "sha256-Zy/rKDKPx3pv9uZD9XhrGBoOiY8/zCBXnc9+LPEwWoQ=";}; rev = "f6026555a7227b2ff8ebed4f86dd760e50de96db";
bms = {rev = "058ed4de4a5db08052937b91798c303bc27b4a14"; sha256 = "sha256-h9+I+lOf4PiTw6U4taQrMLZt1vbPZbucJmf4Td6ltTg=";}; sha256 = "sha256-jU3yCEVZUWkiOhqPbbX3oEx26tQaZCpaneMGNSQVnxI=";
l4d = {rev = "a628c16a21f95752d021a16a0c5816ef1f18c37b"; sha256 = "sha256-TqHVJK0nWhg5Gd0KJ4wYQ1Q3QhIidDUxpYSIXKu32G8=";}; };
contagion = {rev = "cbab58f4da31c6a88a4fc1f1bad92dc748343314"; sha256 = "sha256-TitcR3CUHmvlVi6ZlAYC7tojQIldL/01IFHOHiAhev0=";}; portal2 = {
blade = {rev = "a14ad10afc41d0150ab945cfa1b0e2a64995a503"; sha256 = "sha256-i/1TT/+NJ44Eip9B4RvQFXPd2NQhGBrjgrXdeE+3f7U=";}; rev = "4555a278a5f3a6cf956a0b78f9c481b40664aa4f";
insurgency = {rev = "29da165490c70f00b2b3d56e38ba97be5287f222"; sha256 = "sha256-ECbTsgbGowUbMhPN5H6sofS5OZRRDmLlNHC/oNkweWE=";}; sha256 = "sha256-Zx5d1qhzoqTybFQQWdJw9/QqbnHUcOB3IyRVbZ/5YyA=";
pvkii = {rev = "6769441f9f283c96b3915c5a9399ca8949b1ecb0"; sha256 = "sha256-Z3OYaAuLxBuaznQm6eU0d4dWpOUl1S943b8BazSW6Ug=";}; };
episode1 = {rev = "b3addd57ec0304e03b8a52a5f1f869609538df0a"; sha256 = "sha256-AhjxQ86NEvKwANihD123QSMWrBhw/17mkvcfXQA2q0Q=";}; gmod = {
dota = {rev = "8626bfe25f17f98e4a55e71133e1d368780daa37"; sha256 = "sha256-n7HBnEBzf8eBUqOAGZLJWOrPAGNW68nJ9y80OCB0z8c=";}; rev = "c12fac7c95d9ef5eca89627f944f397af16ae9b4";
mcv = {rev = "6ef5dfa3f5b504e0ad33dffc1596509caa2cbb04"; sha256 = "sha256-xP2pTBfzNGY/1saGaaISaUp+QKETJjVmhJP50GB9f4c=";}; sha256 = "sha256-zO1MJIY0ZgHOt9NKtWBi494bOQixk9wo5ybiQI7Esc8=";
dods = {rev = "d82a11ffc0b3164721f4f919aab289c461e5a375"; sha256 = "sha256-gCbVqyi5Q8zuiTcMMDwb1DUU2XUXiiY+Lxj2wUzM0a8=";}; };
sdk2013 = {rev = "78dab58646d5983c77af44c45a877b89196eb82c"; sha256 = "sha256-2RHuzT6r4WIKYWZaPWFtiDgCAnKgeD9HUyeg1daNCnU=";}; nucleardawn = {
hl2dm = {rev = "6f8b684753626bbedc463f2ed5a382ff54e5de3d"; sha256 = "sha256-KMMH0/kM4e1SQ/sr87Bdb81ZwvZoN3N20LrHBMuxNAM=";}; rev = "568c25dcc3ded2123f851d77f27bf2a3c15382b7";
l4d2 = {rev = "66743d0eeef0537201104e94affde4e446897822"; sha256 = "sha256-JvcAV6U5hbnfMdOc4YfGLumZqAFWLvnWAFoFUfMgtFQ=";}; sha256 = "sha256-81O9XVd39Zq15uiTI4vNVtwTtx/qyyR+xZKNjkEze70=";
css = {rev = "ef291082a9efa01225001626e2b14bee8c2c63be"; sha256 = "sha256-x4tZ+fUTb+i2HoKIXgkpXjOUQIWurmHTLyJVuOm/lD0=";}; };
doi = {rev = "a4a0aa9de0a648d7f91fbb9ad8aecb119bd44314"; sha256 = "sha256-qMVHEeJqHyg9Kq1Y2+MNTjChiIUyO6PkbWmKPoGZa/Q=";}; ep2 = {
rev = "968ec84e340343f42e3d0552dbd74500ef3034d1";
sha256 = "sha256-XZYJvsIeH+Wh5xzTFHm9fB6JPJh1CELIq/F8ERivZcc=";
dirName = "orangebox";
};
bgt = {
rev = "a9a75c4d74e87d53b190680e4d71e93f59b3539e";
sha256 = "sha256-e7XgRvfWod6gEElNvqLC09HiUy3affoed3eqFOizk/I=";
};
darkm = {
rev = "e659cbdd058fe197a2a5ead4038a591c75063331";
sha256 = "sha256-4RMOMUHLjStsqTMHToxMnxzV2TrP/buiFP3pECYf5IE=";
};
eye = {
rev = "f152e66ac838fb5b8eca1a9076eb26122ac3cb51";
sha256 = "sha256-Zy/rKDKPx3pv9uZD9XhrGBoOiY8/zCBXnc9+LPEwWoQ=";
};
bms = {
rev = "058ed4de4a5db08052937b91798c303bc27b4a14";
sha256 = "sha256-h9+I+lOf4PiTw6U4taQrMLZt1vbPZbucJmf4Td6ltTg=";
};
l4d = {
rev = "a628c16a21f95752d021a16a0c5816ef1f18c37b";
sha256 = "sha256-TqHVJK0nWhg5Gd0KJ4wYQ1Q3QhIidDUxpYSIXKu32G8=";
};
contagion = {
rev = "cbab58f4da31c6a88a4fc1f1bad92dc748343314";
sha256 = "sha256-TitcR3CUHmvlVi6ZlAYC7tojQIldL/01IFHOHiAhev0=";
};
blade = {
rev = "a14ad10afc41d0150ab945cfa1b0e2a64995a503";
sha256 = "sha256-i/1TT/+NJ44Eip9B4RvQFXPd2NQhGBrjgrXdeE+3f7U=";
};
insurgency = {
rev = "29da165490c70f00b2b3d56e38ba97be5287f222";
sha256 = "sha256-ECbTsgbGowUbMhPN5H6sofS5OZRRDmLlNHC/oNkweWE=";
};
pvkii = {
rev = "6769441f9f283c96b3915c5a9399ca8949b1ecb0";
sha256 = "sha256-Z3OYaAuLxBuaznQm6eU0d4dWpOUl1S943b8BazSW6Ug=";
};
episode1 = {
rev = "b3addd57ec0304e03b8a52a5f1f869609538df0a";
sha256 = "sha256-AhjxQ86NEvKwANihD123QSMWrBhw/17mkvcfXQA2q0Q=";
};
dota = {
rev = "8626bfe25f17f98e4a55e71133e1d368780daa37";
sha256 = "sha256-n7HBnEBzf8eBUqOAGZLJWOrPAGNW68nJ9y80OCB0z8c=";
};
mcv = {
rev = "6ef5dfa3f5b504e0ad33dffc1596509caa2cbb04";
sha256 = "sha256-xP2pTBfzNGY/1saGaaISaUp+QKETJjVmhJP50GB9f4c=";
};
dods = {
rev = "d82a11ffc0b3164721f4f919aab289c461e5a375";
sha256 = "sha256-gCbVqyi5Q8zuiTcMMDwb1DUU2XUXiiY+Lxj2wUzM0a8=";
};
sdk2013 = {
rev = "78dab58646d5983c77af44c45a877b89196eb82c";
sha256 = "sha256-2RHuzT6r4WIKYWZaPWFtiDgCAnKgeD9HUyeg1daNCnU=";
};
hl2dm = {
rev = "6f8b684753626bbedc463f2ed5a382ff54e5de3d";
sha256 = "sha256-KMMH0/kM4e1SQ/sr87Bdb81ZwvZoN3N20LrHBMuxNAM=";
};
l4d2 = {
rev = "66743d0eeef0537201104e94affde4e446897822";
sha256 = "sha256-JvcAV6U5hbnfMdOc4YfGLumZqAFWLvnWAFoFUfMgtFQ=";
};
css = {
rev = "ef291082a9efa01225001626e2b14bee8c2c63be";
sha256 = "sha256-x4tZ+fUTb+i2HoKIXgkpXjOUQIWurmHTLyJVuOm/lD0=";
};
doi = {
rev = "a4a0aa9de0a648d7f91fbb9ad8aecb119bd44314";
sha256 = "sha256-qMVHEeJqHyg9Kq1Y2+MNTjChiIUyO6PkbWmKPoGZa/Q=";
};
}; };
# from https://github.com/alliedmodders/sourcemod/blob/5addaffa5665f353c874f45505914ab692535c24/AMBuildScript#L51 # from https://github.com/alliedmodders/sourcemod/blob/5addaffa5665f353c874f45505914ab692535c24/AMBuildScript#L51
linuxX86Sdks = ["episode1" "ep2" "css" "hl2dm" "dods" "sdk2013" "tf2" "l4d" "l4d2" "nucleardawn" "csgo" "insurgency" "bms" "doi"]; linuxX86Sdks = ["episode1" "ep2" "css" "hl2dm" "dods" "sdk2013" "tf2" "l4d" "l4d2" "nucleardawn" "csgo" "insurgency" "bms" "doi"];
linuxX64Sdks = ["blade" "csgo"]; linuxX64Sdks = ["blade" "csgo"];
isX86 = name: elem name linuxX86Sdks; isX86 = name: elem name linuxX86Sdks;
isX64 = name: elem name linuxX64Sdks; isX64 = name: elem name linuxX64Sdks;
fetchRev = {rev, sha256, ...}: fetchFromGitHub { fetchRev = {
rev,
sha256,
...
}:
fetchFromGitHub {
inherit rev sha256; inherit rev sha256;
owner = "alliedmodders"; owner = "alliedmodders";
repo = "hl2sdk"; repo = "hl2sdk";
}; };
buildSdk = sdkName: sdk: mkDerivation rec { buildSdk = sdkName: sdk:
mkDerivation rec {
name = "hl2sdk-${sdkName}"; name = "hl2sdk-${sdkName}";
src = fetchRev sdk; src = fetchRev sdk;
installPhase = '' installPhase = ''
@ -47,9 +133,11 @@
''; '';
meta = { meta = {
platforms = optionals (isX86 sdkName) ["i686-linux"] ++ platforms =
optionals (isX64 sdkName) ["x86_64-linux"]; optionals (isX86 sdkName) ["i686-linux"]
++ optionals (isX64 sdkName) ["x86_64-linux"];
}; };
}; };
sdks = mapAttrs buildSdk revisions; sdks = mapAttrs buildSdk revisions;
in sdks in
sdks

View file

@ -1,8 +1,15 @@
{ multiStdenv, fetchFromGitHub, ambuild, git, sdks ? {} }: let {
multiStdenv,
fetchFromGitHub,
ambuild,
git,
sdks ? {},
}: let
inherit (builtins) attrNames concatStringsSep; inherit (builtins) attrNames concatStringsSep;
sdkNames = attrNames sdks; sdkNames = attrNames sdks;
links = map (sdk: "ln -s ${sdks.${sdk}} hl2sdk-${sdk}") sdkNames; links = map (sdk: "ln -s ${sdks.${sdk}} hl2sdk-${sdk}") sdkNames;
in multiStdenv.mkDerivation rec { in
multiStdenv.mkDerivation rec {
pname = "metamod-source"; pname = "metamod-source";
version = "1.10"; version = "1.10";
@ -11,7 +18,7 @@ in multiStdenv.mkDerivation rec {
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "alliedmodders"; owner = "alliedmodders";
repo = pname; repo = pname;
# rev = version; # rev = version;
rev = "b8d1fd401d685fe711ad27e4e169742bd8a51978"; rev = "b8d1fd401d685fe711ad27e4e169742bd8a51978";
sha256 = "sha256-8rQJ99f+XxD+rSP7OpyU5Ml+Wwp/SqJ9+B9EEWmcqDY="; sha256 = "sha256-8rQJ99f+XxD+rSP7OpyU5Ml+Wwp/SqJ9+B9EEWmcqDY=";
}; };
@ -21,9 +28,9 @@ in multiStdenv.mkDerivation rec {
git git
]; ];
hardeningDisable = [ "all" ]; hardeningDisable = ["all"];
CFLAGS="-Wno-error=class-memaccess"; CFLAGS = "-Wno-error=class-memaccess";
buildPhase = '' buildPhase = ''
${concatStringsSep "\n" links} ${concatStringsSep "\n" links}
@ -38,4 +45,4 @@ in multiStdenv.mkDerivation rec {
mv package $out/share mv package $out/share
cp -r $src $out/include cp -r $src $out/include
''; '';
} }

View file

@ -1,4 +1,7 @@
{ stdenv, fetchFromGitHub }: {
stdenv,
fetchFromGitHub,
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "sourcemod-includes"; pname = "sourcemod-includes";
version = "1.11"; version = "1.11";

View file

@ -1,4 +1,14 @@
{ clangStdenv, fetchFromGitHub, ambuild, metamod-source, symlinkJoin, lib, writeShellScriptBin, zlib, sdks ? {} }: let {
clangStdenv,
fetchFromGitHub,
ambuild,
metamod-source,
symlinkJoin,
lib,
writeShellScriptBin,
zlib,
sdks ? {},
}: let
inherit (builtins) concatStringsSep attrNames attrValues; inherit (builtins) concatStringsSep attrNames attrValues;
inherit (lib) optionals; inherit (lib) optionals;
combinedSdks = symlinkJoin { combinedSdks = symlinkJoin {
@ -13,7 +23,8 @@
sdkNames = concatStringsSep "," (attrNames sdks); sdkNames = concatStringsSep "," (attrNames sdks);
# ambuild doesn't allow configuring a target prefix for "ar" # ambuild doesn't allow configuring a target prefix for "ar"
arWrapper = writeShellScriptBin "ar" "exec -a $0 ${clangStdenv.cc.targetPrefix}ar $@"; arWrapper = writeShellScriptBin "ar" "exec -a $0 ${clangStdenv.cc.targetPrefix}ar $@";
in clangStdenv.mkDerivation rec { in
clangStdenv.mkDerivation rec {
pname = "sourcemod"; pname = "sourcemod";
version = "1.11"; version = "1.11";
@ -27,15 +38,17 @@ in clangStdenv.mkDerivation rec {
fetchSubmodules = true; fetchSubmodules = true;
}; };
nativeBuildInputs = [ nativeBuildInputs =
[
ambuild ambuild
] ++ optionals (clangStdenv.cc.targetPrefix != "") [arWrapper]; ]
++ optionals (clangStdenv.cc.targetPrefix != "") [arWrapper];
buildInputs = [ buildInputs = [
zlib zlib
]; ];
# hardeningDisable = [ "all" ]; # hardeningDisable = [ "all" ];
configurePhase = '' configurePhase = ''
mkdir build mkdir build
@ -52,4 +65,4 @@ in clangStdenv.mkDerivation rec {
mkdir $out mkdir $out
mv package $out/share mv package $out/share
''; '';
} }

View file

@ -1,5 +1,11 @@
{ stdenv, fetchFromGitHub, ambuild, python3Packages, buildEnv }: {
let self = stdenv.mkDerivation rec { stdenv,
fetchFromGitHub,
ambuild,
python3Packages,
buildEnv,
}: let
self = stdenv.mkDerivation rec {
pname = "sourcepawn"; pname = "sourcepawn";
version = "1.11"; version = "1.11";
@ -33,9 +39,11 @@ let self = stdenv.mkDerivation rec {
cp spcomp/*/spcomp spshell/*/spshell verifier/*/verifier $out/bin cp spcomp/*/spcomp spshell/*/spshell verifier/*/verifier $out/bin
''; '';
passthru.buildEnv = imports: buildEnv { passthru.buildEnv = imports:
buildEnv {
name = "sourcepawn-env"; name = "sourcepawn-env";
paths = imports ++ [self]; paths = imports ++ [self];
}; };
}; };
in self in
self