TrustedUser, Bureaucrats, Administrators
442
edits
Vinterstum (talk | contribs) |
(Removes information now contained in the new docs, and adds a link to the new docs.) |
||
(27 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
This page explains how to compile your own version of [[ScummVM]] | This page explains how to compile your own version of [[ScummVM]] for [[iOS]] based devices (iPhone/iPad). See also [[Compiling ScummVM/macOS]]. | ||
== Using Xcode == | |||
You can compile ScummVM with the official tools from Apple. For more information, see the [https://docs.scummvm.org/en/latest/other_platforms/ios.html iOS page] in the [https://docs.scummvm.org/ user documentation]. | |||
== | == Using the command line == | ||
For jailbroken devices, it is also possible to compile the project from command line. You'll need a working toolchain, and some tools, like '''ldid''', to fake the code signature. | |||
Here is a script to download, and compile all the required tools. This script has been wrote for Debian 8.2, and should be run as root. | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
if [ $UID -ne 0 ]; then | |||
echo "This script should be run by the root user" | |||
exit 1 | |||
fi | |||
# Install the Clang compiler | |||
apt-get install -y clang-3.4 libclang-3.4-dev llvm-3.4 libtool bison flex automake subversion git pkg-config wget libssl-dev uuid-dev libxml2-dev || exit 1 | |||
# Add LLVM to the linker library path | |||
echo /usr/lib/llvm-3.4/lib > /etc/ld.so.conf.d/libllvm-3.4.conf | |||
ldconfig | |||
# Add symlinks for the LLVM headers | |||
ln -s /usr/lib/llvm-3.4/bin/llvm-config /usr/bin/llvm-config || exit 1 | |||
ln -s /usr/include/llvm-3.4/llvm /usr/include/llvm || exit 1 | |||
ln -s /usr/include/llvm-c-3.4/llvm-c /usr/include/llvm-c || exit 1 | |||
ln -s /usr/bin/clang-3.4 /usr/bin/clang || exit 1 | |||
ln -s /usr/bin/clang++-3.4 /usr/bin/clang++ || exit 1 | |||
# Build the linker | |||
svn checkout http://ios-toolchain-based-on-clang-for-linux.googlecode.com/svn/trunk/cctools-porting || exit 1 | |||
cd cctools-porting | |||
sed -i'' 's/proz -k=20 --no-curses/wget/g' cctools-ld64.sh | |||
./cctools-ld64.sh || exit 1 | |||
cd cctools-855-ld64-236.3 | |||
./autogen.sh || exit 1 | |||
./configure --prefix=/usr/local --target=arm-apple-darwin11 || exit 1 | |||
make || exit 1 | |||
make install || exit 1 | |||
cd ../.. | |||
# Install ios-tools | |||
wget https://ios-toolchain-based-on-clang-for-linux.googlecode.com/files/iphonesdk-utils-2.0.tar.gz || exit 1 | |||
tar xzf iphonesdk-utils-2.0.tar.gz | |||
cd iphonesdk-utils-2.0 | |||
patch -p0 <<_EOF | |||
*** genLocalization2/getLocalizedStringFromFile.cpp 2015-04-02 04:45:39.309837816 +0530 | |||
--- genLocalization2/getLocalizedStringFromFile.cpp 2015-04-02 04:45:11.525700021 +0530 | |||
*************** | |||
*** 113,115 **** | |||
clang::HeaderSearch headerSearch(headerSearchOptions, | |||
- fileManager, | |||
*pDiagnosticsEngine, | |||
--- 113,115 ---- | |||
clang::HeaderSearch headerSearch(headerSearchOptions, | |||
+ sourceManager, | |||
*pDiagnosticsEngine, | |||
*************** | |||
*** 129,134 **** | |||
false); | |||
- clang::HeaderSearch headerSearch(fileManager, | |||
*pDiagnosticsEngine, | |||
languageOptions, | |||
- pTargetInfo); | |||
ApplyHeaderSearchOptions(headerSearch, headerSearchOptions, languageOptions, pTargetInfo->getTriple()); | |||
--- 129,134 ---- | |||
false); | |||
+ clang::HeaderSearch headerSearch(fileManager);/*, | |||
*pDiagnosticsEngine, | |||
languageOptions, | |||
+ pTargetInfo);*/ | |||
ApplyHeaderSearchOptions(headerSearch, headerSearchOptions, languageOptio | |||
_EOF | |||
./autogen.sh || exit 1 | |||
CC=clang CXX=clang++ ./configure --prefix=/usr/local || exit 1 | |||
make || exit 1 | |||
make install || exit 1 | |||
# Install the iOS SDK 8.1 | |||
mkdir -p /usr/share/ios-sdk | |||
cd /usr/share/ios-sdk | |||
wget http://iphone.howett.net/sdks/dl/iPhoneOS8.1.sdk.tbz2 || exit 1 | |||
tar xjf iPhoneOS8.1.sdk.tbz2 | |||
rm iPhoneOS8.1.sdk.tbz2 | |||
</syntaxhighlight> | |||
Now, in order to compile ScummVM, execute the following commands: | |||
<syntaxhighlight lang="bash"> | |||
export SDKROOT=/usr/share/ios-sdk/iPhoneOS8.1.sdk | |||
export CC=ios-clang | |||
export CXX=ios-clang++ | |||
./configure --host=ios7 --disable-mt32emu --enable-release | |||
make ios7bundle | |||
</syntaxhighlight> | |||
At the end of the compilation, you'll find a '''ScummVM.app''' application: copy it over SSH, and reboot your device. | |||
= Cross-Compilation = | |||
Please note binaries generated with these instructions only work with jailbroken devices. | |||
=== | == Toolchain Setup == | ||
=== Toolchain === | |||
First you need to set up a toolchain for cross-compilation. On our buildbot we use [https://github.com/lordhoto/ios-toolchain this toolchain]. It is based on LLVM/Clang and contains instructions on how to set it up. | |||
=== External libs === | |||
In the previously linked toolchain a script to compile all libraries used by the iOS version of ScummVM is contained. Please refer to the toolchain's README file on how to build them. | |||
== Building ScummVM == | |||
=== Configuration === | |||
Before we can compile ScummVM we need to configure the source tree for building. This is usually only required once or when you want to alter build options. | |||
==== Choosing an iOS target ==== | |||
We feature two different iOS backends: | |||
* ''iphone'': Our legacy iOS backend, which supports all iOS3+ devices. | |||
* ''ios7'': Our modern iOS7+ backend, which only supports iOS7+ devices but features better integration for these. | |||
Depending on which backend you use you will need to use a different value for the ''TARGET'' environment variable. | |||
* For ''iphone'' use: | |||
<syntaxhighlight lang="bash"> | |||
export TARGET=arm-apple-darwin9 | |||
</syntaxhighlight> | |||
* For ''ios7'' use: | |||
<syntaxhighlight lang="bash"> | |||
export TARGET=arm-apple-darwin11 | |||
</syntaxhighlight> | |||
==== Setting up the Environment ==== | |||
<syntaxhighlight lang="bash"> | |||
export PATH="$IOS_TOOLCHAIN_BASE/bin:$IOS_TOOLCHAIN_BASE/$TARGET/bin:$IOS_TOOLCHAIN_BASE/$TARGET/usr/bin:$PATH" | |||
export CPPFLAGS="-isystem $IOS_TOOLCHAIN_BASE/$TARGET/usr/include" | |||
export LDFLAGS="-L$IOS_TOOLCHAIN_BASE/$TARGET/usr/lib" | |||
</syntaxhighlight> | |||
Where ''IOS_TOOLCHAIN_BASE'' contains the directory where you installed the toolchain. And ''TRAGET'' has been setup from the previous step. | |||
'''NOTE''': If you quit the shell you are using when configuring ScummVM and pick up compilation later, you will need to re-export only the ''PATH'' variable like described above. | |||
==== Configuring the Build ==== | |||
Then configure ScummVM for the iOS version you want to target. | |||
First, navigate to a path where you want your build files to be located (this can be the ScummVM root directory but does not have to be). | |||
Then run the following: | |||
<syntaxhighlight lang="bash"> | |||
./path/to/scummvm/configure --host=ios7 --with-staticlib-prefix=$IOS_TOOLCHAIN_BASE/$TARGET/usr | |||
</syntaxhighlight> | |||
Replace ''ios7'' with ''iphone'' if you want to build the older version of our iOS backend. | |||
=== Compilation === | |||
You can compile ScummVM with running make: | |||
<syntaxhighlight lang="bash"> | |||
make iphone | |||
</syntaxhighlight> | |||
If you simply want to test whether changes you made compile but do not plan to use the binary for deployment you can also simply run ''make''. | |||
Please note that if you want to deploy ScummVM on your iOS device you will need to generate a bundle file. For this run either: | |||
<syntaxhighlight lang="bash"> | |||
make ios7bundle | |||
</syntaxhighlight> | |||
for the ''ios7'' backend. Or | |||
<syntaxhighlight lang="bash"> | |||
make iphonebundle | |||
</syntaxhighlight> | |||
for the ''iphone'' backend. | |||
Then simply upload the whole ScummVM.app directory to your device under the /Applications folder, and you're done! | Then simply upload the whole ScummVM.app directory to your device under the /Applications folder, and you're done! |