~ruther/guix-local

f98affddb44e5064ba768c750a32c3b3544ccf75 — Andrew Wong 2 months ago a6b42e4
gnu: pcsx2: Revise package.

* gnu/packages/emulators.scm (pcsx2) [origin] <snippet>: Force system ffmpeg
headers, set compiled-in version, and de-vendor cpuinfo, fast_float, fmt,
googletest, libzip, rapidjson, soundtouch, vulkan-headers,
vulkan-memory-allocator.
[arguments] <#:configure-flags>: Add "-DPACKAGE_MODE=ON" and
"-DUSE_LINKED_FFMPEG=ON".
<#:imported-modules>: Remove (guix build copy-build-system).
<#:parallel-build?>: Remove specification redundant with default.
[inputs]: Remove libaio, qtwayland, wayland; Add cpuinfo, fast-float, fmt-11,
libzip, rapidjson, soundtouch.
[native-inputs]: Add googletest, vulkan-memory-allocator.
[license]: Add licenses for remaining vendored libraries.

Change-Id: I17c064d2a6cf4c288cb50dfa21fda9329709afee
Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
1 files changed, 107 insertions(+), 35 deletions(-)

M gnu/packages/emulators.scm
M gnu/packages/emulators.scm => gnu/packages/emulators.scm +107 -35
@@ 104,6 104,7 @@
  #:use-module (gnu packages ncurses)
  #:use-module (gnu packages networking)
  #:use-module (gnu packages ninja)
  #:use-module (gnu packages parallel)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages pretty-print)
  #:use-module (gnu packages pulseaudio)


