From 71a6843b373d8ba5037058ac20598863693ee1ff Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 25 Jan 2025 12:59:40 -0500 Subject: [PATCH] Same issue with package based on 2ship2harkinian. --- .../flakes/starship-game/package.nix | 350 ++++++++++-------- 1 file changed, 188 insertions(+), 162 deletions(-) diff --git a/nix/configuration/flakes/starship-game/package.nix b/nix/configuration/flakes/starship-game/package.nix index 0473bb9..f2b57b3 100644 --- a/nix/configuration/flakes/starship-game/package.nix +++ b/nix/configuration/flakes/starship-game/package.nix @@ -1,189 +1,215 @@ -# unpackPhase -# patchPhase -# configurePhase -# buildPhase -# checkPhase -# installPhase -# fixupPhase -# installCheckPhase -# distPhase { - stdenv, - fetchFromGitHub, - cmake, - ninja, lib, - lsb-release, - copyDesktopItems, - boost, - glew, + stdenv, SDL2, - SDL2_net, + cmake, + copyDesktopItems, + fetchFromGitHub, + fetchpatch, + fetchurl, + imagemagick, + imgui, libpng, - libX11, - libXrandr, - libXinerama, - libXcursor, - libXi, - libXext, libpulseaudio, - zenity, libzip, + lsb-release, + makeDesktopItem, + makeWrapper, + ninja, nlohmann_json, - tinyxml-2, + pkg-config, + python3, spdlog, - ... + stormlib, + tinyxml-2, + writeTextFile, + zenity, }: + +let + + # This would get fetched at build time otherwise, see: + # https://github.com/HarbourMasters/2ship2harkinian/blob/1.0.2/mm/CMakeLists.txt#L708 + gamecontrollerdb = fetchurl { + name = "gamecontrollerdb.txt"; + url = "https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/b1759cf84028aab89caa1c395e198c340b8dfd89/gamecontrollerdb.txt"; + hash = "sha256-7C5EkqBIhLGNJuhi3832y0ffW5Ep7iuTYXb1bL5h2Js="; + }; + + # 2ship needs a specific imgui version + imgui' = imgui.overrideAttrs rec { + version = "1.90.6"; + src = fetchFromGitHub { + owner = "ocornut"; + repo = "imgui"; + rev = "v${version}-docking"; + hash = "sha256-Y8lZb1cLJF48sbuxQ3vXq6GLru/WThR78pq7LlORIzc="; + }; + }; + + libgfxd = fetchFromGitHub { + owner = "glankk"; + repo = "libgfxd"; + rev = "96fd3b849f38b3a7c7b7f3ff03c5921d328e6cdf"; + hash = "sha256-dedZuV0BxU6goT+rPvrofYqTz9pTA/f6eQcsvpDWdvQ="; + }; + + # stb_impl = writeTextFile { + # name = "stb_impl.c"; + # text = '' + # #define STB_IMAGE_IMPLEMENTATION + # #include "stb_image.h" + # ''; + # }; + + # stb' = fetchurl { + # name = "stb_image.h"; + # url = "https://raw.githubusercontent.com/nothings/stb/0bc88af4de5fb022db643c2d8e549a0927749354/stb_image.h"; + # hash = "sha256-xUsVponmofMsdeLsI6+kQuPg436JS3PBl00IZ5sg3Vw="; + # }; + + # Apply 2ship's patch for stormlib + stormlib' = stormlib.overrideAttrs (prev: rec { + version = "9.25"; + src = fetchFromGitHub { + owner = "ladislav-zezula"; + repo = "StormLib"; + rev = "v${version}"; + hash = "sha256-HTi2FKzKCbRaP13XERUmHkJgw8IfKaRJvsK3+YxFFdc="; + }; + nativeBuildInputs = prev.nativeBuildInputs ++ [ pkg-config ]; + patches = (prev.patches or [ ]) ++ [ + (fetchpatch { + name = "stormlib-optimizations.patch"; + url = "https://github.com/briaguya-ai/StormLib/commit/ff338b230544f8b2bb68d2fbe075175ed2fd758c.patch"; + hash = "sha256-Jbnsu5E6PkBifcx/yULMVC//ab7tszYgktS09Azs5+4="; + }) + ]; + }); + + thread_pool = fetchFromGitHub { + owner = "bshoshany"; + repo = "thread-pool"; + rev = "v4.1.0"; + hash = "sha256-zhRFEmPYNFLqQCfvdAaG5VBNle9Qm8FepIIIrT9sh88="; + }; + +in stdenv.mkDerivation (finalAttrs: { - name = "starship-game"; - version = "v1.0.0"; + pname = "starship-game"; + version = "1.0.0"; src = fetchFromGitHub { - owner = "harbourmasters"; + owner = "HarbourMasters"; repo = "starship"; tag = finalAttrs.version; hash = "sha256-kaLLlLuonqE2DJcRlWR4tCEBNjwIYFlzeDLcYsvMO7I="; fetchSubmodules = true; }; - imgui_src = fetchFromGitHub { - owner = "ocornut"; - repo = "imgui"; - tag = "v1.90.6-docking"; - hash = "sha256-Y8lZb1cLJF48sbuxQ3vXq6GLru/WThR78pq7LlORIzc="; - fetchSubmodules = true; - }; - - stormlib_src = fetchFromGitHub { - owner = "ladislav-zezula"; - repo = "StormLib"; - tag = "v9.25"; - hash = "sha256-HTi2FKzKCbRaP13XERUmHkJgw8IfKaRJvsK3+YxFFdc="; - fetchSubmodules = true; - }; - - threadpool_src = fetchFromGitHub { - owner = "bshoshany"; - repo = "thread-pool"; - tag = "v4.1.0"; - hash = "sha256-zhRFEmPYNFLqQCfvdAaG5VBNle9Qm8FepIIIrT9sh88="; - fetchSubmodules = true; - }; - - libgfxd_src = fetchFromGitHub { - owner = "glankk"; - repo = "libgfxd"; - rev = "96fd3b849f38b3a7c7b7f3ff03c5921d328e6cdf"; - hash = "sha256-dedZuV0BxU6goT+rPvrofYqTz9pTA/f6eQcsvpDWdvQ="; - fetchSubmodules = true; - }; - - yaml_cpp_src = fetchFromGitHub { - owner = "jbeder"; - repo = "yaml-cpp"; - rev = "f7320141120f720aecc4c32be25586e7da9eb978"; - hash = "sha256-J87oS6Az1/vNdyXu3L7KmUGWzU0IAkGrGMUUha+xDXI="; - fetchSubmodules = true; - }; - - spdlog_src = fetchFromGitHub { - owner = "gabime"; - repo = "spdlog"; - rev = "7e635fca68d014934b4af8a1cf874f63989352b7"; - hash = "sha256-cxTaOuLXHRU8xMz9gluYz0a93O0ez2xOxbloyc1m1ns="; - fetchSubmodules = true; - }; - - # -DFETCHCONTENT_SOURCE_DIR_HELLO=/nix/store/...-hello/ - - # # This would get fetched at build time otherwise, see: - # # https://github.com/HarbourMasters/Shipwright/blob/e46c60a7a1396374e23f7a1f7122ddf9efcadff7/soh/CMakeLists.txt#L736 - # gamecontrollerdb = fetchurl { - # name = "gamecontrollerdb.txt"; - # url = "https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/075c1549075ef89a397fd7e0663d21e53a2485fd/gamecontrollerdb.txt"; - # hash = "sha256-atjc0t921l6JSUAd/Yk7uup2R7mCp5ivAh6Dr7HBY7I="; - # }; - - nativeBuildInputs = - [ - cmake - ninja - ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ - lsb-release - copyDesktopItems - ]; - - buildInputs = - [ - boost - glew - SDL2 - SDL2_net - libpng - libzip - nlohmann_json - tinyxml-2 - spdlog - ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ - libX11 - libXrandr - libXinerama - libXcursor - libXi - libXext - libpulseaudio - zenity - ]; - - # cmakeFlags = [ - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_IMGUI" "${finalAttrs.imgui_src}") - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_STORMLIB" "${finalAttrs.stormlib_src}") - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_THREADPOOL" "${finalAttrs.threadpool_src}") - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_LIBGFXD" "${finalAttrs.libgfxd_src}") - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_YAML-CPP" "${finalAttrs.yaml_cpp_src}") - # (lib.cmakeOptionType "PATH" "FETCHCONTENT_SOURCE_DIR_SPDLOG" "${finalAttrs.spdlog_src}") + # patches = [ + # # remove fetching stb as we will patch our own + # ./0001-deps.patch # ]; - configurePhase = '' - cmake -H. -Bbuild-cmake -GNinja \ - -DFETCHCONTENT_SOURCE_DIR_IMGUI=${finalAttrs.imgui_src} \ - -DFETCHCONTENT_SOURCE_DIR_STORMLIB=${finalAttrs.stormlib_src} \ - -DFETCHCONTENT_SOURCE_DIR_THREADPOOL=${finalAttrs.threadpool_src} + nativeBuildInputs = [ + cmake + copyDesktopItems + imagemagick + lsb-release + makeWrapper + ninja + pkg-config + python3 + ]; - (cd tools/Torch && cmake -H. -Bbuild-cmake -GNinja \ - -DFETCHCONTENT_SOURCE_DIR_LIBGFXD=${finalAttrs.libgfxd_src} \ - -DFETCHCONTENT_SOURCE_DIR_YAML-CPP=${finalAttrs.yaml_cpp_src} \ - -DFETCHCONTENT_SOURCE_DIR_SPDLOG=${finalAttrs.spdlog_src} - ) + buildInputs = [ + SDL2 + imgui' + libpng + libpulseaudio + libzip + nlohmann_json + spdlog + stormlib' + tinyxml-2 + zenity + ]; + + cmakeFlags = [ + (lib.cmakeBool "NON_PORTABLE" true) + (lib.cmakeFeature "CMAKE_INSTALL_PREFIX" "${placeholder "out"}/starship-game") + (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_IMGUI" "${imgui'.src}") + (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_LIBGFXD" "${libgfxd}") + (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_STORMLIB" "${stormlib'}") + (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_THREADPOOL" "${thread_pool}") + ]; + + dontAddPrefix = true; + + # Linking fails without this + hardeningDisable = [ "format" ]; + + # Pie needs to be enabled or else it segfaults + hardeningEnable = [ "pie" ]; + + # preConfigure = '' + # # mirror 2ship's stb + # mkdir stb + # cp ${stb'} ./stb/${stb'.name} + # cp ${stb_impl} ./stb/${stb_impl.name} + + # substituteInPlace libultraship/cmake/dependencies/common.cmake \ + # --replace-fail "\''${STB_DIR}" "/build/source/stb" + # ''; + + postBuild = '' + cp ${gamecontrollerdb} ${gamecontrollerdb.name} + pushd ../OTRExporter + python3 ./extract_assets.py -z ../build/ZAPD/ZAPD.out --norom --xml-root ../mm/assets/xml --custom-assets-path ../mm/assets/custom --custom-otr-file 2ship.o2r --port-ver ${finalAttrs.version} + popd ''; - buildPhase = '' - # Generate sf64.o2r - # cmake --build build-cmake --target ExtractAssets - - # Compile the project - # Add `--config Release` if you're packaging - cmake --build build-cmake --config Release + preInstall = '' + # Cmake likes it here for its install paths + cp ../OTRExporter/2ship.o2r mm/ ''; - # installPhase = '' - # mkdir -p $out/bin - # mv chord $out/bin - # ''; + postInstall = '' + mkdir -p $out/bin + ln -s $out/2s2h/2s2h.elf $out/bin/2s2h + install -Dm644 ../mm/linux/2s2hIcon.png $out/share/pixmaps/2s2h.png + ''; - # buildInputs = [ sqlite ]; - # phases = [ - # "installPhase" - # ]; - # installPhase = '' - # runHook preInstall - # mkdir -p $out/share/zsh/plugins/zsh-histdb - # cp -r $src/histdb-* $src/*.zsh $src/db_migrations $out/share/zsh/plugins/zsh-histdb/ - # runHook postInstall - # ''; - # postInstall = '' - # substituteInPlace $out/share/zsh/plugins/zsh-histdb/sqlite-history.zsh $out/share/zsh/plugins/zsh-histdb/histdb-merge $out/share/zsh/plugins/zsh-histdb/histdb-migrate --replace-fail "sqlite3" "${sqlite}/bin/sqlite3" - # ''; + postFixup = '' + wrapProgram $out/2s2h/2s2h.elf --prefix PATH ":" ${lib.makeBinPath [ zenity ]} + ''; + + desktopItems = [ + (makeDesktopItem { + name = "starship"; + icon = "starship"; + exec = "starship"; + comment = finalAttrs.meta.description; + genericName = "Starship"; + desktopName = "starship"; + categories = [ "Game" ]; + }) + ]; + + meta = { + homepage = "https://github.com/HarbourMasters/2ship2harkinian"; + description = "A PC port of Majora's Mask with modern controls, widescreen, high-resolution, and more"; + mainProgram = "starship"; + platforms = [ "x86_64-linux" ]; + maintainers = with lib.maintainers; [ ]; + license = with lib.licenses; [ + # # OTRExporter, OTRGui, ZAPDTR, libultraship + # mit + # # 2 Ship 2 Harkinian + # cc0 + # # Reverse engineering + # unfree + ]; + }; })