unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes.
@ 2024-10-11 22:07 Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 1/5] gnu: sameboy: Update to 0.16.7 Maxim Cournoyer
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-11 22:07 UTC (permalink / raw)
  To: 73754
  Cc: Maxim Cournoyer, Adam Faiz, Liliana Marie Prikler,
	宋文武

This builds SameBoy as a shared library then uses it to build jg-bsnes,
removing its bundled source copy.

Maxim Cournoyer (5):
  gnu: sameboy: Update to 0.16.7.
  gnu: sameboy: Use gexps.
  gnu: Add cppp.
  gnu: sameboy: Install shared library.
  gnu: jg-bsnes: Unbundle SameBoy.

 gnu/local.mk                                  |   3 +
 gnu/packages/c.scm                            |  36 +-
 gnu/packages/emulators.scm                    |  50 ++-
 gnu/packages/patches/cppp-build-fixes.patch   |  17 +
 .../patches/jg-bsnes-unbundle-sameboy.patch   | 101 ++++++
 gnu/packages/patches/sameboy-shared-lib.patch | 317 ++++++++++++++++++
 6 files changed, 496 insertions(+), 28 deletions(-)
 create mode 100644 gnu/packages/patches/cppp-build-fixes.patch
 create mode 100644 gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch
 create mode 100644 gnu/packages/patches/sameboy-shared-lib.patch


base-commit: d44beb9b4ad836781928a0c5667e94c0d6df13f0
-- 
2.46.0





^ permalink raw reply	[flat|nested] 6+ messages in thread

* [bug#73754] [PATCH 1/5] gnu: sameboy: Update to 0.16.7.
  2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
@ 2024-10-12  4:28 ` Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 2/5] gnu: sameboy: Use gexps Maxim Cournoyer
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-12  4:28 UTC (permalink / raw)
  To: 73754
  Cc: Maxim Cournoyer, Maxim Cournoyer, Adam Faiz,
	Liliana Marie Prikler, 宋文武

* gnu/packages/emulators.scm (sameboy): Update to 0.16.7.

Change-Id: I7283354e0d24a16cd1c6e6a6926616c263ad0526
---
 gnu/packages/emulators.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index d1a9ab5b50..a2a1285d77 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -802,7 +802,7 @@ (define-public mgba
 (define-public sameboy
   (package
     (name "sameboy")
-    (version "0.16.3")
+    (version "0.16.7")
     (source
      (origin
        (method git-fetch)
@@ -811,7 +811,7 @@ (define-public sameboy
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1jdjg59vzzkbi3c3qaxpsxqx955sb86cd3kcypb0nhjxbnwac1di"))))
+        (base32 "1lab1x156ghfcjcy31rv731wi2b5h56z35n02h4i5pj8wjcf2jr9"))))
     (build-system gnu-build-system)
     (native-inputs
      (list rgbds pkg-config))
-- 
2.46.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#73754] [PATCH 2/5] gnu: sameboy: Use gexps.
  2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 1/5] gnu: sameboy: Update to 0.16.7 Maxim Cournoyer
@ 2024-10-12  4:28 ` Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 3/5] gnu: Add cppp Maxim Cournoyer
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-12  4:28 UTC (permalink / raw)
  To: 73754
  Cc: Maxim Cournoyer, Maxim Cournoyer, Adam Faiz,
	Liliana Marie Prikler, 宋文武

* gnu/packages/emulators.scm (sameboy) [arguments]: Use gexps.

Change-Id: Ic5c056f23e94c17072460e92a74663486cfe9e5d
---
 gnu/packages/emulators.scm | 40 +++++++++++++++++---------------------
 1 file changed, 18 insertions(+), 22 deletions(-)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index a2a1285d77..b7dff958b7 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -813,29 +813,25 @@ (define-public sameboy
        (sha256
         (base32 "1lab1x156ghfcjcy31rv731wi2b5h56z35n02h4i5pj8wjcf2jr9"))))
     (build-system gnu-build-system)
