From 290e48615026745bc4f45d9571e73dd5cc549dd2 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 3 Apr 2023 03:12:18 +0200 Subject: [PATCH] Add Wii and Wii U builds --- .circleci/config.yml | 24 +++++++++++++ CMake/Platforms.cmake | 8 +++++ CMake/platforms/wii.cmake | 48 +++++++++++++++++++++++++ CMake/platforms/wiiu.cmake | 23 ++++++++++++ CMakeLists.txt | 17 +++++++++ Packaging/wii/icon.png | Bin 0 -> 8016 bytes Packaging/wii/meta.xml.in | 9 +++++ Source/storm/storm_net.cpp | 4 +++ Source/utils/sdl2_to_1_2_backports.cpp | 4 ++- 9 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 CMake/platforms/wii.cmake create mode 100644 CMake/platforms/wiiu.cmake create mode 100644 Packaging/wii/icon.png create mode 100644 Packaging/wii/meta.xml.in diff --git a/.circleci/config.yml b/.circleci/config.yml index cdffd01d3..434f3dabb 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -28,6 +28,28 @@ jobs: - run: /opt/devkitpro/portlibs/switch/bin/aarch64-none-elf-cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo - run: cmake --build build -j 2 - store_artifacts: {path: ./build/devilutionx.nro, destination: devilutionx.nro} + wii: + docker: + - image: devkitpro/devkitppc:latest + working_directory: ~/repo + steps: + - checkout + - run: apt-get update -y + - run: apt-get install -y gettext smpq + - run: /opt/devkitpro/portlibs/wii/bin/powerpc-eabi-cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo + - run: cmake --build build -j 2 + - store_artifacts: {path: ./build/devilutionx.dol, destination: devilutionx.dol} + wiiu: + docker: + - image: devkitpro/devkitppc:latest + working_directory: ~/repo + steps: + - checkout + - run: apt-get update -y + - run: apt-get install -y gettext smpq + - run: /opt/devkitpro/portlibs/wiiu/bin/powerpc-eabi-cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=RelWithDebInfo + - run: cmake --build build -j 2 + - store_artifacts: {path: ./build/devilutionx.rpx, destination: devilutionx.rpx} 3ds: docker: - image: devkitpro/devkitarm:latest @@ -73,5 +95,7 @@ workflows: - linux_x86_64 - switch - 3ds + - wii + - wiiu - amigaos-m68k - vita diff --git a/CMake/Platforms.cmake b/CMake/Platforms.cmake index 56e138f1b..ee2de3454 100644 --- a/CMake/Platforms.cmake +++ b/CMake/Platforms.cmake @@ -47,6 +47,14 @@ if(NINTENDO_3DS) include(platforms/n3ds) endif() +if(NINTENDO_WII) + include(platforms/wii) +endif() + +if(WIIU) + include(platforms/wiiu) +endif() + if(VITA) include("$ENV{VITASDK}/share/vita.cmake" REQUIRED) include(platforms/vita) diff --git a/CMake/platforms/wii.cmake b/CMake/platforms/wii.cmake new file mode 100644 index 000000000..dbe006711 --- /dev/null +++ b/CMake/platforms/wii.cmake @@ -0,0 +1,48 @@ +#General compilation options +set(ASAN OFF) +set(UBSAN OFF) +set(BUILD_TESTING OFF) +set(BUILD_ASSETS_MPQ OFF) +set(DEVILUTIONX_SYSTEM_LIBSODIUM OFF) +set(DEVILUTIONX_SYSTEM_LIBFMT OFF) +set(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF) +set(DEVILUTIONX_STATIC_LIBSODIUM ON) +set(DEVILUTIONX_STATIC_LIBFMT ON) +set(DISABLE_ZERO_TIER ON) +set(LIBMPQ_FILE_BUFFER_SIZE 32768) +set(PREFILL_PLAYER_NAME ON) +set(DEVILUTIONX_GAMEPAD_TYPE Nintendo) +set(NOEXIT ON) +set(NONET ON) +set(USE_SDL1 ON) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/threads-stub") + +list(APPEND DEVILUTIONX_PLATFORM_COMPILE_DEFINITIONS __WII__) + +# The 3ds build handles the stripping in a custom way. +set(DEVILUTIONX_DISABLE_STRIP ON) + +#SDL Joystick axis mapping (circle-pad/C-stick) +set(JOY_AXIS_LEFTX 0) +set(JOY_AXIS_LEFTY 1) +set(JOY_AXIS_RIGHTX 2) +set(JOY_AXIS_RIGHTY 3) +#SDL Joystick hat mapping (D-pad) +set(JOY_HAT_DPAD_UP_HAT 0) +set(JOY_HAT_DPAD_RIGHT_HAT 0) +set(JOY_HAT_DPAD_DOWN_HAT 0) +set(JOY_HAT_DPAD_LEFT_HAT 0) +set(JOY_HAT_DPAD_UP 1) +set(JOY_HAT_DPAD_RIGHT 2) +set(JOY_HAT_DPAD_DOWN 4) +set(JOY_HAT_DPAD_LEFT 8) +#SDL Joystick button mapping (A / B and X / Y inverted) +set(JOY_BUTTON_A 0) +set(JOY_BUTTON_B 1) +set(JOY_BUTTON_X 2) +set(JOY_BUTTON_Y 3) +set(JOY_BUTTON_LEFTSHOULDER 8) +set(JOY_BUTTON_RIGHTSHOULDER 7) +set(JOY_BUTTON_BACK 4) +set(JOY_BUTTON_START 5) diff --git a/CMake/platforms/wiiu.cmake b/CMake/platforms/wiiu.cmake new file mode 100644 index 000000000..2dffcfaed --- /dev/null +++ b/CMake/platforms/wiiu.cmake @@ -0,0 +1,23 @@ +#General compilation options +set(ASAN OFF) +set(UBSAN OFF) +set(BUILD_TESTING OFF) +set(BUILD_ASSETS_MPQ OFF) +set(DEVILUTIONX_SYSTEM_LIBSODIUM OFF) +set(DEVILUTIONX_SYSTEM_LIBFMT OFF) +set(DEVILUTIONX_SYSTEM_SDL_IMAGE OFF) +set(DEVILUTIONX_STATIC_LIBSODIUM ON) +set(DEVILUTIONX_STATIC_LIBFMT ON) +set(DISABLE_ZERO_TIER ON) +set(LIBMPQ_FILE_BUFFER_SIZE 32768) +set(PREFILL_PLAYER_NAME ON) +set(DEVILUTIONX_GAMEPAD_TYPE Nintendo) +set(NOEXIT ON) +set(NONET ON) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/threads-stub") + +list(APPEND DEVILUTIONX_PLATFORM_COMPILE_DEFINITIONS __WIIU__) + +# The 3ds build handles the stripping in a custom way. +set(DEVILUTIONX_DISABLE_STRIP ON) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa31c8305..ee6488a11 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -445,6 +445,23 @@ if(PS4) "DVLX00001" "DevilutionX" "${PROJECT_VERSION}") endif() +if(NINTENDO_WII) + target_link_libraries(${BIN_TARGET} PUBLIC aesnd wiikeyboard fat) + ogc_create_dol(${BIN_TARGET}) + string(TIMESTAMP WII_DATE "%Y%m%d000000") + configure_file(Packaging/wii/meta.xml.in Packaging/wii/meta.xml @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/devilutionx.dol + RENAME boot.dol + DESTINATION devilutionx COMPONENT wii) + install(FILES Packaging/wii/icon.png + ${CMAKE_CURRENT_BINARY_DIR}/Packaging/wii/meta.xml + DESTINATION devilutionx COMPONENT wii) +endif() + +if(WIIU) + wut_create_rpx(${BIN_TARGET}) +endif() + if(NINTENDO_3DS) set(APP_TITLE "DevilutionX") set(APP_DESCRIPTION "DevilutionX port for 3DS") diff --git a/Packaging/wii/icon.png b/Packaging/wii/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b7db443e63826692dd46619c6607d9c33a64df GIT binary patch literal 8016 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 SBrx9q0000 + + DevilutionX + Diasurgical + @PLAYER_VERSION_FULL@ + @WII_DATE@ + Diablo 1 port + DevilutionX is a port of Diablo and Hellfire that strives to make it simple to run the game while providing engine improvements, bugfixes, and some optional quality of life features. + diff --git a/Source/storm/storm_net.cpp b/Source/storm/storm_net.cpp index ba347c6f4..830aa5e15 100644 --- a/Source/storm/storm_net.cpp +++ b/Source/storm/storm_net.cpp @@ -20,7 +20,11 @@ namespace devilution { namespace { std::unique_ptr dvlnet_inst; bool GameIsPublic = {}; +#ifdef __WIIU__ +uint32_t dwLastError = 0; +#else thread_local uint32_t dwLastError = 0; +#endif #ifndef NONET SdlMutex storm_net_mutex; diff --git a/Source/utils/sdl2_to_1_2_backports.cpp b/Source/utils/sdl2_to_1_2_backports.cpp index 7e4879de2..5804afd18 100644 --- a/Source/utils/sdl2_to_1_2_backports.cpp +++ b/Source/utils/sdl2_to_1_2_backports.cpp @@ -696,7 +696,7 @@ char *SDL_GetPrefPath(const char *org, const char *app) #else namespace { -#if !defined(__QNXNTO__) && !defined(__amigaos__) +#if !defined(__QNXNTO__) && !defined(__amigaos__) && !defined(__WII__) char *readSymLink(const char *path) { // From sdl2-2.0.9/src/filesystem/unix/SDL_sysfilesystem.c @@ -780,6 +780,8 @@ char *SDL_GetBasePath() retval = SDL_strdup("file:sdmc:/3ds/devilutionx/"); #elif defined(__amigaos__) retval = SDL_strdup("PROGDIR:"); +#elif defined(__WII__) + retval = SDL_strdup(""); #else /* is a Linux-style /proc filesystem available? */