[PATCH games-team 0/5] Unbundle SameBoy from jg-bsnes.

  • Open
  • quality assurance status badge
Details
One participant
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
normal
M
M
Maxim Cournoyer wrote on 12 Oct 00:07 +0200
(address . guix-patches@gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cover.1728684335.git.maxim.cournoyer@gmail.com
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
M
M
Maxim Cournoyer wrote on 12 Oct 06:28 +0200
[PATCH 1/5] gnu: sameboy: Update to 0.16.7.
(address . 73754@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
a5ea6b16800d01bd48c2dea1a09da2d5920634f8.1728684335.git.maxim.cournoyer@gmail.com
* 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(-)

Toggle diff (24 lines)
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
M
M
Maxim Cournoyer wrote on 12 Oct 06:28 +0200
[PATCH 2/5] gnu: sameboy: Use gexps.
(address . 73754@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
099d74c50d66ceef241185f74ac53af844045849.1728684335.git.maxim.cournoyer@gmail.com
* gnu/packages/emulators.scm (sameboy) [arguments]: Use gexps.

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

Toggle diff (54 lines)
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
M
M
Maxim Cournoyer wrote on 12 Oct 06:28 +0200
[PATCH 3/5] gnu: Add cppp.
(address . 73754@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
c01c5b711c3167992cd6f7fe4952d649a1b83396.1728684335.git.maxim.cournoyer@gmail.com
* 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

Toggle diff (91 lines)
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
M
M
Maxim Cournoyer wrote on 12 Oct 06:28 +0200
[PATCH 4/5] gnu: sameboy: Install shared library.
(address . 73754@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
25b9dd5fed046089943709a16ba7aae93b7fd911.1728684335.git.maxim.cournoyer@gmail.com
* 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

Toggle diff (386 lines)
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
M
M
Maxim Cournoyer wrote on 12 Oct 06:28 +0200
[PATCH 5/5] gnu: jg-bsnes: Unbundle SameBoy.
(address . 73754@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cb93e8ce73ea21c6764d15e85744b0732bc11d87.1728684335.git.maxim.cournoyer@gmail.com
* 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

Toggle diff (154 lines)
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
M
M
Maxim Cournoyer wrote on 19 Oct 16:02 +0200
Re: [bug#73754] [PATCH 4/5] gnu: sameboy: Install shared library.
(address . 73754@debbugs.gnu.org)
871q0cchrk.fsf@gmail.com
Hey,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

Toggle quote (8 lines)
> * 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.

This revision uses libtool directly in the makefile rules to generate
shared library. While it works, it's been pointed to me there are
issues doing that, namely that libtool bakes its CC internally and thus
CC can't be changed later, and cross-compilation is probably broken as
well.

The usual solution to this is to use Autotools, but I'll see if the
libtool problems can't be fixed at its level first. It's going to need
some time, so consider this series on hold from that effort.

--
Thanks,
Maxim
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 73754@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 73754
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch