From 4393d5f189ee8da69ddfc150e3f8b3d818ac3b54 Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:14:02 -0400 Subject: [PATCH 1/6] add dockerfile --- Dockerfile | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..d607d320d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM docker.io/library/ubuntu:latest + +RUN apt-get update && apt-get install -y git +WORKDIR /root/workdir +RUN git clone https://github.com/EasyRPG/buildscripts + +RUN apt-get install -y curl python3 xz-utils lbzip2 unzip +WORKDIR /root/workdir/buildscripts/emscripten +RUN sed -i 's|download.savannah.gnu.org|download-mirror.savannah.gnu.org|g' ../shared/packages.sh +ENV TAR_OPTIONS="--no-same-owner" +RUN bash ./1_download_library.sh +RUN apt-get install -y autoconf pkg-config libtool build-essential cmake meson +RUN bash ./2_build_toolchain.sh +RUN bash ./3_cleanup.sh + +WORKDIR /root/workdir +RUN git clone https://github.com/EasyRPG/liblcf + +WORKDIR /root/workdir/liblcf +ENV EM_PKG_CONFIG_PATH=/root/workdir/buildscripts/emscripten/lib/pkgconfig +RUN autoreconf -fi +RUN bash -c "source /root/workdir/buildscripts/emscripten/emsdk-portable/emsdk_env.sh; \ + emconfigure ./configure --prefix=/root/workdir/buildscripts/emscripten --disable-shared" +RUN make install + +RUN apt-get install -y ninja-build ccache + +CMD bash -c "source /root/workdir/buildscripts/emscripten/emsdk-portable/emsdk_env.sh; \ + cd /root/workdir/ynoengine; \ + ./cmake_build.sh; \ + cd build; \ + ninja" From 1d0cb035a71df2c2dbfa7ef4270dcfcc7613efe2 Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:31:48 -0400 Subject: [PATCH 2/6] remove unused platform cmake rules --- CMakeLists.txt | 345 +------------------------------------------------ 1 file changed, 7 insertions(+), 338 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 477d92419..1d1b91d77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -581,39 +581,11 @@ set_property(SOURCE src/version.cpp PROPERTY COMPILE_DEFINITIONS ) # Platform setup -if(NINTENDO_3DS) - set(PLAYER_TARGET_PLATFORM "3ds" CACHE STRING "Platform to compile for.") -elseif(NINTENDO_SWITCH) - set(PLAYER_TARGET_PLATFORM "switch" CACHE STRING "Platform to compile for.") -elseif(VITA) - set(PLAYER_TARGET_PLATFORM "psvita" CACHE STRING "Platform to compile for.") -elseif(NINTENDO_WII) - set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1") - set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1) -elseif(NINTENDO_WIIU) - set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for.") -elseif(AMIGA) - set(PLAYER_TARGET_PLATFORM "SDL1" CACHE STRING "Platform to compile for.") -else() - set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL3 SDL2 SDL1 libretro") - set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL3 SDL2 SDL1 libretro) -endif() +set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL3 SDL2 SDL1 libretro") +set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL3 SDL2 SDL1 libretro) set(PLAYER_BUILD_EXECUTABLE ON) set(PLAYER_TEST_LIBRARIES ${PROJECT_NAME}) -if(ANDROID AND PLAYER_GRADLE_BUILD) - # Build invoked by Gradle - # Ugly: Gradle has no way to branch based on the ABI - # Inject correct search path based on PLAYER_ANDROID_TOOLCHAIN_PATH - foreach(f ${PLAYER_ANDROID_TOOLCHAIN_PATH}) - list(APPEND CMAKE_FIND_ROOT_PATH "${f}/${CMAKE_ANDROID_ARCH_ABI}-toolchain") - endforeach(f) -endif() - -if(APPLE AND NOT IOS AND NOT CMAKE_SYSTEM_NAME STREQUAL "tvOS") - set(MACOS TRUE) -endif() - if(PLAYER_TARGET_PLATFORM STREQUAL "SDL3") target_sources(${PROJECT_NAME} PRIVATE src/platform/sdl/sdl3_ui.cpp @@ -623,10 +595,6 @@ if(PLAYER_TARGET_PLATFORM STREQUAL "SDL3") player_find_package(NAME SDL3 TARGET SDL3::SDL3 REQUIRED) - - if(ANDROID) - set(PLAYER_BUILD_EXECUTABLE OFF) - endif() elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL2") target_sources(${PROJECT_NAME} PRIVATE src/platform/sdl/sdl2_ui.cpp @@ -644,34 +612,11 @@ elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL2") target_link_libraries(${PROJECT_NAME} SDL2::SDL2main) endif() - if(ANDROID) - set(PLAYER_BUILD_EXECUTABLE OFF) - elseif(NINTENDO_WII) - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO) - target_sources(${PROJECT_NAME} PRIVATE - src/platform/wii/clock.h - src/platform/wii/input_buttons.cpp) - elseif(NINTENDO_WIIU) - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO) - target_sources(${PROJECT_NAME} PRIVATE - src/platform/wiiu/main.h - src/platform/wiiu/input_buttons.cpp) - endif() - if(WIN32) target_link_libraries(${PROJECT_NAME} "Dwmapi") endif() elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL1") - if(NINTENDO_WII) - find_package(SDL REQUIRED) - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO) - target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR}) - target_sources(${PROJECT_NAME} PRIVATE - src/platform/wii/clock.h - src/platform/wii/input_buttons.cpp) - else() - player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED) - endif() + player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED) target_sources(${PROJECT_NAME} PRIVATE src/platform/sdl/axis.h @@ -681,69 +626,6 @@ elseif(PLAYER_TARGET_PLATFORM STREQUAL "SDL1") USE_SDL=1 EASYRPG_CONFIG_NAME="config_sdl1.ini" ) -elseif(PLAYER_TARGET_PLATFORM STREQUAL "libretro") - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=LibretroUi USE_LIBRETRO=1) - set(PLAYER_BUILD_EXECUTABLE OFF) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/builds/libretro) - target_link_libraries(${PROJECT_NAME} retro_common) -elseif(PLAYER_TARGET_PLATFORM STREQUAL "3ds") - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=CtrUi PLAYER_NINTENDO) - target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after devkitarm ships newer gcc - # generate gfx assets - enable_language(ASM) - ctr_add_graphics_target(keyboard IMAGE - INPUTS ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/keyboard.png - OPTIONS -f rgba) - ctr_add_graphics_target(battery ATLAS - INPUTS - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/empty.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/1bar.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/2bars.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/3bars.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/4bars.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/full.png - ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/battery/adapter.png - OPTIONS -f rgba) - dkp_add_embedded_binary_library(3ds-assets keyboard battery) - target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) - target_sources(${PROJECT_NAME} INTERFACE - $ PRIVATE - src/platform/3ds/audio.cpp - src/platform/3ds/audio.h - src/platform/3ds/clock.h - src/platform/3ds/input_buttons.cpp - src/platform/3ds/ui.cpp - src/platform/3ds/ui.h) - target_link_libraries(${PROJECT_NAME} 3ds-assets) -elseif(PLAYER_TARGET_PLATFORM STREQUAL "psvita") - include("$ENV{VITASDK}/share/vita.cmake" REQUIRED) - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=Psp2Ui) - target_compile_options(${PROJECT_NAME} PUBLIC -Wno-psabi) # Remove abi warning after vitasdk ships newer gcc - target_sources(${PROJECT_NAME} PRIVATE - src/platform/psvita/audio.cpp - src/platform/psvita/audio.h - src/platform/psvita/clock.h - src/platform/psvita/input_buttons.cpp - src/platform/psvita/ui.cpp - src/platform/psvita/ui.h) -elseif(PLAYER_TARGET_PLATFORM STREQUAL "switch") - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=NxUi PLAYER_NINTENDO) - find_package(OpenGL CONFIG REQUIRED) - find_library(GLAD glad REQUIRED) - target_link_libraries(${PROJECT_NAME} OpenGL::EGL) - # generate gfx assets - enable_language(ASM) - dkp_add_embedded_binary_library(switch-assets "${CMAKE_CURRENT_SOURCE_DIR}/resources/switch/touch_ui.png") - target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) - target_sources(${PROJECT_NAME} INTERFACE - $ PRIVATE - src/platform/switch/audio.cpp - src/platform/switch/audio.h - src/platform/switch/clock.h - src/platform/switch/input_buttons.cpp - src/platform/switch/ui.cpp - src/platform/switch/ui.h) - target_link_libraries(${PROJECT_NAME} switch-assets) else() message(FATAL_ERROR "Invalid target platform") endif() @@ -805,59 +687,7 @@ if(NOT PLAYER_AUDIO_BACKEND IN_LIST AUDIO_PROP) message(FATAL_ERROR "Incompatible audio backend configuration ${PLAYER_AUDIO_BACKEND}.\nPlease clear the CMake cache.\nOptions: ${AUDIO_PROP}") endif() -# Shared by homebrew platforms -if(NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_WIIU OR NINTENDO_SWITCH OR VITA) - target_compile_options(${PROJECT_NAME} PUBLIC -fno-exceptions -fno-rtti) - if(VITA) - # This optimisation is unstable on Vita (crashes at the end of MainLoop) - target_compile_options(${PROJECT_NAME} PUBLIC -fno-optimize-sibling-calls) - endif() - set(CMAKE_DL_LIBS "") # hack4icu! - set(PLAYER_ENABLE_TESTS OFF) - option(PLAYER_VERSIONED_PACKAGES "Create zip packages with versioned name (for internal use)" ON) - set(PLAYER_CONSOLE_PORT ON) -else() - set(PLAYER_CONSOLE_PORT OFF) -endif() -# Make content available (romfs/wuhb bundle) -if(NINTENDO_3DS OR NINTENDO_WIIU OR NINTENDO_SWITCH) - option(PLAYER_BUNDLE "Embed a directory in the executable" OFF) - set(PLAYER_BUNDLE_PATH "content" CACHE PATH "Directory to include in executable") - set(BUNDLE_ARG "_IGNORE_ME") - if(PLAYER_BUNDLE) - if(NINTENDO_WIIU) - set(BUNDLE_ARG "CONTENT") - else() - set(BUNDLE_ARG "ROMFS") - endif() - endif() -endif() - -# Amiga -if(AMIGA) - target_compile_options(${PROJECT_NAME} PUBLIC -fno-exceptions -fno-rtti) - target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_AMIGA) - if(MORPHOS) - target_compile_definitions(${PROJECT_NAME} PUBLIC - _GLIBCXX_USE_C99 _NO_PPCINLINE __MORPHOS_SHAREDLIBS) - # -noixemul handled as "M68K_CRT" in toolchain file - target_sources(${PROJECT_NAME} PRIVATE - src/platform/morphos/integration.cpp) - set_property(SOURCE src/platform/morphos/integration.cpp - PROPERTY COMPILE_DEFINITIONS PLAYER_VERSION="${PLAYER_VERSION_FULL}" - ) - endif() - if(AMIGAOS4) - # FIXME: needed? - target_compile_definitions(${PROJECT_NAME} PUBLIC - _GLIBCXX_USE_C99_STDINT_TR1 _GLIBCXX_USE_C99_STDIO) - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/amigaos4) - endif() - if(AROS) - message(WARNING "AROS is unsupported currently. Patches welcome!") - endif() -endif() +set(PLAYER_CONSOLE_PORT OFF) if(NOT PLAYER_BUILD_EXECUTABLE AND BUILD_SHARED_LIBS) # Need fPIC when compiling a shared library (e.g. libretro.so) @@ -867,10 +697,6 @@ if(NOT PLAYER_BUILD_EXECUTABLE AND BUILD_SHARED_LIBS) set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE TRUE) endif() -if(ANDROID) - target_link_libraries(${PROJECT_NAME} android log) -endif() - if(WIN32) target_sources(${PROJECT_NAME} PRIVATE src/registry.cpp @@ -918,14 +744,6 @@ else() endif() endif() -# App Icon (for macOS) -set(${PROJECT_NAME}_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/macos/Player.icns") - -# Do not code sign on Macs -set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") -set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") -set(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.easyrpg.player") - # liblcf option(PLAYER_BUILD_LIBLCF "Instead of detecting liblcf, clone liblcf into lib/liblcf and build it along with the Player. This is convenient for development." OFF) set(PLAYER_BUILD_LIBLCF_GIT "https://github.com/EasyRPG/liblcf.git" CACHE STRING "Git repository of liblcf to clone. Requires PLAYER_BUILD_LIBLCF=ON.") @@ -1307,114 +1125,9 @@ if(PLAYER_BUILD_EXECUTABLE AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$" AND N endif() elseif(PLAYER_CONSOLE_PORT AND NOT PLAYER_TARGET_PLATFORM STREQUAL "libretro") set(CPACK_PLATFORM "${PLAYER_TARGET_PLATFORM}") - if(NINTENDO_3DS) - add_executable(easyrpg-player src/platform/3ds/main.cpp) - target_link_libraries(easyrpg-player - ${PROJECT_NAME} - -lcitro2d - -lcitro3d) - ctr_generate_smdh(easyrpg-player.smdh - NAME "EasyRPG Player ${PLAYER_VERSION_FULL}" - DESCRIPTION "Play your RPG Maker 2000/2003 games everywhere" - AUTHOR "EasyRPG Team" - ICON ${CMAKE_CURRENT_SOURCE_DIR}/resources/3ds/icon.png) - ctr_create_3dsx(easyrpg-player - SMDH easyrpg-player.smdh - ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.3dsx - DESTINATION easyrpg-player COMPONENT 3ds) - elseif(NINTENDO_SWITCH) - add_executable(easyrpg-player src/platform/switch/main.cpp) - target_link_libraries(easyrpg-player - ${PROJECT_NAME} - ${GLAD}) - nx_generate_nacp(easyrpg-player.nacp - NAME "EasyRPG Player" - AUTHOR "EasyRPG Team" - VERSION "${PLAYER_VERSION_FULL}") - nx_create_nro(easyrpg-player - NACP easyrpg-player.nacp - ICON "${PROJECT_SOURCE_DIR}/resources/switch/icon.jpg" - ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.nro - DESTINATION easyrpg-player COMPONENT switch) - elseif(NINTENDO_WII) - add_executable(easyrpg-player src/platform/wii/main.cpp) - target_link_libraries(easyrpg-player - ${PROJECT_NAME} - ${SDL_LIBRARIES} - -laesnd - -lfat - -lwiikeyboard) - if(TARGET SDL2::SDL2main) - # Missing dependency? - target_link_libraries(SDL2::SDL2main INTERFACE -lfat) - endif() - ogc_create_dol(easyrpg-player) - string(TIMESTAMP WII_DATE "%Y%m%d000000") - configure_file(resources/wii/meta.xml.in resources/wii/meta.xml @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.dol - RENAME boot.dol - DESTINATION easyrpg-player COMPONENT wii) - install(FILES resources/wii/icon.png - ${CMAKE_CURRENT_BINARY_DIR}/resources/wii/meta.xml - DESTINATION easyrpg-player COMPONENT wii) - elseif(NINTENDO_WIIU) - add_executable(easyrpg-player src/platform/wiiu/main.cpp) - target_link_libraries(easyrpg-player ${PROJECT_NAME}) - wut_create_rpx(easyrpg-player) - wut_create_wuhb(easyrpg-player - NAME "EasyRPG Player ${PLAYER_VERSION_FULL}" - SHORTNAME "EasyRPG Player" - AUTHOR "EasyRPG Team" - ICON resources/wiiu/icon.png - TVSPLASH resources/wiiu/splash-tv.png - DRCSPLASH resources/wiiu/splash-drc.png - ${BUNDLE_ARG} ${PLAYER_BUNDLE_PATH}) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.rpx - ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.wuhb - DESTINATION . COMPONENT wiiu) - set(CPACK_PLATFORM "wiiu") - elseif(VITA) - set(CMAKE_EXECUTABLE_SUFFIX .elf) - add_executable(easyrpg-player src/platform/psvita/main.cpp) - target_link_libraries(easyrpg-player - ${PROJECT_NAME} - vita2d - -Wl,--whole-archive pthread -Wl,--no-whole-archive - SceLibKernel_stub - SceDisplay_stub - SceGxm_stub - SceSysmodule_stub - SceCtrl_stub - SceTouch_stub - ScePgf_stub - ScePower_stub - SceCommonDialog_stub - SceAudio_stub - SceAppMgr_stub) - vita_create_self(eboot.bin easyrpg-player.elf $<$>:STRIPPED>) - set(VITA_MKSFOEX_FLAGS "-d ATTRIBUTE2=12") - configure_file(resources/psvita/template.xml.in resources/psvita/template.xml @ONLY) - vita_create_vpk(EasyRPG-Player.vpk "EASYRPG01" eboot.bin - VERSION "${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${PROJECT_VERSION_TWEAK}" - NAME "EasyRPG Player" - FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/psvita/icon0.png" sce_sys/icon0.png - FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/psvita/bg.png" sce_sys/livearea/contents/bg.png - FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/psvita/startup.png" sce_sys/livearea/contents/startup.png - FILE "${CMAKE_CURRENT_BINARY_DIR}/resources/psvita/template.xml" sce_sys/livearea/contents/template.xml - FILE "${CMAKE_CURRENT_SOURCE_DIR}/resources/psvita/touch_ui.png" touch_ui.png) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/EasyRPG-Player.vpk - DESTINATION . COMPONENT psvita) - endif() + install(TARGETS easyrpg-player RUNTIME DESTINATION . COMPONENT debug) - # debug information - if(NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_SWITCH) - dkp_target_generate_symbol_list(easyrpg-player) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.map - ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.lst - DESTINATION . COMPONENT debug) - endif() + # packaging for distribution set(CPACK_GENERATOR "ZIP") set(CPACK_SOURCE_GENERATOR ";") # disable source archive @@ -1427,46 +1140,7 @@ elseif(PLAYER_CONSOLE_PORT AND NOT PLAYER_TARGET_PLATFORM STREQUAL "libretro") set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY OFF) # we do this manually include(CPack) else() # library - if(PLAYER_TARGET_PLATFORM STREQUAL "libretro") - add_library(easyrpg_libretro - src/platform/libretro/audio.cpp - src/platform/libretro/audio.h - src/platform/libretro/clock.cpp - src/platform/libretro/clock.h - src/platform/libretro/input_buttons.cpp - src/platform/libretro/ui.cpp - src/platform/libretro/ui.h - src/platform/libretro/midiout_device.cpp - src/platform/libretro/midiout_device.h - ) - set_property(SOURCE src/platform/libretro/ui.cpp - PROPERTY COMPILE_DEFINITIONS PLAYER_VERSION_FULL="${PLAYER_VERSION_FULL}" - ) - target_link_libraries(easyrpg_libretro ${PROJECT_NAME}) - set_target_properties(easyrpg_libretro PROPERTIES PREFIX "") - set(PLAYER_TEST_LIBRARIES "easyrpg_libretro") - - if(WIN32) - set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT easyrpg_libretro) - endif() - elseif(ANDROID AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$") - add_library(easyrpg_android - src/platform/android/android.cpp - src/platform/android/android.h - src/platform/android/org_easyrpg_player_player_EasyRpgPlayerActivity.cpp - src/platform/android/org_easyrpg_player_player_EasyRpgPlayerActivity.h - src/platform/android/filesystem_apk.cpp - src/platform/android/filesystem_apk.h - src/platform/android/filesystem_saf.cpp - src/platform/android/filesystem_saf.h - src/platform/sdl/main.cpp) - target_link_libraries(easyrpg_android ${PROJECT_NAME}) - set_target_properties(easyrpg_android PROPERTIES DEBUG_POSTFIX "") - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/builds/android/app/src/gamebrowser) - set(PLAYER_TEST_LIBRARIES "easyrpg_android") - else() - message(FATAL_ERROR "Unsupported library target platform ${PLAYER_TARGET_PLATFORM}") - endif() + message(FATAL_ERROR "Unsupported library target platform ${PLAYER_TARGET_PLATFORM}") endif() # manpage @@ -1607,11 +1281,6 @@ endif() # Print summary message(STATUS "") set(TARGET_STATUS "${PLAYER_TARGET_PLATFORM}") -if(NINTENDO_WIIU) - set(TARGET_STATUS "Wii U (SDL2)") -elseif(AMIGA) - set(TARGET_STATUS "Amiga (SDL1)") -endif() message(STATUS "Target system: ${TARGET_STATUS}") if(PLAYER_BUNDLE) message(STATUS "Embedding directory \"${PLAYER_BUNDLE_PATH}\"") From 73595b35f429b504b97c7690892de68154e373cb Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:42:09 -0400 Subject: [PATCH 3/6] define psk from env var --- CMakeLists.txt | 4 ++++ cmake_build.sh | 21 ++++++++++++++++++++- src/multiplayer/yno_connection.cpp | 6 +++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d1b91d77..eaec2ed1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1418,3 +1418,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) endif() + +if(DEFINED ENV{PLAYER_PSK}) + add_definitions(-DPLAYER_PSK=$ENV{PLAYER_PSK}) +endif() diff --git a/cmake_build.sh b/cmake_build.sh index ad7321fba..4e19c1bfa 100755 --- a/cmake_build.sh +++ b/cmake_build.sh @@ -1 +1,20 @@ -cmake . -GNinja -Bbuild -DCMAKE_TOOLCHAIN_FILE=$HOME/workdir/buildscripts/emscripten/emsdk-portable/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_PREFIX_PATH=$HOME/workdir/buildscripts/emscripten -DCMAKE_BUILD_TYPE=Release -DPLAYER_ENABLE_FMMIDI=OFF -DPLAYER_WITH_MPG123=OFF -DPLAYER_WITH_LIBSNDFILE=OFF -DPLAYER_WITH_OGGVORBIS=OFF -DPLAYER_WITH_WILDMIDI=OFF -DPLAYER_WITH_FLUIDLITE=OFF -DPLAYER_WITH_XMP=OFF -DPLAYER_ENABLE_DRWAV=OFF -DPLAYER_JS_BUILD_SHELL=ON -DPLAYER_JS_OUTPUT_NAME=ynoengine-simd -DPLAYER_JS_GAME_URL=/data/ -DCMAKE_CXX_FLAGS="-O3 -g0 -msimd128" \ No newline at end of file +cmake . -GNinja -Bbuild \ +-DCMAKE_TOOLCHAIN_FILE=$HOME/workdir/buildscripts/emscripten/emsdk-portable/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ +-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \ +-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \ +-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \ +-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ +-DCMAKE_PREFIX_PATH=$HOME/workdir/buildscripts/emscripten \ +-DCMAKE_BUILD_TYPE=Release \ +-DPLAYER_ENABLE_FMMIDI=OFF \ +-DPLAYER_WITH_MPG123=OFF \ +-DPLAYER_WITH_LIBSNDFILE=OFF \ +-DPLAYER_WITH_OGGVORBIS=OFF \ +-DPLAYER_WITH_WILDMIDI=OFF \ +-DPLAYER_WITH_FLUIDLITE=OFF \ +-DPLAYER_WITH_XMP=OFF \ +-DPLAYER_ENABLE_DRWAV=OFF \ +-DPLAYER_JS_BUILD_SHELL=ON \ +-DPLAYER_JS_OUTPUT_NAME=ynoengine-simd \ +-DPLAYER_JS_GAME_URL=/data/ \ +-DCMAKE_CXX_FLAGS="-O3 -g0 -msimd128" diff --git a/src/multiplayer/yno_connection.cpp b/src/multiplayer/yno_connection.cpp index 2fb7ebbd2..ba2110a6a 100644 --- a/src/multiplayer/yno_connection.cpp +++ b/src/multiplayer/yno_connection.cpp @@ -160,7 +160,11 @@ std::string as_big_endian_bytes(T v) { return reverse_endian(sr); } -const unsigned char psk[] = {}; +#ifndef PLAYER_PSK +#define PLAYER_PSK {} +#endif + +const unsigned char psk[] = PLAYER_PSK; std::string calculate_header(uint32_t key, uint32_t count, std::string_view msg) { std::string hashmsg{as_bytes(psk)}; From 88976498269c4eae6ecd2f09ec48970b47df801a Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:58:31 -0400 Subject: [PATCH 4/6] github action for building docker --- .github/workflows/build-docker.yml | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/build-docker.yml diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml new file mode 100644 index 000000000..b23f4464b --- /dev/null +++ b/.github/workflows/build-docker.yml @@ -0,0 +1,39 @@ +# https://docs.github.com/en/actions/tutorials/publish-packages/publish-docker-images + +name: Build Docker Image + +on: workflow_dispatch +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} +jobs: + build-docker: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + attestations: write + id-token: write + steps: + - uses: actions/checkout@v5 + - uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - uses: docker/metadata-action@v5 + id: meta + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - uses: docker/build-push-action@v6 + id: push + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + - uses: actions/attest-build-provenance@v3 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true From 90936ec6d0ffb1fe553703d3ed44c6ac7cd4b9f1 Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 17:19:31 -0400 Subject: [PATCH 5/6] workflow to build engine using docker image --- .github/workflows/build-ynoengine.yml | 31 ++++++++ .github/workflows/pr_labels.yml | 27 ------- .github/workflows/stable-compilation.yml | 93 ------------------------ 3 files changed, 31 insertions(+), 120 deletions(-) create mode 100644 .github/workflows/build-ynoengine.yml delete mode 100644 .github/workflows/pr_labels.yml delete mode 100644 .github/workflows/stable-compilation.yml diff --git a/.github/workflows/build-ynoengine.yml b/.github/workflows/build-ynoengine.yml new file mode 100644 index 000000000..fadbfa5c8 --- /dev/null +++ b/.github/workflows/build-ynoengine.yml @@ -0,0 +1,31 @@ +name: Build ynoengine +on: + push: + branches: + - master +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} +jobs: + build-docker: + runs-on: ubuntu-latest + permissions: + contents: write + packages: read + steps: + - uses: actions/checkout@v5 + - uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - run: | + REPO="${{ github.repository }}" + docker run -v $(pwd):/root/workdir/ynoengine:rw -e PLAYER_PSK="${{ secrets.PSK }}" ghcr.io/${REPO,,}:master + echo "TAG=$(date +'%Y-%m-%d.%H.%M.%S')" >> $GITHUB_ENV + - uses: softprops/action-gh-release@v3 + with: + tag_name: ${{ env.TAG }} + files: | + build/ynoengine-simd.js + build/ynoengine-simd.wasm diff --git a/.github/workflows/pr_labels.yml b/.github/workflows/pr_labels.yml deleted file mode 100644 index 9c318344e..000000000 --- a/.github/workflows/pr_labels.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: "Label Pull Requests" -on: - pull_request_target: - types: [opened, ready_for_review] - -jobs: - update: - permissions: - contents: read - pull-requests: write - - runs-on: ubuntu-latest - - steps: - - name: Clone repository - uses: actions/checkout@v4 - with: - # pull_request_target is run under forks, use main repo source - fetch-depth: 0 - repository: EasyRPG/Player - ref: master - - - name: Update labels - uses: actions/labeler@v5 - with: - sync-labels: true - dot: true diff --git a/.github/workflows/stable-compilation.yml b/.github/workflows/stable-compilation.yml deleted file mode 100644 index 6e0193421..000000000 --- a/.github/workflows/stable-compilation.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Stable Compilation - -on: - push: - pull_request: - workflow_dispatch: - inputs: - git-ref: - description: Git Ref (Optional) - required: false - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -defaults: - run: - shell: bash - -jobs: - docker: - name: ${{ matrix.image }} (${{ matrix.os.arch }}) - runs-on: ${{ matrix.os.name }} - container: - image: ${{ matrix.image }} - - strategy: - fail-fast: false - matrix: - image: - # version of: # CMake | g++ | SDL | support end # - # ------------------------------------------------------------- - - debian:11 # 3.18.4 | 10.2.1 | 2.0.14 | oldstable (8/24) # - - ubuntu:22.04 # 3.22.1 | 11.2.0 | 2.0.20 | LTS (4/27) # - - debian:12 # 3.25.1 | 12.2.0 | 2.26.5 | stable (6/26) # - - ubuntu:24.04 # 3.28.3 | 13.2.0 | 2.30.0 | LTS (4/29) # - os: - - arch: x86_64 - name: ubuntu-latest - - arch: arm64 - name: ubuntu-24.04-arm - exclude: - - os: - arch: arm64 - image: debian:11 - - os: - arch: arm64 - image: ubuntu:22.04 - - steps: - - name: Install dependencies - run: | - export DEBIAN_FRONTEND="noninteractive" - apt-get update - apt-get install -yqq --no-install-recommends --no-install-suggests \ - ca-certificates build-essential cmake ninja-build git \ - libicu-dev libexpat1-dev libinih-dev nlohmann-json3-dev \ - libsdl2-dev libpng-dev libpixman-1-dev libfmt-dev \ - libfreetype6-dev libharfbuzz-dev libmpg123-dev libsndfile-dev \ - libvorbis-dev libopusfile-dev libspeexdsp-dev liblhasa-dev \ - libdrm-dev libgbm-dev # only needed for sdl2 on debian 11 - - - name: Clone Repository - uses: actions/checkout@v4 - if: github.event.inputs.git-ref == '' - - name: Clone Repository (with custom ref) - uses: actions/checkout@v4 - if: github.event.inputs.git-ref != '' - with: - ref: ${{ github.event.inputs.git-ref }} - - - name: Use gcc problem matcher - run: echo "::add-matcher::.github/gcc_comment_matcher.json" - - - name: Compile - run: | - VER="(GA, `date +%Y-%m-%d`)" - cmake -G Ninja -B build . \ - -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_CXX_FLAGS="-Wall -Wextra -Wdeprecated -fsanitize=address,undefined" \ - -DPLAYER_BUILD_LIBLCF=ON -DPLAYER_VERSION_APPEND="$VER" - cmake --build build - - - name: Install - run: | - cmake --install build - - - name: Test - run: | - # make sure executable runs - build/easyrpg-player --version - # run unit tests - cmake --build build --target check From 5495c7f9b625ed22d325f947ef35c688a7a361a2 Mon Sep 17 00:00:00 2001 From: Colourless <205353678+AcrylonitrileButadieneStyrene@users.noreply.github.com> Date: Tue, 21 Apr 2026 18:44:23 -0400 Subject: [PATCH 6/6] add no-simd support to ci/cd --- .github/workflows/build-ynoengine.yml | 3 +++ Dockerfile | 8 +++++++- cmake_build_nosimd.sh | 21 ++++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-ynoengine.yml b/.github/workflows/build-ynoengine.yml index fadbfa5c8..4ba39681b 100644 --- a/.github/workflows/build-ynoengine.yml +++ b/.github/workflows/build-ynoengine.yml @@ -22,10 +22,13 @@ jobs: - run: | REPO="${{ github.repository }}" docker run -v $(pwd):/root/workdir/ynoengine:rw -e PLAYER_PSK="${{ secrets.PSK }}" ghcr.io/${REPO,,}:master + docker run -v $(pwd):/root/workdir/ynoengine:rw -e PLAYER_PSK="${{ secrets.PSK }}" -e NO_SIMD=1 ghcr.io/${REPO,,}:master echo "TAG=$(date +'%Y-%m-%d.%H.%M.%S')" >> $GITHUB_ENV - uses: softprops/action-gh-release@v3 with: tag_name: ${{ env.TAG }} files: | + build/ynoengine.js + build/ynoengine.wasm build/ynoengine-simd.js build/ynoengine-simd.wasm diff --git a/Dockerfile b/Dockerfile index d607d320d..4f5848c3b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,12 @@ RUN apt-get install -y ninja-build ccache CMD bash -c "source /root/workdir/buildscripts/emscripten/emsdk-portable/emsdk_env.sh; \ cd /root/workdir/ynoengine; \ - ./cmake_build.sh; \ + if [[ \"$NO_SIMD\" -eq 1 ]]; then \ + ./cmake_build_nosimd.sh; \ + else \ + ./cmake_build.sh; \ + fi; \ cd build; \ ninja" + + diff --git a/cmake_build_nosimd.sh b/cmake_build_nosimd.sh index a7a80861f..3773fca57 100755 --- a/cmake_build_nosimd.sh +++ b/cmake_build_nosimd.sh @@ -1 +1,20 @@ -cmake . -GNinja -Bbuild -DCMAKE_TOOLCHAIN_FILE=$HOME/workdir/buildscripts/emscripten/emsdk-portable/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_PREFIX_PATH=$HOME/workdir/buildscripts/emscripten -DCMAKE_BUILD_TYPE=Release -DPLAYER_ENABLE_FMMIDI=OFF -DPLAYER_WITH_MPG123=OFF -DPLAYER_WITH_LIBSNDFILE=OFF -DPLAYER_WITH_OGGVORBIS=OFF -DPLAYER_WITH_WILDMIDI=OFF -DPLAYER_WITH_FLUIDLITE=OFF -DPLAYER_WITH_XMP=OFF -DPLAYER_ENABLE_DRWAV=OFF -DPLAYER_JS_BUILD_SHELL=ON -DPLAYER_JS_OUTPUT_NAME=ynoengine -DPLAYER_JS_GAME_URL=/data/ -DCMAKE_CXX_FLAGS="-O3 -g0" \ No newline at end of file +cmake . -GNinja -Bbuild \ +-DCMAKE_TOOLCHAIN_FILE=$HOME/workdir/buildscripts/emscripten/emsdk-portable/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ +-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH \ +-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH \ +-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \ +-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ +-DCMAKE_PREFIX_PATH=$HOME/workdir/buildscripts/emscripten \ +-DCMAKE_BUILD_TYPE=Release \ +-DPLAYER_ENABLE_FMMIDI=OFF \ +-DPLAYER_WITH_MPG123=OFF \ +-DPLAYER_WITH_LIBSNDFILE=OFF \ +-DPLAYER_WITH_OGGVORBIS=OFF \ +-DPLAYER_WITH_WILDMIDI=OFF \ +-DPLAYER_WITH_FLUIDLITE=OFF \ +-DPLAYER_WITH_XMP=OFF \ +-DPLAYER_ENABLE_DRWAV=OFF \ +-DPLAYER_JS_BUILD_SHELL=ON \ +-DPLAYER_JS_OUTPUT_NAME=ynoengine \ +-DPLAYER_JS_GAME_URL=/data/ \ +-DCMAKE_CXX_FLAGS="-O3 -g0"