Difference between revisions of "Compiling ScummVM/macOS"

From ScummVM :: Wiki
Jump to navigation Jump to search
(→‎4. Manual compilation: Add link to SDL_net)
m (Text replacement - "<source lang=" to "<syntaxhighlight lang=")
Line 11: Line 11:
 
After installing Xcode, open a terminal and type:
 
After installing Xcode, open a terminal and type:
  
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
xcode-select --install
 
xcode-select --install
 
</source>
 
</source>
Line 21: Line 21:
 
Install Homebrew by pasting the following into a terminal:
 
Install Homebrew by pasting the following into a terminal:
  
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
</source>
 
</source>
Line 35: Line 35:
  
 
=== 1. Homebrew ===
 
=== 1. Homebrew ===
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
brew install sdl2 sdl2_net jpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng theora faad2 freetype lzlib fluid-synth
 
brew install sdl2 sdl2_net jpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng theora faad2 freetype lzlib fluid-synth
 
</source>
 
</source>
  
 
=== 2. MacPorts ===
 
=== 2. MacPorts ===
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
sudo port install libsdl2 libsdl2_net libjpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng libtheora faad2 freetype zlib fluidsynth
 
sudo port install libsdl2 libsdl2_net libjpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng libtheora faad2 freetype zlib fluidsynth
 
</source>
 
</source>
  
 
=== 3. Fink ===
 
=== 3. Fink ===
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
TODO
 
TODO
 
</source>
 
</source>
Line 75: Line 75:
  
 
All the libraries are compiled and installed in the same way:
 
All the libraries are compiled and installed in the same way:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
cd thelib-src
 
cd thelib-src
 
./configure --prefix=/path/to/install
 
./configure --prefix=/path/to/install
Line 83: Line 83:
  
 
The default installation path is /usr/local, but you will need admin privileges to install the libraries in this location.
 
The default installation path is /usr/local, but you will need admin privileges to install the libraries in this location.
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
cd thelib-src
 
cd thelib-src
 
./configure
 
./configure
Line 91: Line 91:
  
 
If you want your compilation to be compatible with older system, use the -mmacosx-version-min flag (for example -mmacosx-version-min=10.5). To force compilation in 32 bits use -arch i386. You can do that by setting environment variables before compiling all the libraries and ScummVM:
 
If you want your compilation to be compatible with older system, use the -mmacosx-version-min flag (for example -mmacosx-version-min=10.5). To force compilation in 32 bits use -arch i386. You can do that by setting environment variables before compiling all the libraries and ScummVM:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
export LDFLAGS="-arch i386 -mmacosx-version-min=10.5"
 
export LDFLAGS="-arch i386 -mmacosx-version-min=10.5"
 
export CFLAGS="-arch i386 -mmacosx-version-min=10.5"
 
export CFLAGS="-arch i386 -mmacosx-version-min=10.5"
Line 98: Line 98:
  
 
bzip2 is an exception. There is no configure and you directly call make with options. For example:
 
bzip2 is an exception. There is no configure and you directly call make with options. For example:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
make CFLAGS="-arch i386 -mmacosx-version-min=10.5 -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64" LDFLAGS="-arch i386 -mmacosx-version-min=10.5"
 
make CFLAGS="-arch i386 -mmacosx-version-min=10.5 -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64" LDFLAGS="-arch i386 -mmacosx-version-min=10.5"
 
make install PREFIX=/Users/criezy/Dev/scummvm-releases/libs
 
make install PREFIX=/Users/criezy/Dev/scummvm-releases/libs
Line 126: Line 126:
 
=== Configuring ScummVM ===
 
=== Configuring ScummVM ===
 
Run the configure script:
 
Run the configure script:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
./configure
 
./configure
 
</source>
 
</source>
Line 132: Line 132:
 
If no errors come up, you should be ready to compile ScummvM.
 
If no errors come up, you should be ready to compile ScummvM.
 
For a list of optional features (eg additional, not yet enabled engines) run:
 
For a list of optional features (eg additional, not yet enabled engines) run:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
./configure --help
 
