about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/katago/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/katago/default.nix')
-rw-r--r--nixpkgs/pkgs/games/katago/default.nix114
1 files changed, 114 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/katago/default.nix b/nixpkgs/pkgs/games/katago/default.nix
new file mode 100644
index 000000000000..cc49d6338a66
--- /dev/null
+++ b/nixpkgs/pkgs/games/katago/default.nix
@@ -0,0 +1,114 @@
+{ stdenv
+, boost
+, cmake
+, cudaPackages
+, eigen
+, fetchFromGitHub
+, gperftools
+, lib
+, libzip
+, makeWrapper
+, mesa
+, ocl-icd
+, opencl-headers
+, openssl
+, writeShellScriptBin
+, enableAVX2 ? stdenv.hostPlatform.avx2Support
+, backend ? "opencl"
+, enableBigBoards ? false
+, enableContrib ? false
+, enableTcmalloc ? true
+}:
+
+assert lib.assertOneOf "backend" backend [ "opencl" "cuda" "tensorrt" "eigen" ];
+
+# N.b. older versions of cuda toolkit (e.g. 10) do not support newer versions
+# of gcc.  If you need to use cuda10, please override stdenv with gcc8Stdenv
+stdenv.mkDerivation rec {
+  pname = "katago";
+  version = "1.13.1";
+  githash = "3539a3d410b12f79658bb7a2cdaf1ecb6c95e6c1";
+
+  src = fetchFromGitHub {
+    owner = "lightvector";
+    repo = "katago";
+    rev = "v${version}";
+    sha256 = "sha256-A2ZvFcklYQoxfqYrLrazksrJkfdELnn90aAbkm7pJg0=";
+  };
+
+  fakegit = writeShellScriptBin "git" "echo ${githash}";
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libzip
+    boost
+  ] ++ lib.optionals (backend == "eigen") [
+    eigen
+  ] ++ lib.optionals (backend == "cuda") [
+    cudaPackages.cudnn
+    cudaPackages.cudatoolkit
+    mesa.drivers
+  ] ++ lib.optionals (backend == "tensorrt") [
+      cudaPackages.cudatoolkit
+      cudaPackages.tensorrt
+      mesa.drivers
+  ] ++ lib.optionals (backend == "opencl") [
+    opencl-headers
+    ocl-icd
+  ] ++ lib.optionals enableContrib [
+    openssl
+  ] ++ lib.optionals enableTcmalloc [
+    gperftools
+  ];
+
+  cmakeFlags = [
+    "-DNO_GIT_REVISION=ON"
+  ] ++ lib.optionals enableAVX2 [
+    "-DUSE_AVX2=ON"
+  ] ++ lib.optionals (backend == "eigen") [
+    "-DUSE_BACKEND=EIGEN"
+  ] ++ lib.optionals (backend == "cuda") [
+    "-DUSE_BACKEND=CUDA"
+  ] ++ lib.optionals (backend == "tensorrt") [
+    "-DUSE_BACKEND=TENSORRT"
+  ] ++ lib.optionals (backend == "opencl") [
+    "-DUSE_BACKEND=OPENCL"
+  ] ++ lib.optionals enableContrib [
+    "-DBUILD_DISTRIBUTED=1"
+    "-DNO_GIT_REVISION=OFF"
+    "-DGIT_EXECUTABLE=${fakegit}/bin/git"
+  ] ++ lib.optionals enableTcmalloc [
+    "-DUSE_TCMALLOC=ON"
+  ] ++ lib.optionals enableBigBoards [
+    "-DUSE_BIGGER_BOARDS_EXPENSIVE=ON"
+  ];
+
+  preConfigure = ''
+    cd cpp/
+  '' + lib.optionalString (backend == "cuda" || backend == "tensorrt") ''
+    export CUDA_PATH="${cudaPackages.cudatoolkit}"
+    export EXTRA_LDFLAGS="-L/run/opengl-driver/lib"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin; cp katago $out/bin;
+  '' + lib.optionalString (backend == "cuda" || backend == "tensorrt") ''
+    wrapProgram $out/bin/katago \
+      --prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib"
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Go engine modeled after AlphaGo Zero";
+    homepage    = "https://github.com/lightvector/katago";
+    license     = licenses.mit;
+    maintainers = [ maintainers.omnipotententity ];
+    platforms   = [ "x86_64-linux" ];
+  };
+}