Difference between revisions of "Compiling ScummVM/Wii"

Jump to navigation Jump to search
1,269 bytes added ,  19:40, 18 February 2011
then again, this isn't really required
(wii build instructions)
 
(then again, this isn't really required)
 
(8 intermediate revisions by the same user not shown)
Line 2: Line 2:


This page describes how you build a Wii or Gamecube binary from the ScummVM source tree.
This page describes how you build a Wii or Gamecube binary from the ScummVM source tree.
First, you have to choose how to obtain the sources:
* a downloaded [http://scummvm.org/downloads.php#source sources archive]
* a [https://sourceforge.net/svn/?group_id=37116 SVN] checkout (latest is ''trunk'')


Required tools and/or libraries might change at times, and differences for various ScummVM versions are pointed out when necessary.
Required tools and/or libraries might change at times, and differences for various ScummVM versions are pointed out when necessary.
Line 11: Line 7:
= Mandatory tools and libraries =
= Mandatory tools and libraries =


* [http://devkitpro.org/ devkitPPC] as a build environment, please refer to its documentation to set it up
* [http://devkitpro.org/ devkitPPC] as a build environment, please refer to its documentation how to set it up
* libogc and libfat
* libogc and libfat


The latter two libraries are part of devkitPPC and are already installed with it. However, official ScummVM Wii and Gamecube binaries use unofficial versions, available via [http://git.or.cz/ git] [http://git.hackmii.com/ here].
The latter two libraries are part of devkitPPC and are already installed with it. However, official ScummVM Wii and Gamecube binaries use unofficial versions, available via [http://git.or.cz/ git] [http://repo.or.cz/w/libogc.git here] and [http://repo.or.cz/w/libfat.git here].
 
Reasons:
 
* libogc's <tt>malloc()</tt> has been [http://git.hackmii.com/git.php?tag=ce9b85c1fa659d39ac26b72b82e31844c50bfdf6&p=libogc.git&a=commitdiff&h=ce9b85c1fa659d39ac26b72b82e31844c50bfdf6&hb=28e632dab2820a98ea3399e3090761581f034df7&tm=1366734 modfied] to utilize [http://wiibrew.org/wiki/Memory_Map MEM2]. Without this patch, a single binary with all game engines won't be able to run all games (like COMI) due to memory limits
* libfat gained a read-ahead cache, without it video sequences will stutter
 
Nevertheless, ScummVM should build just fine with either versions.


== Versions differences ==
== Versions differences ==


* v0.12.0 (first official version) is built with devkitPPC r15
* v0.12.0 (first official version) is built with devkitPPC r15
* ''trunk'' (and eventually v0.13.0) changed to devkitPPC r16
* starting with v0.13.0, devkitPPC r16 is used
* starting with revision 44189, [http://repo.or.cz/w/libgxflux.git libgxflux] in mandatory


= Optional libraries =
= Optional libraries =
Line 37: Line 27:
== Precompiled binaries ==
== Precompiled binaries ==


Get [http://static.hackmii.com/dhewg/devkitPPC_r16_3rd_libs.tar.bz2 this archive] and extract it in <tt>$DEVKITPRO/3rd/</tt> you just created. The directory structure should look like <tt>$DEVKITPRO/3rd/wii/include</tt>, <tt>$DEVKITPRO/3rd/wii/lib</tt> and so on.
Get [http://static.hackmii.com/dhewg/devkitPPC_r16_3rd_libs.tar.bz2 this archive] and extract it in <tt>$DEVKITPRO/3rd/</tt> you just created. The directory structure should look like
<tt>$DEVKITPRO/3rd/wii/include</tt>
<tt>$DEVKITPRO/3rd/wii/lib</tt>
and so on. The binaries will work on Wii and Gamecube.


== Build the libraries yourself ==
== Build the libraries yourself ==
Line 63: Line 56:
  echo "./configure --host=ppc --disable-shared --prefix=${DEVKITPRO}/3rd/wii"
  echo "./configure --host=ppc --disable-shared --prefix=${DEVKITPRO}/3rd/wii"


Save it to a file (like <tt>gekkoenv.sh</tt> and run
Save it to a file (like <tt>gekkoenv.sh</tt>) and run


  . ./gekkoenv.sh
  . ./gekkoenv.sh
Line 71: Line 64:
=== Tremor ===
=== Tremor ===


Get a SVN checkout (rev 15592 as of this writing):
Get a SVN checkout (r16259 as of this writing):


  svn co http://svn.xiph.org/branches/lowmem-branch/Tremor
  svn co http://svn.xiph.org/trunk/Tremor


patch it:
patch it:
Line 83: Line 76:
   #include <sys/types.h>
   #include <sys/types.h>
   
   
  -#if 0
  -#if BYTE_ORDER==LITTLE_ENDIAN
  +#if BYTE_ORDER==LITTLE_ENDIAN
  +#if 0
   union magic {
   union magic {
     struct {
     struct {
Line 92: Line 85:
   #endif
   #endif
   
   
  -#if 1
  -#if BYTE_ORDER==BIG_ENDIAN
  +#if BYTE_ORDER==BIG_ENDIAN
  +#if 1
   union magic {
   union magic {
     struct {
     struct {
Line 148: Line 141:
= Compiling =
= Compiling =


This port doesn't utilize ScummVM's <tt>configure</tt> system, instead it comes with a simple Makefile. The port code can be found in two directories:
== 1.0.0 and greater ==
 
The Wii and Gamecube port can be compiled with the <tt>configure</tt> script. The most basic way to accomplish this is to run:
 
./configure --host=wii
make
 
If you want to build a Gamecube binary, just use
 
./configure --host=gamecube
make
 
instead.
 
The script supports various arguments, which you can use to en- or disable features, see <tt>./configure --help</tt>.
 
Two of the [[#Optional libraries|optional libraries]] are already part of libogc:
* zlib, used to (de-)compress save games. It gets automatically detected with a recent libogc version.
* libmad, used for MP3 playback. It gets automatically detected with a recent libogc version.
 
Others are not, and if you want support for it, you need cross-compiled binaries:
* libFLAC, used for FLAC lossless audio playback. Use the ''--with-flac-prefix=<directory>'' argument.
* Tremor, used for OGG audio playback.  Use the ''--with-tremor-prefix=<directory>'' argument.
 
If you followed the [[#Optional libraries|above description]] and have those libraries in <tt>$DEVKITPRO/3rd/wii</tt>, the <tt>configure</tt> command line would look like this:
 
./configure --host=wii --with-flac-prefix=$DEVKITPRO/3rd/wii --with-tremor-prefix=$DEVKITPRO/3rd/wii
 
Additionally, there're a few make targets for your convenience:
 
* <tt>make wiiload</tt> - uploads a compiled Wii binary over TCP/IP.
* <tt>make geckoupload</tt> - uploads a compiled binary over a USBGecko device.
* <tt>make wiidist</tt> - copies all required files for the Wii into the ''dist'' subdirectory, read to copy onto your SD card for the Homebrew Channel.
* <tt>make gcdist</tt> - same for Gamecube.
* <tt>make wiigdb</tt> - starts GDB and loads your compiled binary, ready to debug.
* <tt>make wiidebug</tt> - starts GDB with your binary and attaches remotely to the Wii via a USBGecko device.
 
== v0.13.x and below ==
 
This port doesn't utilize ScummVM's <tt>configure</tt> system for v0.12.0, instead it comes with a simple Makefile. The port code can be found in two directories:


  ./backends/fs/wii/
  ./backends/fs/wii/
Line 157: Line 189:
Change your working directory to the latter and open the <tt>Makefile</tt> in a editor. You'll find some variables on top of that file, adjust those to your liking. Everything should be self-explanatory, some are even documented. Here are some random hints:
Change your working directory to the latter and open the <tt>Makefile</tt> in a editor. You'll find some variables on top of that file, adjust those to your liking. Everything should be self-explanatory, some are even documented. Here are some random hints:


* There is no support for dynamic libraries on the Wii, keep an engine toggle at <tt>STATIC_PLUGIN</tt> or disable it by just commenting that line
* There is no support for dynamic libraries on the Wii or Gamecube, keep an engine toggle at <tt>STATIC_PLUGIN</tt> or disable it by just commenting that line
* Vanilla scalers do not work, the code is i386 only
* Vanilla scalers are not supported by the Wii port
* [http://www.zlib.net/ zlib] and [http://www.underbit.com/products/mad/ MAD] are part of libogc
* [http://www.zlib.net/ zlib] and [http://www.underbit.com/products/mad/ MAD] are part of libogc
* MPEG2 support has been dropped from the Wii port, if you want supports for it, you have to cross compile [http://libmpeg2.sourceforge.net/ libmpeg2]
* MPEG2 support has been dropped from the Wii port, if you want support for it, you have to cross compile [http://libmpeg2.sourceforge.net/ libmpeg2]


When you're done with the <tt>Makefile</tt>, save it and run <tt>GNU make</tt>. That's it, the build system is now building an ''.elf'' and a ''.dol''.
When you're done with the <tt>Makefile</tt>, save it and run <tt>make</tt> (GNU version). That's it, the build system is now building an ''.elf'' and a ''.dol''.


Test the ''.dol'' by uploading it using ''wiiload'' via:
Test the ''.dol'' by uploading it using ''wiiload'' via:
24

edits

Navigation menu