./configure --help
 
</source>
 
</source>
Line 145: Line 145:
 
=== Compiling ScummVM ===
 
=== Compiling ScummVM ===
 
Just run make (with -j to compile several files in parallel). For example
 
Just run make (with -j to compile several files in parallel). For example
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
make -j4
 
make -j4
 
</source>
 
</source>
  
 
To recompile everything and not just the modified files:
 
To recompile everything and not just the modified files:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
make clean
 
make clean
 
make -j4
 
make -j4
Line 157: Line 157:
 
=== Installing ScummVM ===
 
=== Installing ScummVM ===
 
You can run ScummVM from the command line in the build directory:
 
You can run ScummVM from the command line in the build directory:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
./scummvm
 
./scummvm
 
</source>
 
</source>
  
 
You can also generate an application bundle and move this one anywhere you want:
 
You can also generate an application bundle and move this one anywhere you want:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
make bundle
 
make bundle
 
</source>
 
</source>
Line 174: Line 174:
 
=== Creating an Xcode project ===
 
=== Creating an Xcode project ===
 
* Compile '''create_project''' inside devtools/create_project
 
* Compile '''create_project''' inside devtools/create_project
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
make devtools/create_project
 
make devtools/create_project
 
</source>
 
</source>
 
Or alternatively you can use the Xcode project in devtools/create_project/xcode. Open it in Xcode or run the following command:
 
Or alternatively you can use the Xcode project in devtools/create_project/xcode. Open it in Xcode or run the following command:
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
cd devtools/create_project/xcode; xcodebuild
 
cd devtools/create_project/xcode; xcodebuild
 
</source>
 
</source>
 
* Run create_project '''from the root ScummVM directory''':
 
* Run create_project '''from the root ScummVM directory''':
<source lang="bash">
+
<syntaxhighlight lang="bash">
 
./devtools/create_project/create_project . --xcode
 
./devtools/create_project/create_project . --xcode
 
</source>
 
</source>

Revision as of 15:02, 25 October 2018

Compiling ScummVM under macOS

Compiling ScummVM under macOS requires setting up the build environment first, and then compiling the sources either via command line, or the Xcode GUI.

Things needed

Xcode

This can be installed from the Mac App Store.

Xcode command line tools

After installing Xcode, open a terminal and type:

<syntaxhighlight lang="bash"> xcode-select --install </source>

Package manager

Getting the required libraries is easier with a package manager. The three most well-known ones are Homebrew, MacPorts, and Fink.

1. Homebrew (recommended)

Install Homebrew by pasting the following into a terminal:

<syntaxhighlight lang="bash"> ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" </source>

2. MacPorts

Install MacPorts by downloading and running the installer from the MacPorts installation page.

3. Fink

Install Fink by downloading and building the source from the Fink Source Release page.

Obtaining the required libraries

After downloading the Xcode command line tools and a package manager, enter the following command to install all the required libraries:

1. Homebrew

<syntaxhighlight lang="bash"> brew install sdl2 sdl2_net jpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng theora faad2 freetype lzlib fluid-synth </source>

2. MacPorts

<syntaxhighlight lang="bash"> sudo port install libsdl2 libsdl2_net libjpeg-turbo libmpeg2 libogg libvorbis flac libmad libpng libtheora faad2 freetype zlib fluidsynth </source>

3. Fink

<syntaxhighlight lang="bash"> TODO </source>

4. Manual compilation

Get the source code from the libraries. With this method you will not only need to get the libraries ScummVM uses directly, but also those they depend on.

All the libraries are compiled and installed in the same way: <syntaxhighlight lang="bash"> cd thelib-src ./configure --prefix=/path/to/install make make install </source>

The default installation path is /usr/local, but you will need admin privileges to install the libraries in this location. <syntaxhighlight lang="bash"> cd thelib-src ./configure make sudo make install </source>

