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

@ -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 = ''