329
edits
m (Edited link to port forum (previously pointed to PS2 port forum)) |
Rootfather (talk | contribs) m |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 13: | Line 13: | ||
buildbot=yes| | buildbot=yes| | ||
firstversion=2.1.1| | firstversion=2.1.1| | ||
maintainer=[[User: | maintainer=[[User:phcoder|phcoder]]| | ||
packager=[[User: | packager=[[User:phcoder|phcoder]]| | ||
pkgend=-3ds.zip| | pkgend=-3ds.zip| | ||
icon=3ds| | icon=3ds| | ||
Line 44: | Line 44: | ||
}} | }} | ||
== | == About == | ||
ScummVM has been ported to the Nintendo 3DS. | |||
For more information, including how to install and use ScummVM, see the [https://docs.scummvm.org/en/latest/other_platforms/nintendo_3ds.html Nintendo 3DS user documentation]. | |||
=== | == Developer information == | ||
=== | === Compiling ScummVM === | ||
==== Prerequisites ==== | |||
== | |||
* Latest version of devkitPro, which comes with devkitARM and <code>libctru</code> | * Latest version of devkitPro, which comes with devkitARM and <code>libctru</code> | ||
* <code>citro3d</code> thorugh devkitPro's pacman | * <code>citro3d</code> thorugh devkitPro's pacman | ||
* Optional: You should compile third-party libraries for the 3ds (commonly referred to as portlibs in the devkitPRO community). Some games requires these to operate properly. | * Optional: You should compile third-party libraries for the 3ds (commonly referred to as portlibs in the devkitPRO community). Some games requires these to operate properly. | ||
=== Compiling third-party libraries === | ==== Compiling third-party libraries ==== | ||
It is strongly recommended that you use devkitPro's pacman in order to get the most recent | It is strongly recommended that you use devkitPro's pacman in order to get the most recent | ||
portlibs for your build. | portlibs for your build. | ||
Line 136: | Line 64: | ||
{|class="wikitable" | {|class="wikitable" | ||
! Library || Package | ! Library || Package | ||
|- | |- | ||
| zlib || 3ds-zlib | | zlib || 3ds-zlib | ||
|- | |- | ||
| libpng || 3ds-libpng | | libpng || 3ds-libpng | ||
|- | |- | ||
| libjpeg || 3ds-libjpeg-turbo | | libjpeg || 3ds-libjpeg-turbo | ||
|- | |- | ||
| freetype2 || 3ds-freetype | | freetype2 || 3ds-freetype | ||
|- | |- | ||
| libmad || 3ds-libmad | | libmad || 3ds-libmad | ||
|- | |- | ||
| libogg || 3ds-libogg | | libogg || 3ds-libogg | ||
|- | |- | ||
| tremor || 3ds-libvorbisidec | | tremor || 3ds-libvorbisidec | ||
|- | |- | ||
| flac || 3ds-flac | | flac || 3ds-flac | ||
|- | |- | ||
| curl || 3ds-curl | | libtheora || 3ds-libtheora | ||
|- | |||
| curl || 3ds-curl | |||
|} | |} | ||
Line 187: | Line 117: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
mkdir -p $ | mkdir -p $PORTLIBS_PREFIX | ||
./configure --prefix=$ | ./configure --prefix=$PORTLIBS_PREFIX --host=arm-none-eabi --disable-shared --enable-static | ||
make | make | ||
make install | make install | ||
Line 195: | Line 125: | ||
Most libraries used can be compiled with same commands and configuration flags. | Most libraries used can be compiled with same commands and configuration flags. | ||
=== Manually setting up the environment === | ==== Manually setting up the environment ==== | ||
In case you don't have the helpers package downloaded, you can use the following to set-up | In case you don't have the helpers package downloaded, you can use the following to set-up | ||
your environment variables. | your environment variables. | ||
Line 210: | Line 140: | ||
In the source directory of the library: | In the source directory of the library: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
export | export PORTLIBS_PREFIX=$DEVKITPRO/portlibs/3ds | ||
export PATH=$DEVKITARM/bin:$PATH | export PATH=$DEVKITARM/bin:$PATH | ||
export PKG_CONFIG_PATH=$ | export PKG_CONFIG_PATH=$PORTLIBS_PREFIX/lib/pkgconfig | ||
export PKG_CONFIG_LIBDIR=$ | export PKG_CONFIG_LIBDIR=$PORTLIBS_PREFIX/lib/pkgconfig | ||
export CFLAGS="-g -march=armv6k -mtune=mpcore -mfloat-abi=hard -O2 | export CFLAGS="-g -march=armv6k -mtune=mpcore -mfloat-abi=hard -O2 | ||
-mword-relocations -ffunction-sections -fdata-sections" | -mword-relocations -ffunction-sections -fdata-sections" | ||
export CPPFLAGS="-I$ | export CPPFLAGS="-I$PORTLIBS_PREFIX/include -I$CTRULIB/include" | ||
export LDFLAGS="-L$ | export LDFLAGS="-L$PORTLIBS_PREFIX/lib" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Compiling ScummVM == | ==== Compiling ScummVM ==== | ||
Do the following in a fresh terminal. | Do the following in a fresh terminal. | ||
Line 239: | Line 169: | ||
Note: In more recent codebases of ScummVM, you may or may not need to set the following beforehand: | Note: In more recent codebases of ScummVM, you may or may not need to set the following beforehand: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
export PKG_CONFIG_LIBDIR=$ | export PKG_CONFIG_LIBDIR=$PORTLIBS_PREFIX/lib/pkgconfig | ||
</syntaxhighlight> | </syntaxhighlight> | ||
See above for <code>$ | See above for <code>$PORTLIBS_PREFIX</code>. | ||
ScummVM doesn't provide the CA certificates bundle required by the cloud synchronization features. | ScummVM doesn't provide the CA certificates bundle required by the cloud synchronization features. | ||
Line 271: | Line 201: | ||
Note: using dynamic plugins as suggested is required when building with most or all of the | Note: using dynamic plugins as suggested is required when building with most or all of the | ||
game engines enabled in order to keep the memory usage low and avoid stability issues. | game engines enabled in order to keep the memory usage low and avoid stability issues. | ||
=== Debugging ScummVM === | |||
''This section is based on information from [https://bugs.scummvm.org/ticket/11292#comment:4 Trac #11292].'' | |||
When reporting crashes to the issue tracker, it is recommended that you capture a backtrace of the crash? It's a bit of a convoluted process but it's not possible to do much without it. It's described here if you are not familiar: | |||
* Create a build of ScummVM using "./configure --host=3ds --disable-all-engines --enable-engines=scumm_7_8,he,sci32 --enable-all-engines --enable-debug" | |||
* Get devkitARM from here: https://devkitpro.org/wiki/Getting_Started. You don't need to get the whole thing working, just the GDB debugger. | |||
* Start ScummVM on your 3DS, go to the Rosalina menu (L+Down+Select), enable the debugger (Debugger options > enable debugger), go to the process list and select ScummVM (3dsx_app if you used the homebrew launcher). Take note of the IP address of your 3DS and the debugger port. They are displayed in the menu. For example, it might look like 192.168.1.87:4000. Close the Rosalina menu. If it closes ScummVM, try again, but open a dialog in ScummVM before opening the Rosalina menu (The keypress to close Rosalina is sometimes passed to ScummVM). | |||
* On your computer in the devkitARM shell, run "arm-none-eabi-gdb /path/to/scummvm.elf" (with the location where you downloaded that file). Then, in GDB, enter "target remote 192.168.1.87:4000" (with your IP and port) to connect to the 3DS. Enter 'c' to resume execution. | |||
* On the 3DS, reproduce the crash. | |||
* On the computer, GDB should have trapped the error. Enter "thread apply all bt" to print a backtrace. | |||
Please copy the backtrace into the ticket as well as other warnings or messages you may see in the debugger output. | |||
In case you don't succeed in capturing a backtrace, please attach the crash dump from the Luma error screen (they are saved on the SD card in /luma/dumps). | |||
It's also recommended that you attach a copy of the log file, which can be found at "sdmc:/3ds/scummvm/scummvm.log". |
edits