If you want your compilation to be compatible with older system, use the -mmacosx-version-min flag (for example -mmacosx-version-min=10.5). To force compilation in 32 bits use -arch i386. You can do that by setting environment variables before compiling all the libraries and ScummVM: <syntaxhighlight lang="bash"> export LDFLAGS="-arch i386 -mmacosx-version-min=10.5" export CFLAGS="-arch i386 -mmacosx-version-min=10.5" export CXXFLAGS="-arch i386 -mmacosx-version-min=10.5" </source>

bzip2 is an exception. There is no configure and you directly call make with options. For example: <syntaxhighlight lang="bash"> make CFLAGS="-arch i386 -mmacosx-version-min=10.5 -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64" LDFLAGS="-arch i386 -mmacosx-version-min=10.5" make install PREFIX=/Users/criezy/Dev/scummvm-releases/libs </source>

If you plan to build the ScummVM app bundle, you will need to generate static libraries. For most of the libraries this is done by default, but for a few you need to specify you want static libraries when invoking configure. Here are suggested configure options for each library. If the library is not listed in the table below this means the default is fine.

Library configure flags Comments
pkg-config --with-internal-glib
glib --enable-static
libmpeg2 --disable-sdl

Need to add -std=gnu89 to CFLAGS (for example 'export CFLAGS="-std=gnu89"' before invoking configure)

FLAC --enable-static --disable-asm-optimizations
Theora --disable-examples
  • Need to edit configure before running it to remove flag -fforce-addr
  • Examples do not compile with libpng 1.6

Compiling ScummVM via the command line

Configuring ScummVM

Run the configure script: <syntaxhighlight lang="bash"> ./configure </source>

If no errors come up, you should be ready to compile ScummvM. For a list of optional features (eg additional, not yet enabled engines) run: <syntaxhighlight lang="bash"> ./configure --help </source>

Here is a list of some options you may want to use:

  • --enable-all-engines or --enable-engine=foo,bar to enable unsupported engines (not compiled by default)
  • --with-staticlib=/path/to/install/dir if your libraries are not in a standard place (e.g. you compiled the libraries manually with a custom installation directory). This is only used when building the application bundle.
  • --enable-updates --with-sparkle-prefix=/path/to/sparkle to enable Sparkle (disabled by default). The path should be the path to the directory that contains the Sparkle.framework and not the path to the Sparkle.framework itself.

Note: If you want to use Sparkle, there are some additional steps to do such as setting up DSA signatures. See [1] for details. ScummVM expects to find the DSA public key in dist/macosx.dsa_pub.pem.

Compiling ScummVM

Just run make (with -j to compile several files in parallel). For example <syntaxhighlight lang="bash"> make -j4 </source>

To recompile everything and not just the modified files: <syntaxhighlight lang="bash"> make clean make -j4 </source>

Installing ScummVM

You can run ScummVM from the command line in the build directory: <syntaxhighlight lang="bash"> ./scummvm </source>

You can also generate an application bundle and move this one anywhere you want: <syntaxhighlight lang="bash"> make bundle </source>

Some features such as dock integration are only available if you build the bundle.

Also if you run scummvm from the command line, you will need to set the Theme path in the ScummVM options so that it finds the modern theme. The themes are in gui/themes/ in the source code repository.

Compiling ScummVM via the Xcode GUI

Creating an Xcode project

  • Compile create_project inside devtools/create_project

<syntaxhighlight lang="bash"> make devtools/create_project </source> Or alternatively you can use the Xcode project in devtools/create_project/xcode. Open it in Xcode or run the following command: <syntaxhighlight lang="bash"> cd devtools/create_project/xcode; xcodebuild </source>

  • Run create_project from the root ScummVM directory:

<syntaxhighlight lang="bash"> ./devtools/create_project/create_project . --xcode </source>

Note that `create_project` accepts most of the same flags that `configure` accepts.

Build the Xcode project

  • Open the Xcode project
  • Go to Product -> Scheme and set the scheme to "ScummVM-macOS"
  • Go to Product -> Scheme -> Edit Scheme -> Run tab -> Options tab and uncheck "Allow debugging when using document Versions Browser"
  • Build with Product -> Build or Product -> Run

Further reading