@@ 3649,27 3650,88 @@ de-interlacing patches for use with PCSX2.")
       (file-name (git-file-name name version))
       (sha256
        (base32 "0nr53cjifqwnz3icxsj01yd3aw1vfsfxga4zz5zi8aqr175mvq27"))
       (modules '((guix build utils)))
       (modules '((guix build utils)
                  (ice-9 ftw)
                  (srfi srfi-26)))
       (snippet
        #~(begin
            (substitute* "pcsx2/Pcsx2Config.cpp"
	      (("Path::Canonicalize\\(Path::GetDirectory\\(program_path\\)\\);")
	       "Path::Canonicalize(
((std::string)Path::GetDirectory(program_path)).append(\"/../share/\"));"))
            (delete-file-recursively "3rdparty/d3d12memalloc")
            (delete-file-recursively "3rdparty/winpixeventruntime")
            (delete-file-recursively "3rdparty/winwil")))))
            (substitute* "cmake/Pcsx2Utils.cmake"
              (("(PCSX2_GIT_REV \")Unknown" _ prefix)
               (string-append prefix #$version "-guix")))
            (delete-file "3rdparty/include/Packet32.h") ;"not open source"
            ;; XXX: 'delete-all-but' is copied from the turbovnc package.
            (define (delete-all-but directory . preserve)
              (with-directory-excursion directory
                (let* ((pred (negate (cut member <>
                                          (cons* "." ".." preserve))))
                       (items (scandir "." pred)))
                  (for-each (cut delete-file-recursively <>) items))))
            (delete-all-but
             "3rdparty"
             ;; asl2.0 and cc0
             "glad"                     ;Is tailored.
             ;; bsd-3
             "libchdr"                  ;Not packaged in guix.
             "vixl"                     ;Not packaged in guix.
             "xbyak"                    ;Just includes.
             ;; bsd-4 (pcap) and bsd-2 (xxhash)
             "include"                  ;Just includes.
             ;; expat
             "ccc"                      ;Is tailored.
             "cubeb"                    ;Is tailored.
             "discord-rpc"              ;Not packaged in guix.
             "imgui"                    ;Is tailored.
             "rapidyaml"                ;Not packaged in guix.
             "rcheevos"                 ;Does not have a linkable binary.
             "simpleini"                ;Is tailored (GetKeyCount).
             "zydis"                    ;Could not link.
             ;; gpl2+
             "freesurround"             ;Unclear what upstream is.
             ;; lgpl2.0+
             "demangler"                ;Is tailored.
             ;; public-domain
             "lzma"                     ;Does not have a linkable library.
             ;; silofl1.1
             "promptfont")              ;Unclear what upstream is.
            (substitute* "CMakeLists.txt"
              (("add_subdirectory\\(3rdparty/googletest)")
               "find_package(GTest REQUIRED)"))
            (substitute* "cmake/SearchForStuff.cmake"
              (("add_subdirectory\\(3rdparty/cpuinfo EXCLUDE_FROM_ALL\\)")
               "find_package(cpuinfo REQUIRED)")
              (("disable_compiler_warnings_for_target\\(cpuinfo\\)") "")
              (("add_subdirectory\\(3rdparty/fast_float EXCLUDE_FROM_ALL\\)")
               "find_package(FastFloat REQUIRED)")
              (("add_subdirectory\\(3rdparty/fmt EXCLUDE_FROM_ALL\\)")
               "find_package(fmt REQUIRED)")
              (("disable_compiler_warnings_for_target\\(fmt\\)") "")
              (("add_subdirectory\\(3rdparty/libzip EXCLUDE_FROM_ALL\\)")
               "find_package(libzip REQUIRED)")
              (("add_subdirectory\\(3rdparty/rapidjson EXCLUDE_FROM_ALL\\)")
               "find_package(RapidJSON REQUIRED)")
              (("add_subdirectory\\(3rdparty/soundtouch EXCLUDE_FROM_ALL\\)")
               "pkg_check_modules(SoundTouch REQUIRED soundtouch)")
              (("add_subdirectory\\(3rdparty/vulkan EXCLUDE_FROM_ALL\\)")
               "find_package(VulkanMemoryAllocator REQUIRED)
find_package(VulkanHeaders REQUIRED)"))
            ;Specifically, line 213.
            (substitute* "common/CMakeLists.txt"
              (("fast_float") ""))
            (substitute* "pcsx2/CMakeLists.txt"
              (("SoundTouch::SoundTouch") "SoundTouch")
              (("\
target_link_libraries\\(PCSX2_FLAGS INTERFACE vulkan-headers\\)") ""))
            (substitute* "pcsx2/Host/AudioStream.cpp"
              (("SoundTouch.h") "soundtouch/SoundTouch.h"))))))
    (build-system cmake-build-system)
    (arguments
     (list
      #:parallel-build? #t
      #:configure-flags
      #~(list "-DCMAKE_C_COMPILER=clang"
              "-DCMAKE_CXX_COMPILER=clang++"
              "-DCMAKE_PREFIX_PATH=\"$PWD/deps\""
              "-GNinja")
      #:imported-modules `((guix build copy-build-system)
                           ,@%cmake-build-system-modules)
              "-GNinja"
              "-DPACKAGE_MODE=ON"
              "-DUSE_LINKED_FFMPEG=ON")
      #:phases
      #~(modify-phases %standard-phases
          (replace 'build


@@ 3678,52 3740,52 @@ de-interlacing patches for use with PCSX2.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests? (invoke "ninja" "unittests"))))
          (replace 'install
            (lambda* args
              (apply
               (assoc-ref (@ (guix build copy-build-system) %standard-phases)
                          'install)
               #:install-plan
               '(("bin/pcsx2-qt" "bin/")
                 ("bin/resources" "share/")
                 ("bin/translations" "share/")
                 ("../source/.github/workflows/scripts/linux/pcsx2-qt.desktop"
                  "share/applications/"))
               args)))
          (add-after 'install 'install-patches
            (lambda* (#:key inputs #:allow-other-keys)
              (install-file (search-input-file %build-inputs "/patches.zip")
                            (string-append #$output "/share/resources")))))))
            (lambda _
              (symlink
               (search-input-file %build-inputs "/patches.zip")
               (string-append
                #$output "/share/PCSX2/resources/patches.zip")))))))
    (inputs (list (module-ref
                   (resolve-interface '(gnu packages debug)) 'libbacktrace)
                  `(,zstd-1.5.7 "lib")
                  cpuinfo
                  curl
                  dbus
                  eudev
                  fast-float
                  ffmpeg
                  freetype
                  fmt-11
                  kddockwidgets
                  libaio
                  libjpeg-turbo
                  libpcap
                  libpng-next
                  libwebp
                  libxi
                  libxrandr
                  libzip
                  lz4
                  pcsx2-patches
                  plutovg
                  plutosvg
                  plutovg
                  qtbase
                  qtdeclarative
                  qtsvg
                  qttools
                  qtwayland
                  rapidjson
                  sdl3
                  shaderc
                  soundtouch
                  vulkan-headers
                  wayland
                  libxi))
    (native-inputs (list clang-17 extra-cmake-modules ninja pkg-config))
                  wayland))
    (native-inputs
     (list clang-17
           extra-cmake-modules
           googletest
           ninja
           pkg-config
           vulkan-memory-allocator))
    (home-page "https://pcsx2.net")
    (synopsis "PlayStation 2 (PS2) emulator")
    (description


@@ 3732,7 3794,17 @@ emulator.  Its purpose is to emulate the PS2's hardware, using a combination
of MIPS CPU interpreters, recompilers and a virtual machine which manages
hardware states and PS2 system memory.  This allows you to play PS2 games on
your PC, with many additional features and benefits.")
    (license license:gpl3+)))
    (license (list license:gpl3+        ;main code
                   ;; code in 3rdparty/
                   license:asl2.0
                   license:bsd-2
                   license:bsd-3
                   license:bsd-4
                   license:cc0
                   license:expat
                   license:lgpl2.0+
                   license:public-domain
                   license:silofl1.1))))

(define-public rpcs3
  ;; NB: When updating to a new release, don't forget to check if any more