From b1c76de17762a63d35236665c96f72a4a5b317dd Mon Sep 17 00:00:00 2001 From: Akkeoss Date: Fri, 6 Dec 2024 15:26:55 +0100 Subject: [PATCH] feat(core): add love system --- Config.in | 1 + configs/recalbox-odroidgo2_defconfig | 1 + configs/recalbox-rg353x_defconfig | 1 + configs/recalbox-rpi3_defconfig | 1 + configs/recalbox-rpi4_64_defconfig | 1 + configs/recalbox-rpi5_64_defconfig | 1 + configs/recalbox-rpizero2_defconfig | 1 + configs/recalbox-x86_64_defconfig | 1 + package/love/Config.in | 22 ++++++++ package/love/love.mk | 27 ++++++++++ .../systems/love/init/roms/.keep | 0 .../recalbox-romfs2/systems/love/system.ini | 53 +++++++++++++++++++ .../love/upgrade/roms/.readme.placeholder | 0 .../configgen/configgen/emulatorlauncher.py | 5 ++ .../configgen/generators/love/__init__.py | 0 .../generators/love/loveGenerator.py | 32 +++++++++++ projects/configgen/configgen/recalboxFiles.py | 3 ++ 17 files changed, 150 insertions(+) create mode 100644 package/love/Config.in create mode 100644 package/love/love.mk create mode 100644 package/recalbox-romfs2/systems/love/init/roms/.keep create mode 100644 package/recalbox-romfs2/systems/love/system.ini create mode 100644 package/recalbox-romfs2/systems/love/upgrade/roms/.readme.placeholder create mode 100644 projects/configgen/configgen/generators/love/__init__.py create mode 100644 projects/configgen/configgen/generators/love/loveGenerator.py diff --git a/Config.in b/Config.in index 87871b62ee..437d48b09d 100644 --- a/Config.in +++ b/Config.in @@ -118,6 +118,7 @@ menu "Emulators" source "$BR2_EXTERNAL_RECALBOX_PATH/package/hatari/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/duckstation/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/linapple-pie/Config.in" + source "$BR2_EXTERNAL_RECALBOX_PATH/package/love/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/mupen64plus-audio-sdl/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/mupen64plus-core/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/mupen64plus-gliden64/Config.in" diff --git a/configs/recalbox-odroidgo2_defconfig b/configs/recalbox-odroidgo2_defconfig index d4780fbfc7..015660b8c1 100644 --- a/configs/recalbox-odroidgo2_defconfig +++ b/configs/recalbox-odroidgo2_defconfig @@ -193,6 +193,7 @@ BR2_PACKAGE_SOLARUS_RECALBOX=y BR2_PACKAGE_TI99SIM=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_81=y BR2_PACKAGE_LIBRETRO_2048=y BR2_PACKAGE_LIBRETRO_A5200=y diff --git a/configs/recalbox-rg353x_defconfig b/configs/recalbox-rg353x_defconfig index 1f2075f8e1..54c6892ec1 100644 --- a/configs/recalbox-rg353x_defconfig +++ b/configs/recalbox-rg353x_defconfig @@ -172,6 +172,7 @@ BR2_PACKAGE_SDLPOP=y BR2_PACKAGE_TI99SIM=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_A5200=y BR2_PACKAGE_LIBRETRO_ATARI800=y BR2_PACKAGE_LIBRETRO_ARDUOUS=y diff --git a/configs/recalbox-rpi3_defconfig b/configs/recalbox-rpi3_defconfig index 1605cc5846..b91106d0d3 100644 --- a/configs/recalbox-rpi3_defconfig +++ b/configs/recalbox-rpi3_defconfig @@ -235,6 +235,7 @@ BR2_PACKAGE_RETROARCH=y BR2_PACKAGE_SCUMMVM=y BR2_PACKAGE_SDLPOP=y BR2_PACKAGE_TI99SIM=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_A5200=y BR2_PACKAGE_LIBRETRO_ATARI800=y BR2_PACKAGE_LIBRETRO_ARDUOUS=y diff --git a/configs/recalbox-rpi4_64_defconfig b/configs/recalbox-rpi4_64_defconfig index 64c1fe49d3..85a5cb2d4d 100644 --- a/configs/recalbox-rpi4_64_defconfig +++ b/configs/recalbox-rpi4_64_defconfig @@ -220,6 +220,7 @@ BR2_PACKAGE_SDLPOP=y BR2_PACKAGE_TI99SIM=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_A5200=y BR2_PACKAGE_LIBRETRO_ATARI800=y BR2_PACKAGE_LIBRETRO_ARDUOUS=y diff --git a/configs/recalbox-rpi5_64_defconfig b/configs/recalbox-rpi5_64_defconfig index 917d2ca9b6..933f6872e6 100644 --- a/configs/recalbox-rpi5_64_defconfig +++ b/configs/recalbox-rpi5_64_defconfig @@ -220,6 +220,7 @@ BR2_PACKAGE_SDLPOP=y BR2_PACKAGE_TI99SIM=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_A5200=y BR2_PACKAGE_LIBRETRO_ATARI800=y BR2_PACKAGE_LIBRETRO_ARDUOUS=y diff --git a/configs/recalbox-rpizero2_defconfig b/configs/recalbox-rpizero2_defconfig index 8b500b10ed..d9ef797a09 100644 --- a/configs/recalbox-rpizero2_defconfig +++ b/configs/recalbox-rpizero2_defconfig @@ -229,6 +229,7 @@ BR2_PACKAGE_OPENBOR=y BR2_PACKAGE_RB5000=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_81=y BR2_PACKAGE_LIBRETRO_2048=y BR2_PACKAGE_RETROARCH=y diff --git a/configs/recalbox-x86_64_defconfig b/configs/recalbox-x86_64_defconfig index 66c80f9963..f81603e9f8 100644 --- a/configs/recalbox-x86_64_defconfig +++ b/configs/recalbox-x86_64_defconfig @@ -250,6 +250,7 @@ BR2_PACKAGE_SUPERMODEL=y BR2_PACKAGE_TI99SIM=y BR2_PACKAGE_XROAR=y BR2_PACKAGE_VICE=y +BR2_PACKAGE_LOVE=y BR2_PACKAGE_LIBRETRO_81=y BR2_PACKAGE_LIBRETRO_2048=y BR2_PACKAGE_LIBRETRO_A5200=y diff --git a/package/love/Config.in b/package/love/Config.in new file mode 100644 index 0000000000..a9e2ac0395 --- /dev/null +++ b/package/love/Config.in @@ -0,0 +1,22 @@ +config BR2_PACKAGE_LOVE + bool "love" + depends on BR2_INSTALL_LIBSTDCPP + select BR2_PACKAGE_SDL2 + select BR2_PACKAGE_LUAJIT + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_ZLIB + select BR2_PACKAGE_PHYSFS + select BR2_PACKAGE_OPENAL + select BR2_PACKAGE_LIBOGG + select BR2_PACKAGE_LIBMODPLUG + select BR2_PACKAGE_LIBVORBIS + select BR2_PACKAGE_LIBTHEORA + select BR2_PACKAGE_FLAC + select BR2_PACKAGE_MPG123 + help + LOVE is a framework for creating 2D games in Lua. + + https://github.com/love2d/love + +comment "LOVE needs a toolchain w/ C++ and SDL2" + depends on !BR2_INSTALL_LIBSTDCPP || !BR2_PACKAGE_SDL2 diff --git a/package/love/love.mk b/package/love/love.mk new file mode 100644 index 0000000000..83fbbfefb5 --- /dev/null +++ b/package/love/love.mk @@ -0,0 +1,27 @@ +################################################################################ +# +# LOVE +# +################################################################################ + +# Commit of 12/03/2023 +LOVE_VERSION = 11.5 +LOVE_SITE = https://github.com/love2d/love.git +LOVE_SITE_METHOD = git +LOVE_GIT_SUBMODULES = YES +LOVE_LICENSE = GPL-2 +LOVE_LICENSE_FILES = LICENSE.txt +LOVE_DEPENDENCIES = sdl2 luajit freetype zlib physfs openal libogg libmodplug libvorbis libtheora flac mpg123 + +define LOVE_PRE_CONFIGURE_HOOKS_CMDS + cd $(@D) && ./platform/unix/automagic +endef + +LOVE_PRE_CONFIGURE_HOOKS += LOVE_PRE_CONFIGURE_HOOKS_CMDS + +define LOVE_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/src/.libs/love \ + $(TARGET_DIR)/usr/bin/love +endef + +$(eval $(autotools-package)) diff --git a/package/recalbox-romfs2/systems/love/init/roms/.keep b/package/recalbox-romfs2/systems/love/init/roms/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package/recalbox-romfs2/systems/love/system.ini b/package/recalbox-romfs2/systems/love/system.ini new file mode 100644 index 0000000000..ce28b721d1 --- /dev/null +++ b/package/recalbox-romfs2/systems/love/system.ini @@ -0,0 +1,53 @@ +; =========================== +; Love +; =========================== + +; all keys can be overridden for a particular board using key. +; example: +; priority = 0 +; priority.rpi4 = 3 +; Complete sections may be overridden. In such cases, all key from the global section are ignored, +; you must redefine them all +; example +; [core.0] +; [core.0.rpi4] +; Board tags are defined by BR2_PACKAGE_RECALBOX_TARGET_ + +[system] +uuid = "7218fc6e-69ff-4ea6-9bee-1aadc5eb895d" +name = "love" +fullname = "Love" +theme.folder = "love" +roms.folder = "%ROOT%/love" +screenscraper.id = +doc.link.fr = "https://wiki.recalbox.com/fr/emulators/fantasy/love" +doc.link.en = "https://wiki.recalbox.com/en/emulators/fantasy/love" +doc.link.es = "https://wiki.recalbox.com/es/emulators/fantasy/love" +port = 0 +readonly = 0 +icon.unicode = $F +extension.types = "*=file" + +[properties] +type = fantasy +device.pad = recommended +device.keyboard = recommanded +device.mouse = no +device.lightgun = no +release.date = "2011-07" +manufacturer = "virtual" +retroachievements = 0 +crt.multiresolution = 0 +crt.multiregion = 0 + +[core.0] +package = BR2_PACKAGE_LOVE +priority = 1 +emulator = "love" +core = "love" +extensions = ".zip .love" +netplay = 0 +softpatching = 0 +compatibility = high +speed = high +crt.available = 1 diff --git a/package/recalbox-romfs2/systems/love/upgrade/roms/.readme.placeholder b/package/recalbox-romfs2/systems/love/upgrade/roms/.readme.placeholder new file mode 100644 index 0000000000..e69de29bb2 diff --git a/projects/configgen/configgen/emulatorlauncher.py b/projects/configgen/configgen/emulatorlauncher.py index da08fe5742..c5bd4acac1 100644 --- a/projects/configgen/configgen/emulatorlauncher.py +++ b/projects/configgen/configgen/emulatorlauncher.py @@ -145,6 +145,10 @@ def getGenerator(emulator): module = __import__("configgen.generators.vvvvvv.vvvvvvGenerator", fromlist=["VvvvvvGenerator"]) generatorClass = getattr(module, "VvvvvvGenerator") return generatorClass() + elif emulator == "love": + module = __import__("configgen.generators.love.loveGenerator", fromlist=["LoveGenerator"]) + generatorClass = getattr(module, "LoveGenerator") + return generatorClass() else: print("Missing generator for {}".format(emulator)) raise ValueError @@ -293,6 +297,7 @@ def config_upgrade(version): "kodi", "libretro", "linapple", + "love", "moonlight", "mupen64plus", "oricutron", diff --git a/projects/configgen/configgen/generators/love/__init__.py b/projects/configgen/configgen/generators/love/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/projects/configgen/configgen/generators/love/loveGenerator.py b/projects/configgen/configgen/generators/love/loveGenerator.py new file mode 100644 index 0000000000..0d730ec8d7 --- /dev/null +++ b/projects/configgen/configgen/generators/love/loveGenerator.py @@ -0,0 +1,32 @@ +from configgen.Command import Command +import configgen.recalboxFiles as recalboxFiles +from configgen.Emulator import Emulator +from configgen.generators.Generator import Generator +from configgen.controllers.controller import ControllerPerPlayer +from configgen.settings.keyValueSettings import keyValueSettings + + +class LoveGenerator(Generator): + def generate(self, system: Emulator, playersControllers: ControllerPerPlayer, recalboxOptions: keyValueSettings, args) -> Command: + + """ + Load, override keys and save back emulator's configuration file + This way, any modification is kept across emulator launches + """ + + # Config file + from configgen.settings.iniSettings import IniSettings + settings = IniSettings(recalboxFiles.loveConfig, True) + settings.loadFile(True)\ + .defineBool('true', 'false') + + # Save config + settings.saveFile() + + # Command line arguments + commandArray = [recalboxFiles.recalboxBins[system.Emulator], args.rom] + + # Add extra arguments + if system.HasArgs: commandArray.extend(system.Args) + + return Command(videomode=system.VideoMode, array=commandArray) \ No newline at end of file diff --git a/projects/configgen/configgen/recalboxFiles.py b/projects/configgen/configgen/recalboxFiles.py index 1fb29b29ea..1b0cd133c2 100644 --- a/projects/configgen/configgen/recalboxFiles.py +++ b/projects/configgen/configgen/recalboxFiles.py @@ -37,6 +37,7 @@ recalboxBins =\ 'kodi' : '/recalbox/scripts/kodilauncher.sh', 'libretro' : '/usr/bin/retroarch', 'linapple' : '/usr/bin/linapple', + 'love' : '/usr/bin/love', 'moonlight' : '/usr/bin/moonlight', 'mupen64plus' : '/usr/bin/mupen64plus', 'openbor' : '/usr/bin/OpenBOR', @@ -184,3 +185,5 @@ frotzConfig = HOME + '/.config/frotz/frotz.conf' sdlpopConfigFile = CONF + '/sdlpop/sdlpop.ini' sdlpopControllersFile = CONF + '/sdlpop/gamecontrollerdb.txt' + +loveConfig = CONF + '/love/love.conf' \ No newline at end of file -- GitLab