Subject: [bug#68469] [PATCH] gnu: Add melonds.

From: Lilah Tascheter <[email-masked]>
Date: Tue, 16 Jan 2024 01:11:23 -0600

hi!

great patch!! :)
there's a few small issues I found:
* the source hash line is too long, style guide says lines shouldn't
  exceed 80 cols.
* melonds doesn't actually require curl and gnutls. no clue why their
  README says it does. I've verified it compiles without them.
* melonds secretly bundles in pre-compiled DS firmware in
  src/FreeBIOS.h. they do, however, provide source, but our buildscript
  shouldn't rely on bundled blobs.

I took the liberty of attaching an edited patch. hope that's alright!

- lilah

---
 gnu/packages/emulators.scm | 64 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index cde3ee052c..0f7962115d 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2023 Yovan Naumovski <[email-masked]>
 ;;; Copyright © 2023 Hendursaga <[email-masked]>
 ;;; Copyright © 2023 Zheng Junjie <[email-masked]>
+;;; Copyright © 2024 Altadil <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -81,6 +82,7 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
@@ -102,6 +104,7 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages vim)
   #:use-module (gnu packages vulkan)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
@@ -733,6 +736,67 @@ (define-public mednafen
     ;; Main license is GPL2+.  Some parts are BSD-3.
     (license (list license:gpl2+ license:bsd-3))))
 
+(define-public melonds
+  (package
+    (name "melonds")
+    (version "0.9.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/melonDS-emu/melonDS")
+                     (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+                (base32
+                  "0c4hhs5mffj43pa2y18k70q6szc09m8yj0gqw2svszpvpz2n91cz"))))
+    (build-system cmake-build-system)
+    (arguments
+      (list #:tests? #f ; No test target available.
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-before 'configure 'compile-bios
+                  (lambda* (#:key inputs #:allow-other-keys)
+                    (define (as arm arch)
+                      (invoke "arm-none-eabi-gcc"
+                        "-c" "freebios/bios_common.S"
+                        (string-append "-march=armv" arch)
+                        (string-append "-DBIOS_ARM" arm)
+                        "-o" (string-append "bios_arm" arm ".o"))
+                      (invoke "arm-none-eabi-objcopy"
+                        "-O" "binary"
+                        (string-append "bios_arm" arm ".o")
+                        (string-append "bios_arm" arm ".bin")))
+
+                    (as "7" "4t")
+                    (as "9" "5te")
+                    (with-output-to-file "src/FreeBIOS.h"
+                      (lambda ()
+                        (display "#ifndef FREEBIOS_H\n#define FREEBIOS_H\n")
+                        (invoke "xxd" "-i" "bios_arm7.bin")
+                        (invoke "xxd" "-i" "bios_arm9.bin")
+                        (display "#endif\n"))))))))
+    (native-inputs (list (cross-gcc "arm-none-eabi")
+                         (cross-binutils "arm-none-eabi")
+                         extra-cmake-modules
+                         pkg-config
+                         xxd))
+    (inputs (list libarchive
+                  libpcap
+                  libslirp
+                  qtbase-5
+                  qtmultimedia-5
+                  sdl2
+                  wayland
+                  zstd))
+      (synopsis "DS emulator")
+      (description "melonDS is an emulator of the Nintendo DS.  It aims at
+providing fast and accurate emulation.  While it is still a work in progress,
+it has a pretty solid set of features, includind a nearly complete core, a JIT
+recompiler for fast emulation, an OpenGL renderer, joystick support and
+savestates.")
+      (home-page "https://melonds.kuribo64.net/")
+      (license license:gpl3+)))
+
 (define-public mgba
   (package
     (name "mgba")

base-commit: 21f5d20d68e0359f8111ccb936905649c70db9c1
-- 
2.41.0