proper per-system sdks

This commit is contained in:
Robin Appelman 2023-07-09 16:19:49 +02:00
commit 8919632524
6 changed files with 69 additions and 20 deletions

View file

@ -23,7 +23,7 @@ jobs:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
- id: set-matrix
run: echo "matrix={\"sdk\":$(nix eval --json ".#sdks.x86_64-linux")}" | tee $GITHUB_OUTPUT
run: echo "matrix=$(nix eval --json ".#matrix")" | tee $GITHUB_OUTPUT
sourcemod:
runs-on: ubuntu-latest
@ -39,7 +39,7 @@ jobs:
name: ci
instance: https://cache.icewind.me
authToken: '${{ secrets.ATTIC_TOKEN }}'
- run: nix build .#sourcemods.${{ matrix.sdk }}
- run: nix build .#packages.${{ matrix.system }}.sourcemods.${{ matrix.sdk }}
sourcepawn:
runs-on: ubuntu-latest

View file

@ -12,7 +12,7 @@ The following is currently packaged:
- `sourcemod`
### Sourcemod SDKs
## Sourcemod SDKs
For the `sourcemod` package, you need to enable one or more SDKs at build time.
The SDKs are packaged under the `hl2sdk` package and can be enabled like in the following example.
@ -21,6 +21,16 @@ The SDKs are packaged under the `hl2sdk` package and can be enabled like in the
pkgs.sourcemod.override {sdks = {inherit (pkgs.hl2sdk) tf2;};};
```
### Supported SDKs
#### i686-linux
`episode1`, `css`, `hl2dm`, `dods`, `sdk2013`, `tf2`, `l4d`, `l4d2`, `nucleardawn`, `csgo`, `doi` and `bms`
#### x86_64-linux
`dota`
## Building sourcepawn script
```nix

View file

@ -8,17 +8,22 @@
self,
nixpkgs,
utils,
}:
utils.lib.eachDefaultSystem (system: let
inherit (builtins) mapAttrs attrNames;
}: let
systems = with utils.lib.system; [x86_64-linux i686-linux];
in utils.lib.eachSystem systems (system: let
inherit (builtins) mapAttrs attrNames elem;
inherit (pkgs) lib;
inherit (lib.attrsets) filterAttrs;
overlays = [(import ./pkgs)];
pkgs = (import nixpkgs) {
inherit system overlays;
# crossSystem = { config = "i686-unknown-linux-gnu"; };
};
testScript = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/spiretf/nocheats/master/plugin/nocheats.sp";
sha256 = "sha256-Z3RJhuc9c8YQTo9gnLTBrqL4JpADZgDttrJVyE/MWdM=";
};
platformSdks = filterAttrs (name: sdk: elem system sdk.meta.platforms) pkgs.hl2sdk;
in rec {
packages = rec {
inherit (pkgs) ambuild sourcemod sourcepawn sourcemod-includes buildSourcePawnScript hl2sdk;
@ -27,11 +32,17 @@
};
devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [];
nativeBuildInputs = with pkgs; [clangStdenv];
};
sdks = attrNames packages.hl2sdk;
sdks = attrNames platformSdks;
overlays.default = import ./pkgs;
});
}) // {
matrix = let
inherit (nixpkgs.lib.lists) concatMap;
inherit (builtins) map;
systemSdks = concatMap (system: map (sdk: {inherit system sdk;}) self.sdks.${system}) systems;
in {include = systemSdks;};
};
}

View file

