diff --git a/.circleci/config.yml b/.circleci/config.yml index ddd92ae23..3623e169b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,6 +48,16 @@ jobs: - run: cmake -S. -Bbuild -GNinja -DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo - run: cmake --build build -j 2 - store_artifacts: {path: ./build/devilutionx.vpk, destination: devilutionx.vpk} + psp: + docker: + - image: pspdev/pspdev + working_directory: ~/repo + steps: + - checkout + - run: apk --no-cache add git cmake gettext + - run: psp-cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_PRX=1 -DENC_PRX=1 + - run: cmake --build build -j 2 + - store_artifacts: {path: ./EBOOT.PBP, destination: EBOOT.PBP} workflows: version: 2 @@ -57,3 +67,4 @@ workflows: - 3ds - amigaos-m68k - vita + - psp diff --git a/CMake/Platforms.cmake b/CMake/Platforms.cmake index 56e138f1b..e762155ba 100644 --- a/CMake/Platforms.cmake +++ b/CMake/Platforms.cmake @@ -52,6 +52,10 @@ if(VITA) include(platforms/vita) endif() +if(PSP) + include(platforms/psp_defs) +endif() + if(PS4) include(platforms/ps4) endif() diff --git a/CMake/platforms/psp_defs.cmake b/CMake/platforms/psp_defs.cmake new file mode 100644 index 000000000..e5ca1e00d --- /dev/null +++ b/CMake/platforms/psp_defs.cmake @@ -0,0 +1,9 @@ +set(NONET ON) +set(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF) +set(BUILD_TESTING OFF) +set(PREFILL_PLAYER_NAME ON) +set(NOEXIT ON) + +set(DEFAULT_WIDTH 480) +set(DEFAULT_HEIGHT 272) + diff --git a/CMakeLists.txt b/CMakeLists.txt index aa67083b9..50d8ee97c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,7 +240,7 @@ endif() # # PS4 toolchain crashes in `create-fself` when linking with these flags, so we exclude it: # https://github.com/PacBrew/ps4-openorbis/issues/8 -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND NOT PS4) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" AND NOT PS4 AND NOT PSP) add_compile_options("$<$>:-ffunction-sections;-fdata-sections>") if(APPLE) add_link_options("$<$>:LINKER:-dead_strip>") @@ -501,6 +501,16 @@ if(NXDK) add_custom_target(nxdk_xbe DEPENDS "${_xbe_path}") endif() +if(PSP) + create_pbp_file( + TARGET ${BIN_TARGET} + ICON_PATH "${PROJECT_SOURCE_DIR}/Packaging/psp/icon.png" + BACKGROUND_PATH "${PROJECT_SOURCE_DIR}/Packaging/psp/background.png" + PREVIEW_PATH NULL + TITLE ${PROJECT_NAME} + ) +endif() + if(CPACK AND (APPLE OR BUILD_ASSETS_MPQ OR SRC_DIST)) if(WIN32) if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") diff --git a/Packaging/psp/background.png b/Packaging/psp/background.png new file mode 100644 index 000000000..8059ff242 Binary files /dev/null and b/Packaging/psp/background.png differ diff --git a/Packaging/psp/icon.png b/Packaging/psp/icon.png new file mode 100644 index 000000000..558d3c47a Binary files /dev/null and b/Packaging/psp/icon.png differ diff --git a/Source/multi.cpp b/Source/multi.cpp index 32452f585..d2aac8ed7 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -678,8 +678,10 @@ void multi_process_network_packets() } HandleAllPackets(playerId, (const byte *)(pkt + 1), dwMsgSize - sizeof(TPktHdr)); } +#ifndef PSP if (SErrGetLastError() != STORM_ERROR_NO_MESSAGES_WAITING) nthread_terminate_game("SNetReceiveMsg"); +#endif CheckPlayerInfoTimeouts(); } diff --git a/Source/storm/storm_svid.cpp b/Source/storm/storm_svid.cpp index b9689a1bc..edba95f1c 100644 --- a/Source/storm/storm_svid.cpp +++ b/Source/storm/storm_svid.cpp @@ -285,7 +285,11 @@ bool SVidPlayBegin(const char *filename, int flags) if (renderer != nullptr) { int renderWidth = static_cast(SVidWidth); int renderHeight = static_cast(SVidHeight); +#ifdef PSP + texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, renderWidth, renderHeight); +#else texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, renderWidth, renderHeight); +#endif if (SDL_RenderSetLogicalSize(renderer, renderWidth, renderHeight) <= -1) { ErrSdl(); } @@ -379,7 +383,11 @@ void SVidPlayEnd() #ifndef USE_SDL1 if (renderer != nullptr) { +#ifdef PSP + texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); +#else texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); +#endif if (renderer != nullptr && SDL_RenderSetLogicalSize(renderer, gnScreenWidth, gnScreenHeight) <= -1) { ErrSdl(); } diff --git a/Source/utils/display.cpp b/Source/utils/display.cpp index 18c180e27..d711aa3da 100644 --- a/Source/utils/display.cpp +++ b/Source/utils/display.cpp @@ -387,7 +387,11 @@ void ReinitializeTexture() auto quality = StrCat(static_cast(*sgOptions.Graphics.scaleQuality)); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, quality.c_str()); +#ifdef PSP + texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); +#else texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); +#endif } void ReinitializeIntegerScale()