-    (native-inputs
-     (list rgbds pkg-config))
-    (inputs
-     (list sdl2))
     (arguments
-     `(#:tests? #f                      ; There are no tests
-       #:make-flags `(,(string-append "CC=" ,(cc-for-target))
-                      "NATIVE_CC=gcc" "CONF=release"
-                      ,(string-append "DATA_DIR="
-                                      (assoc-ref %outputs "out")
-                                      "/share/sameboy/"))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (data (string-append out "/share/sameboy/")))
-               (with-directory-excursion "build/bin/SDL"
-                 (install-file "sameboy" bin)
-                 (delete-file "sameboy")
-                 (copy-recursively "." data))))))))
+     (list
+      #:tests? #f                       ; There are no tests
+      #:make-flags #~(list #$(string-append "CC=" (cc-for-target))
+                           "NATIVE_CC=gcc" "CONF=release"
+                           (string-append "DATA_DIR=" #$output
+                                          "/share/sameboy/"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (replace 'install
+            (lambda _
+              (with-directory-excursion "build/bin/SDL"
+                (install-file "sameboy" (string-append #$output "/bin"))
+                (delete-file "sameboy")
+                (copy-recursively
+                 "." (string-append #$output "/share/sameboy/"))))))))
+    (inputs (list sdl2))
+    (native-inputs (list rgbds pkg-config))
     (home-page "https://sameboy.github.io/")
     (synopsis "Accurate Game Boy, Game Boy Color and Super Game Boy emulator")
     (description "SameBoy is a user friendly Game Boy, Game Boy Color
-- 
2.46.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#73754] [PATCH 3/5] gnu: Add cppp.
  2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 1/5] gnu: sameboy: Update to 0.16.7 Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 2/5] gnu: sameboy: Use gexps Maxim Cournoyer
@ 2024-10-12  4:28 ` Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 4/5] gnu: sameboy: Install shared library Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 5/5] gnu: jg-bsnes: Unbundle SameBoy Maxim Cournoyer
  4 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-12  4:28 UTC (permalink / raw)
  To: 73754; +Cc: Maxim Cournoyer, Maxim Cournoyer

* gnu/packages/c.scm (cppp): New variable.
* gnu/packages/patches/cppp-build-fixes.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: I7dc2215f4e57aec6356afa82d5740f78a64d3bab
---
 gnu/local.mk                                |  1 +
 gnu/packages/c.scm                          | 36 ++++++++++++++++++++-
 gnu/packages/patches/cppp-build-fixes.patch | 17 ++++++++++
 3 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/cppp-build-fixes.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 05a8716063..e08ecc744c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1105,6 +1105,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/coreutils-gnulib-tests.patch		\
   %D%/packages/patches/cppcheck-disable-char-signedness-test.patch	\
   %D%/packages/patches/cppdap-add-CPPDAP_USE_EXTERNAL_GTEST_PACKAGE.patch\
+  %D%/packages/patches/cppp-build-fixes.patch			\
   %D%/packages/patches/cpulimit-with-glib-2.32.patch		\
   %D%/packages/patches/crawl-upgrade-saves.patch		\
   %D%/packages/patches/crc32c-unbundle-googletest.patch		\
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 7c93676f0c..01bfb7eec5 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
-;;; Copyright © 2020, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022, 2023, 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 David Dashyan <mail@davie.li>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
@@ -140,6 +140,40 @@ (define-public c-rrb
 slicing.")
      (license license:boost1.0))))
 
+(define-public cppp
+  ;; No release; use the latest commit.
+  (let ((commit "49ccb2162329c6619ab876c6d5765d9d0ac24f61")
+        (revision "0"))
+    (package
+      (name "cppp")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~breadbox/cppp")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0r3vin9p1ql4ddbszwsvx493h6n0knlgxzpkahdb4a4df1xpqr1s"))
+                (patches (search-patches "cppp-build-fixes.patch"))))
+      (arguments
+       (list
+        #:make-flags #~(list (string-append "prefix=" #$output)
+                             #$(string-append "CC=" (cc-for-target)))
+        #:phases #~(modify-phases %standard-phases
+                     (delete 'configure)))) ;no configure script
+      (build-system gnu-build-system)
+      (home-page "https://www.muppetlabs.com/~breadbox/software/cppp.html")
+      (synopsis "Partial preprocessor for C")
+      (description "@command{cppp} is a partial preprocessor for C/C++ code.
+It implements enough of the C preprocessor to identify the preprocessor
+statements @code{#if}, @code{#ifdef}, et al., and applies their effects for
+the identifiers that are specified on the command-line.  Preprocessor
+statements using identifiers not specified by the user are passed through
+without modification; no other part of the input is altered.")
+      (license license:gpl2+))))
+
 (define-public cproc
   (let ((commit "70fe9ef1810cc6c05bde9eb0970363c35fa7e802")
         (revision "1"))
diff --git a/gnu/packages/patches/cppp-build-fixes.patch b/gnu/packages/patches/cppp-build-fixes.patch
new file mode 100644
index 0000000000..c46be950d8
--- /dev/null
+++ b/gnu/packages/patches/cppp-build-fixes.patch
@@ -0,0 +1,17 @@
+Upstream-status: Submitted to the author via email.
+
+diff --git a/Makefile b/Makefile
+index b4f404d..cbf7cae 100644
+--- a/Makefile
++++ b/Makefile
+@@ -28,8 +28,8 @@ ppproc.o  : ppproc.c ppproc.h gen.h types.h error.h symset.h mstr.h \
+ cppp.o    : cppp.c gen.h types.h unixisms.h error.h symset.h ppproc.h
+ 
+ install:
+-	cp ./cppp $(prefix)/bin/.
+-	cp ./cppp.1 $(prefix)/share/man/man1/.
++	install -D ./cppp $(prefix)/bin/cppp
++	install -D ./cppp.1 $(prefix)/share/man/man1/cppp.1
+ 
+ test: cppp
+ 	./tests/testall
-- 
2.46.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#73754] [PATCH 4/5] gnu: sameboy: Install shared library.
  2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
                   ` (2 preceding siblings ...)
  2024-10-12  4:28 ` [bug#73754] [PATCH 3/5] gnu: Add cppp Maxim Cournoyer
@ 2024-10-12  4:28 ` Maxim Cournoyer
  2024-10-12  4:28 ` [bug#73754] [PATCH 5/5] gnu: jg-bsnes: Unbundle SameBoy Maxim Cournoyer
  4 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-12  4:28 UTC (permalink / raw)
  To: 73754
  Cc: Maxim Cournoyer, Maxim Cournoyer, Adam Faiz,
	Liliana Marie Prikler, 宋文武

* gnu/packages/patches/sameboy-shared-lib.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/emulators.scm (sameboy) [source]: Apply it.
[arguments] <make-flags>: Replace DATA_DIR with PREFIX.  Add LIBRARY=shared
and FREEDESKTOP=1.
<phases>: Delete install phase override.
[native-inputs]: Add cppp and libtool.

Change-Id: Ieef8434ada5a4e7ba3d726efc9710a9c2c973040
---
 gnu/local.mk                                  |   1 +
 gnu/packages/emulators.scm                    |  23 +-
 gnu/packages/patches/sameboy-shared-lib.patch | 317 ++++++++++++++++++
 3 files changed, 328 insertions(+), 13 deletions(-)
 create mode 100644 gnu/packages/patches/sameboy-shared-lib.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index e08ecc744c..544cf36f04 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2130,6 +2130,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/s7-flint-3.patch                      	\
   %D%/packages/patches/sajson-for-gemmi-numbers-as-strings.patch	\
   %D%/packages/patches/sajson-build-with-gcc10.patch		\
+  %D%/packages/patches/sameboy-shared-lib.patch			\
   %D%/packages/patches/sbc-fix-build-non-x86.patch		\
   %D%/packages/patches/sbcl-aserve-add-HTML-5-elements.patch	\
   %D%/packages/patches/sbcl-aserve-fix-rfe12668.patch	\
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index b7dff958b7..3df1b94506 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -60,6 +60,7 @@ (define-module (gnu packages emulators)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
@@ -811,27 +812,23 @@ (define-public sameboy
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lab1x156ghfcjcy31rv731wi2b5h56z35n02h4i5pj8wjcf2jr9"))))
+        (base32 "1lab1x156ghfcjcy31rv731wi2b5h56z35n02h4i5pj8wjcf2jr9"))
+       (patches (search-patches "sameboy-shared-lib.patch"))))
     (build-system gnu-build-system)
     (arguments
      (list
       #:tests? #f                       ; There are no tests
       #:make-flags #~(list #$(string-append "CC=" (cc-for-target))
-                           "NATIVE_CC=gcc" "CONF=release"
-                           (string-append "DATA_DIR=" #$output
-                                          "/share/sameboy/"))
+                           "FREEDESKTOP=1" ;for install target
+                           "LIBRARY=shared"
+                           "NATIVE_CC=gcc"
+                           "CONF=release"
+                           (string-append "PREFIX=" #$output))
       #:phases
       #~(modify-phases %standard-phases
-          (delete 'configure)
-          (replace 'install
-            (lambda _
-              (with-directory-excursion "build/bin/SDL"
-                (install-file "sameboy" (string-append #$output "/bin"))
-                (delete-file "sameboy")
-                (copy-recursively
-                 "." (string-append #$output "/share/sameboy/"))))))))
+          (delete 'configure))))
+    (native-inputs (list cppp libtool pkg-config rgbds))
     (inputs (list sdl2))
-    (native-inputs (list rgbds pkg-config))
     (home-page "https://sameboy.github.io/")
     (synopsis "Accurate Game Boy, Game Boy Color and Super Game Boy emulator")
     (description "SameBoy is a user friendly Game Boy, Game Boy Color
diff --git a/gnu/packages/patches/sameboy-shared-lib.patch b/gnu/packages/patches/sameboy-shared-lib.patch
new file mode 100644
index 0000000000..a18d4dec76
--- /dev/null
+++ b/gnu/packages/patches/sameboy-shared-lib.patch
@@ -0,0 +1,317 @@
+Upstream-status: https://github.com/LIJI32/SameBoy/pull/662
+
+diff --git a/Makefile b/Makefile
+index a1bce3e..cea556e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,14 @@
+ # Make hacks
+ .INTERMEDIATE:
+ 
++# Library versioning, following libtool's 'version-info' scheme (see:
++# info '(libtool) Libtool versioning' or
++# https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html).
++LT_CURRENT := 0
++LT_REVISION := 0
++LT_AGE := 0
++LT_VERSION_INFO := $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
++
+ # Set target, configuration, version and destination folders
+ 
+ PLATFORM := $(shell uname -s)
+@@ -33,11 +41,47 @@ else
+ DEFAULT := sdl
+ endif
+ 
++ifneq ($(LIBRARY),)
++DEFAULT += lib
++endif
++
++# Select whether libtool should build/link for static vs shared
++# libraries, or both.
++ifneq ($(LIBRARY),)
++ifeq ($(LIBRARY), shared)
++LT_MODE_ARG := -shared
++else ifeq ($(LIBRARY), static)
++LT_MODE_ARG := -static
++else
++# Build both static and shared libraries.
++LT_MODE_ARG :=
++endif
++endif
++
+ NULL := /dev/null
+ ifeq ($(PLATFORM),windows32)
+ NULL := NUL
+ endif
+ 
++# Strip a given prefix from a string.
++# arg1: The prefix to strip.
++# arg2: The text containing the prefix.
++# Return $text with $prefix stripped, else nothing.
++define strip_prefix =
++$(let stripped,$(subst $(1),,$(2)),$\
++  $(shell test "$(1)$(stripped)" = "$(2)" && echo $(stripped)))
++endef
++
++# Simplify a path for use with pkg-config, by replacing $prefix with '${prefix}'
++# arg1: prefix, e.g. an installation prefix, such as /usr/local.
++# arg2: pkgdir, e.g. a path such as $datadir, $bindir, etc.
++# arg3: pkg-config variable name, e.g. 'prefix' or 'exec_prefix'.
++#       Defaults to 'prefix'.
++define simplify_pkgconf_dir =
++$(let stripped,$(call strip_prefix,$(1),$(2)),$\
++  $(if stripped,$${$(or $(3),prefix)}$(stripped),$(2)))
++endef
++
+ ifneq ($(shell which xdg-open 2> $(NULL))$(FREEDESKTOP),)
+ # Running on an FreeDesktop environment, configure for (optional) installation
+ DESTDIR ?= 
+@@ -46,6 +90,22 @@ DATA_DIR ?= $(PREFIX)/share/sameboy/
+ FREEDESKTOP ?= true
+ endif
+ 
++# Autoconf-style conventionally named variables.
++prefix ?= $(PREFIX)
++exec_prefix ?= $(prefix)
++includedir ?= $(prefix)/include
++bindir ?= $(exec_prefix)/bin
++libdir ?= $(exec_prefix)/lib
++datadir ?= $(prefix)/share
++
++# Prettified variants for use in the pkg-config file.
++override PKGCONF_EXEC_PREFIX = \
++	$(call simplify_pkgconf_dir,$(prefix),$(exec_prefix))
++override PKGCONF_INCLUDEDIR = \
++	$(call simplify_pkgconf_dir,$(prefix),$(includedir))
++override PKGCONF_LIBDIR = \
++	$(call simplify_pkgconf_dir,$(exec_prefix),$(libdir),exec_prefix)
++
+ default: $(DEFAULT)
+ 
+ ifeq ($(MAKECMDGOALS),)
+@@ -101,6 +161,9 @@ BIN := build/bin
+ OBJ := build/obj
+ INC := build/include/sameboy
+ LIBDIR := build/lib
++PKGCONF_DIR := $(LIBDIR)/pkgconfig
++LIBTOOL_LIBRARY := $(LIBDIR)/libsameboy.la
++PKGCONF_FILE := $(PKGCONF_DIR)/sameboy.pc
+ 
+ BOOTROMS_DIR ?= $(BIN)/BootROMs
+ 
+@@ -125,6 +188,26 @@ PKG_CONFIG := pkg-config
+ endif
+ endif
+ 
++# Libtool makes it easy to correctly build shared libraries with
++# version info on both MacOS and GNU/Linux; require it if building
++# libraries.
++ifneq ($(LIBRARY),)
++ifneq (, $(shell command -v libtool 2> $(NULL)))
++LIBTOOL := libtool
++LIBTOOL_CC := $(LIBTOOL) --tag=CC --mode=compile $(CC) -c
++LIBTOOL_LD := $(LIBTOOL) --tag=CC --mode=link $(CC) \
++	-version-info $(LT_VERSION_INFO) $(LT_MODE_ARG)
++else
++$(error "please install libtool")
++endif
++else
++# Not building libraries.
++LIBTOOL :=
++LIBTOOL_CC := $(CC)
++LIBTOOL_LD :=
++endif
++
++
+ ifeq ($(PLATFORM),windows32)
+ # To force use of the Unix version instead of the Windows version
+ MKDIR := $(shell which mkdir)
+@@ -276,11 +359,6 @@ LDFLAGS += -Wl,/NODEFAULTLIB:libcmt.lib
+ endif
+ endif
+ 
+-LIBFLAGS := -nostdlib -Wl,-r
+-ifneq ($(PLATFORM),Darwin)
+-LIBFLAGS += -no-pie
+-endif
+-
+ ifeq ($(CONF),debug)
+ CFLAGS += -g
+ else ifeq ($(CONF), release)
+@@ -336,11 +414,14 @@ tester: $(TESTER_TARGET) $(BIN)/tester/dmg_boot.bin $(BIN)/tester/cgb_boot.bin $
+ _ios: $(BIN)/SameBoy-iOS.app $(OBJ)/installer
+ ios-ipa: $(BIN)/SameBoy-iOS.ipa
+ ios-deb: $(BIN)/SameBoy-iOS.deb
++
++# Libraries.
+ ifeq ($(PLATFORM),windows32)
+ lib: lib-unsupported
+-else
+-lib: $(LIBDIR)/libsameboy.o $(LIBDIR)/libsameboy.a
++else ifneq ($(LIBRARY),)
++lib: $(LIBTOOL_LIBRARY) $(PKGCONF_FILE)
+ endif
++
+ all: sdl tester libretro lib
+ ifeq ($(PLATFORM),Darwin)
+ all: cocoa ios-ipa ios-deb
+@@ -361,6 +442,10 @@ CORE_SOURCES += $(shell ls Windows/*.c)
+ endif
+ 
+ CORE_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(CORE_SOURCES))
++# Libtool PIC objects are created along the .o variants, when building
++# a shared library.
++CORE_LOBJECTS := $(patsubst %,$(OBJ)/%.lo,$(CORE_SOURCES))
++$(CORE_LOBJECTS): $(CORE_OBJECTS)
+ PUBLIC_HEADERS := $(patsubst Core/%,$(INC)/%,$(CORE_HEADERS))
+ COCOA_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(COCOA_SOURCES))
+ IOS_OBJECTS := $(patsubst %,$(OBJ)/%.o,$(IOS_SOURCES))
+@@ -404,30 +489,30 @@ $(OBJ)/%.dep: %
+ 
+ $(OBJ)/Core/%.c.o: Core/%.c
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FAT_FLAGS) -DGB_INTERNAL -c $< -o $@
++	$(LIBTOOL_CC) $(CFLAGS) $(FAT_FLAGS) -DGB_INTERNAL -c $< -o $@
+ 
+ $(OBJ)/SDL/%.c.o: SDL/%.c
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
++	$(LIBTOOL_CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
+ 
+ $(OBJ)/OpenDialog/%.c.o: OpenDialog/%.c
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
++	$(LIBTOOL_CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(SDL_CFLAGS) $(GL_CFLAGS) -c $< -o $@
+ 
+ 
+ $(OBJ)/%.c.o: %.c
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) -c $< -o $@
++	$(LIBTOOL_CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) -c $< -o $@
+ 	
+ # HexFiend requires more flags
+ $(OBJ)/HexFiend/%.m.o: HexFiend/%.m
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ -fno-objc-arc -include HexFiend/HexFiend_2_Framework_Prefix.pch
++	$(LIBTOOL_CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@ -fno-objc-arc -include HexFiend/HexFiend_2_Framework_Prefix.pch
+ 	
+ $(OBJ)/%.m.o: %.m
+ 	-@$(MKDIR) -p $(dir $@)
+-	$(CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@
+-    
++	$(LIBTOOL_CC) $(CFLAGS) $(FRONTEND_CFLAGS) $(FAT_FLAGS) $(OCFLAGS) -c $< -o $@
++
+ # iOS Port
+ 
+ $(BIN)/SameBoy-iOS.app: $(BIN)/SameBoy-iOS.app/SameBoy \
+@@ -653,15 +738,28 @@ libretro:
+ # Does not install mimetype icons because FreeDesktop is cursed abomination with no right to exist.
+ # If you somehow find a reasonable way to make associate an icon with an extension in this dumpster
+ # fire of a desktop environment, open an issue or a pull request
++# Install for Linux, and other FreeDesktop platforms.
++install_headers = install -Dm 644 -t $(DESTDIR)$(includedir)/sameboy $(INC)/*
++install_pkgconf_file = install -Dm 644 -t $(DESTDIR)$(libdir)/pkgconfig $(PKGCONF_FILE)
++
+ ifneq ($(FREEDESKTOP),)
+ ICON_NAMES := apps/sameboy mimetypes/x-gameboy-rom mimetypes/x-gameboy-color-rom
+ ICON_SIZES := 16x16 32x32 64x64 128x128 256x256 512x512
+ ICONS := $(foreach name,$(ICON_NAMES), $(foreach size,$(ICON_SIZES),$(DESTDIR)$(PREFIX)/share/icons/hicolor/$(size)/$(name).png))
++ifneq ($(LIBRARY),)
++install: lib pkgconf
++endif
++
+ install: sdl $(DESTDIR)$(PREFIX)/share/mime/packages/sameboy.xml $(ICONS) FreeDesktop/sameboy.desktop
+ 	-@$(MKDIR) -p $(dir $(DESTDIR)$(PREFIX))
+ 	mkdir -p $(DESTDIR)$(DATA_DIR)/ $(DESTDIR)$(PREFIX)/bin/
+ 	cp -rf $(BIN)/SDL/* $(DESTDIR)$(DATA_DIR)/
+ 	mv $(DESTDIR)$(DATA_DIR)/sameboy $(DESTDIR)$(PREFIX)/bin/sameboy
++ifneq ($(LIBRARY),)
++	$(install_headers)
++	$(install_pkgconf_file)
++	$(LIBTOOL) --mode=install install -D $(LIBTOOL_LIBRARY) $(libdir)/libsameboy.la
++endif
+ ifeq ($(DESTDIR),)
+ 	-update-mime-database -n $(PREFIX)/share/mime
+ 	-xdg-desktop-menu install --novendor --mode system FreeDesktop/sameboy.desktop
+@@ -727,20 +825,23 @@ $(OBJ)/control.tar.gz: iOS/deb-postinst iOS/deb-prerm iOS/deb-control
+ $(OBJ)/debian-binary:
+ 	-@$(MKDIR) -p $(dir $@)
+ 	echo 2.0 > $@
+-    
+-$(LIBDIR)/libsameboy.o: $(CORE_OBJECTS)
++
++# Link library objects with libtool.
++$(LIBTOOL_LIBRARY): $(CORE_LOBJECTS)
+ 	-@$(MKDIR) -p $(dir $@)
+-	@# This is a somewhat simple hack to force Clang and GCC to build a native object file out of one or many LTO objects
+-	echo "static const char __attribute__((used)) x=0;"| $(CC) $(filter-out -flto,$(CFLAGS)) -c -x c - -o $(OBJ)/lto_hack.o
+-	@# And this is a somewhat complicated hack to invoke the correct LTO-enabled LD command in a mostly cross-platform nature
+-	$(CC) $(FAT_FLAGS) $(CFLAGS) $(LIBFLAGS) $^ $(OBJ)/lto_hack.o -o $@
+-	-@rm $(OBJ)/lto_hack.o
+-    
+-$(LIBDIR)/libsameboy.a: $(LIBDIR)/libsameboy.o
++	$(LIBTOOL_LD) -rpath $(libdir) $^ -o $@
++
++$(PKGCONF_FILE): sameboy.pc.in
+ 	-@$(MKDIR) -p $(dir $@)
+ 	-@rm -f $@
+-	ar -crs $@ $^
+-	
++	sed -e 's,@prefix@,$(prefix),' \
++	 -e 's/@version@/$(VERSION)/' \
++	 -e 's,@exec_prefix@,$(PKGCONF_EXEC_PREFIX),' \
++	 -e 's,@includedir@,$(PKGCONF_INCLUDEDIR),' \
++	 -e 's,@libdir@,$(PKGCONF_LIBDIR),' $< > $@
++
++pkgconf: $(PKGCONF_FILE)
++
+ $(INC)/%.h: Core/%.h
+ 	-@$(MKDIR) -p $(dir $@)
+ 	-@# CPPP doesn't like multibyte characters, so we replace the single quote character before processing so it doesn't complain
+@@ -754,4 +855,4 @@ lib-unsupported:
+ clean:
+ 	rm -rf build
+ 
+-.PHONY: libretro tester cocoa ios _ios ios-ipa ios-deb liblib-unsupported bootroms
++.PHONY: libretro tester cocoa ios _ios ios-ipa ios-deb lib lib-unsupported bootroms pkgconf
+diff --git a/README.md b/README.md
+index 9c5f8da..e23f2ca 100644
+--- a/README.md
++++ b/README.md
+@@ -53,12 +53,18 @@ On Windows, SameBoy also requires:
+ To compile, simply run `make`. The targets are:
+  * `cocoa` (Default for macOS)
+  * `sdl` (Default for everything else)
+- * `lib` (Creates libsameboy.o and libsameboy.a for statically linking SameBoy, as well as a headers directory with corresponding headers; currently not supported on Windows due to linker limitations)
++ * `lib` (Creates libsameboy.o, libsameboy.a and libsameboy.so for linking SameBoy, as well as a headers directory with corresponding headers; currently not supported on Windows due to linker limitations)
+  * `ios` (Plain iOS .app bundle), `ios-ipa` (iOS IPA archive for side-loading), `ios-deb` (iOS deb package for jailbroken devices)
+  * `libretro`
+  * `bootroms`
+  * `tester` 
+ 
++For convenience, when installing the static and shared libraries is
++desired, you can specify the LIBRARY=1 make variable to have the
++libraries built as part of the default target, as well as installed,
++along the headers. Alternatively, `LIBRARY=shared` will install just
++the shared library, while `LIBRARY=static` only the static one.
++
+ You may also specify `CONF=debug` (default), `CONF=release`, `CONF=native_release` or `CONF=fat_release`  to control optimization, symbols and multi-architectures. `native_release` is faster than `release`, but is optimized to the host's CPU and therefore is not portable. `fat_release` is exclusive to macOS and builds x86-64 and ARM64 fat binaries; this requires using a recent enough `clang` and macOS SDK using `xcode-select`, or setting them explicitly with `CC=` and `SYSROOT=`, respectively. All other configurations will build to your host architecture, except for the iOS targets. You may set `BOOTROMS_DIR=...` to a directory containing precompiled boot ROM files, otherwise the build system will compile and use SameBoy's own boot ROMs.
+ 
+ The SDL port will look for resource files with a path relative to executable and inside the directory specified by the `DATA_DIR` variable. If you are packaging SameBoy, you may wish to override this by setting the `DATA_DIR` variable during compilation to the target path of the directory containing all files (apart from the executable, that's not necessary) from the `build/bin/SDL` directory in the source tree. Make sure the variable ends with a `/` character. On FreeDesktop environments, `DATA_DIR` will default to `/usr/local/share/sameboy/`. `PREFIX` and `DESTDIR` follow their standard usage and default to an empty string an `/usr/local`, respectively
+diff --git a/sameboy.pc.in b/sameboy.pc.in
+new file mode 100644
+index 0000000..dc0ca0b
+--- /dev/null
++++ b/sameboy.pc.in
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++includedir=@includedir@
++libdir=@libdir@
++
++Name: sameboy
++Description: The SameBoy library
++Version: @version@
++Cflags: -I${includedir}/sameboy
++Libs: -L${libdir} -lsameboy
-- 
2.46.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [bug#73754] [PATCH 5/5] gnu: jg-bsnes: Unbundle SameBoy.
  2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
                   ` (3 preceding siblings ...)
  2024-10-12  4:28 ` [bug#73754] [PATCH 4/5] gnu: sameboy: Install shared library Maxim Cournoyer
@ 2024-10-12  4:28 ` Maxim Cournoyer
  4 siblings, 0 replies; 6+ messages in thread
From: Maxim Cournoyer @ 2024-10-12  4:28 UTC (permalink / raw)
  To: 73754
  Cc: Maxim Cournoyer, Maxim Cournoyer, Adam Faiz,
	Liliana Marie Prikler, 宋文武

* gnu/packages/emulators.scm (jg-bsnes) [source]: Delete deps/gb in snippet.
<patches>: Apply unbundling patch.
[make-flags]: Add USE_VENDORED_SAMEBOY=0 flag.
[inputs]: Add sameboy.
* gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.

Change-Id: I0ce850b366663d88d66becb9121b13c48d4091a3
---
 gnu/local.mk                                  |   1 +
 gnu/packages/emulators.scm                    |   9 +-
 .../patches/jg-bsnes-unbundle-sameboy.patch   | 101 ++++++++++++++++++
 3 files changed, 108 insertions(+), 3 deletions(-)
 create mode 100644 gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 544cf36f04..1eb3c66f85 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1592,6 +1592,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-gcc-compat.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
+  %D%/packages/patches/jg-bsnes-unbundle-sameboy.patch		\
   %D%/packages/patches/john-the-ripper-jumbo-with-gcc-11.patch	\
   %D%/packages/patches/json-c-0.13-CVE-2020-12762.patch		\
   %D%/packages/patches/json-c-0.12-CVE-2020-12762.patch		\
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 3df1b94506..3d4b833c11 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -3291,10 +3291,12 @@ (define-public jg-bsnes
               ;; - snes_spc (also modified by this project)
               (snippet '(begin
                           (use-modules (guix build utils))
+                          (delete-file-recursively "deps/gb")
                           (delete-file-recursively "deps/libsamplerate")))
               (sha256
                (base32
-                "0z1ka4si8vcb0j6ih087cni18vpgfd3qnaw24awycxz23xc0jkdv"))))
+                "0z1ka4si8vcb0j6ih087cni18vpgfd3qnaw24awycxz23xc0jkdv"))
+              (patches (search-patches "jg-bsnes-unbundle-sameboy.patch"))))
     (build-system gnu-build-system)
     (arguments
      (list #:tests? #f                  ;no test suite
@@ -3302,11 +3304,12 @@ (define-public jg-bsnes
            #~(list (string-append "AR=" #$(ar-for-target))
                    (string-append "CC=" #$(cc-for-target))
                    (string-append "CXX=" #$(cxx-for-target))
-                   (string-append "PREFIX=" #$output))
+                   (string-append "PREFIX=" #$output)
+                   (string-append "USE_EXTERNAL_SAMEBOY=1"))
            #:phases #~(modify-phases %standard-phases
                         (delete 'configure)))) ;no configure script
     (native-inputs (list jg-api pkg-config))
-    (inputs (list libsamplerate))
+    (inputs (list libsamplerate sameboy))
     (home-page "https://gitlab.com/jgemu/bsnes")
     (synopsis "Jolly Good Fork of bsnes")
     (description "@code{bsnes-jg} is a cycle accurate emulator for the Super
diff --git a/gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch b/gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch
new file mode 100644
index 0000000000..1047dd4819
--- /dev/null
+++ b/gnu/packages/patches/jg-bsnes-unbundle-sameboy.patch
@@ -0,0 +1,101 @@
+Upstream-status: https://gitlab.com/jgemu/bsnes/-/merge_requests/429
+
+diff --git a/Makefile b/Makefile
+index 7371ff4..a4a8457 100644
+--- a/Makefile
++++ b/Makefile
+@@ -37,6 +37,9 @@ MKDIRS := deps/byuuML \
+ 	src/expansion \
+ 	src/processor
+ 
++# Set to 1 to use a system-provided SameBoy shared library.
++USE_EXTERNAL_SAMEBOY := 0
++
+ # Global symbols
+ # TODO: Darwin export files expect mangled symbols for C++
+ SYMBOLS :=
+@@ -61,6 +64,9 @@ CPPFLAGS_GB := -DGB_INTERNAL -DGB_DISABLE_CHEATS -DGB_DISABLE_DEBUGGER \
+ 	-D_GNU_SOURCE -DGB_VERSION=\"0.16.6\"
+ 
+ INCLUDES += $(CFLAGS_SAMPLERATE) -I$(DEPDIR)
++ifeq ($(USE_EXTERNAL_SAMEBOY), 0)
++INCLUDES += -I$(DEPDIR)/gb
++endif
+ LIBS += $(LIBS_SAMPLERATE)
+ 
+ EXT := cpp
+@@ -81,7 +87,13 @@ WARNINGS_CO := $(WARNINGS_MIN) -Wmissing-prototypes
+ WARNINGS_ICD := $(WARNINGS_CXX)
+ WARNINGS_GB := -Wall -Wno-missing-braces -Wno-multichar -Wno-unused-result
+ 
+-CSRCS := deps/gb/apu.c \
++CSRCS := \
++	deps/libco/libco.c \
++	deps/snes_spc/spc_dsp.c
++
++ifeq ($(USE_EXTERNAL_SAMEBOY), 0)
++CSRCS += \
++	deps/gb/apu.c \
+ 	deps/gb/camera.c \
+ 	deps/gb/display.c \
+ 	deps/gb/gb.c \
+@@ -96,9 +108,16 @@ CSRCS := deps/gb/apu.c \
+ 	deps/gb/sgb.c \
+ 	deps/gb/sm83_cpu.c \
+ 	deps/gb/timing.c \
+-	deps/gb/workboy.c \
+-	deps/libco/libco.c \
+-	deps/snes_spc/spc_dsp.c
++	deps/gb/workboy.c
++else
++CFLAGS_SAMEBOY = $(shell $(PKG_CONFIG) --cflags sameboy || echo fail)
++LIBS_SAMEBOY = $(shell $(PKG_CONFIG) --libs sameboy || echo fail)
++ifeq ($(CFLAGS_SAMEBOY)$(LIBS_SAMEBOY),failfail)
++$(error "pkg-config failure; CFLAGS_SAMEBOY and LIBS_SAMEBOY missing")
++endif
++INCLUDES += $(CFLAGS_SAMEBOY)
++LIBS += $(LIBS_SAMEBOY)
++endif
+ 
+ CXXSRCS := deps/byuuML/byuuML.cpp \
+ 	src/audio.cpp \
+@@ -243,8 +262,11 @@ install-data: all
+ 
+ install-docs::
+ 	cp $(DEPDIR)/byuuML/LICENSE $(DESTDIR)$(DOCDIR)/LICENSE-byuuML
+-	cp $(DEPDIR)/gb/LICENSE $(DESTDIR)$(DOCDIR)/LICENSE-gb
+ 	cp $(DEPDIR)/libco/LICENSE $(DESTDIR)$(DOCDIR)/LICENSE-libco
+ 	cp $(DEPDIR)/snes_spc/LICENSE $(DESTDIR)$(DOCDIR)/LICENSE-spc
++ifeq ($(USE_EXTERNAL_SAMEBOY), 0)
++install-docs::
++	cp $(DEPDIR)/gb/LICENSE $(DESTDIR)$(DOCDIR)/LICENSE-gb
++endif
+ 
+ include $(SOURCEDIR)/mk/rules.mk
+diff --git a/README b/README
+index 3db6823..910c8d5 100644
+--- a/README
++++ b/README
+@@ -30,7 +30,8 @@ Options:
+   ENABLE_HTML - Set to a non-zero value to generate the html documentation.
+   ENABLE_STATIC - Set to a non-zero value to build a static archive.
+   ENABLE_STATIC_JG - Set to a non-zero value to build a static JG archive.
+-  USE_VENDORED_SAMPLERATE - Set non-zero to use vendored libsamplerate
++  USE_VENDORED_SAMPLERATE - Set non-zero to use vendored libsamplerate.
++  USE_EXTERNAL_SAMEBOY - Set non-zero to use system-provided sameboy.
+ 
+ Linux:
+   make
+diff --git a/src/coprocessor/icd.cpp b/src/coprocessor/icd.cpp
+index 2b0fb96..066b63e 100644
+--- a/src/coprocessor/icd.cpp
++++ b/src/coprocessor/icd.cpp
+@@ -28,7 +28,7 @@
+ #include "icd.hpp"
+ 
+ extern "C" {
+-  #include <gb/gb.h>
++  #include <gb.h>
+ }
+ 
+ //warning: the size of this object will be too large due to C++ size rules differing from C rules.
-- 
2.46.0





^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-10-12  4:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-11 22:07 [bug#73754] [PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes Maxim Cournoyer
2024-10-12  4:28 ` [bug#73754] [PATCH 1/5] gnu: sameboy: Update to 0.16.7 Maxim Cournoyer
2024-10-12  4:28 ` [bug#73754] [PATCH 2/5] gnu: sameboy: Use gexps Maxim Cournoyer
2024-10-12  4:28 ` [bug#73754] [PATCH 3/5] gnu: Add cppp Maxim Cournoyer
2024-10-12  4:28 ` [bug#73754] [PATCH 4/5] gnu: sameboy: Install shared library Maxim Cournoyer
2024-10-12  4:28 ` [bug#73754] [PATCH 5/5] gnu: jg-bsnes: Unbundle SameBoy Maxim Cournoyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).