@ -1,6 +1,6 @@
final: prev: {
hl2sdk = (import ./hl2sdk.nix) {
inherit (final) fetchFromGitHub;
inherit (final) fetchFromGitHub lib;
inherit (final.stdenvNoCC) mkDerivation;
};
ambuild = final.python3Packages.callPackage ./ambuild.nix {};

View file

@ -1,5 +1,6 @@
{fetchFromGitHub, mkDerivation}: let
inherit (builtins) mapAttrs;
{fetchFromGitHub, mkDerivation, lib}: let
inherit (builtins) mapAttrs elem;
inherit (lib) optionals;
revisions = {
csgo = {rev = "4e0975afe5b2994c76ec9b40951b6347b8788463"; sha256 = "sha256-Z5LD3I4uPKGIXTeSC3yQcJl6455XFwQVuiitND8ULEQ=";};
tf2 = {rev = "2d3560994fbc31aebbe3a250048bbbc7f76d2803"; sha256 = "sha256-hKwF1cqg08NRPoZk77+lpC2cPMZeKVhsYFpGNi5IH30=";};
@ -27,6 +28,11 @@
css = {rev = "ef291082a9efa01225001626e2b14bee8c2c63be"; sha256 = "sha256-x4tZ+fUTb+i2HoKIXgkpXjOUQIWurmHTLyJVuOm/lD0=";};
doi = {rev = "a4a0aa9de0a648d7f91fbb9ad8aecb119bd44314"; sha256 = "sha256-qMVHEeJqHyg9Kq1Y2+MNTjChiIUyO6PkbWmKPoGZa/Q=";};
};
# from https://github.com/alliedmodders/metamod-source/blob/master/sample_mm/AMBuildScript
linuxX86Sdks = ["episode1" "css" "hl2dm" "dods" "sdk2013" "tf2" "l4d" "l4d2" "nucleardawn" "csgo" "doi" "bms"];
linuxX64Sdks = ["dota"];
isX86 = name: elem name linuxX86Sdks;
isX64 = name: elem name linuxX64Sdks;
fetchRev = {rev, sha256}: fetchFromGitHub {
inherit rev sha256;
owner = "alliedmodders";
@ -39,6 +45,15 @@
mkdir -p $out
cp -r $src $out/${name}
'';
passthru.platforms = {
x86 = isX86 sdkName;
x64 = isX64 sdkName;
};
meta = {
platforms = optionals passthru.platforms.x86 ["i686-linux"] ++
optionals passthru.platforms.x64 ["x86_64-linux"];
};
};
sdks = mapAttrs buildSdk revisions;
in sdks

View file

@ -1,34 +1,47 @@
{ clangMultiStdenv, fetchFromGitHub, ambuild, metamod-source, symlinkJoin, sdks ? {} }: let
{ clangStdenv, fetchFromGitHub, ambuild, metamod-source, symlinkJoin, lib, writeShellScriptBin, zlib, sdks ? {} }: let
inherit (builtins) concatStringsSep attrNames attrValues;
sdkNames = attrNames sdks;
inherit (lib) optionals;
combinedSdks = symlinkJoin {
name = "hl2sdk-${concatStringsSep "-" (attrNames sdks)}";
paths = attrValues sdks;
};
in clangMultiStdenv.mkDerivation rec {
ambuildArchs = {
"x86_64-linux" = "x86_64";
"i686-linux" = "x86";
};
ambuildArch = ambuildArchs.${clangStdenv.system};
sdkNames = concatStringsSep "," (attrNames sdks);
# ambuild doesn't allow configuring a target prefix for "ar"
arWrapper = writeShellScriptBin "ar" "exec -a $0 ${clangStdenv.cc.targetPrefix}ar $@";
in clangStdenv.mkDerivation rec {
pname = "sourcemod";
version = "1.10";
version = "1.11";
NIX_CFLAGS_COMPILE = "-Wno-error=implicit-const-int-float-conversion -Wno-error=tautological-overlap-compare";
src = fetchFromGitHub {
owner = "alliedmodders";
repo = pname;
rev = "39c2dc60e0c0d963cfbe39bee3a7cf953cc8055c";
sha256 = "sha256-SwrBuOAebmLq5bgjw5i8CFuEDTtvDqLYY/dk4holrzw=";
rev = "b09a675eb01c65dd95d7ac1a522fb62";
sha256 = "sha256-FQBYxBt2AoM7OQYhz+qZuLddT9tIfW7ZlRg1Zkd5qE0=";
fetchSubmodules = true;
};
nativeBuildInputs = [
ambuild
] ++ optionals (clangStdenv.cc.targetPrefix != "") [arWrapper];
buildInputs = [
zlib
];
hardeningDisable = [ "all" ];
# hardeningDisable = [ "all" ];
configurePhase = ''
mkdir build
cd build
python ../configure.py --sdks present --no-mysql --disable-auto-versioning --mms-path=${metamod-source.src} --hl2sdk-root=${combinedSdks}
python ../configure.py --targets ${ambuildArch} --enable-optimize --sdks=${sdkNames} \
--no-mysql --disable-auto-versioning --mms-path=${metamod-source.src} --hl2sdk-root=${combinedSdks}
'';
buildPhase = ''