TrustedUser, Bureaucrats, Administrators
442
edits
(Add some instructions to build with Xcode) |
(Removes information now contained in the new docs, and adds a link to the new docs.) |
||
(15 intermediate revisions by 3 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 | == Using Xcode == | ||
You can compile ScummVM with the official tools from Apple | 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 = | = Cross-Compilation = | ||
Line 89: | Line 130: | ||
* For ''iphone'' use: | * For ''iphone'' use: | ||
< | <syntaxhighlight lang="bash"> | ||
export TARGET=arm-apple-darwin9 | export TARGET=arm-apple-darwin9 | ||
</ | </syntaxhighlight> | ||
* For ''ios7'' use: | * For ''ios7'' use: | ||
< | <syntaxhighlight lang="bash"> | ||
export TARGET=arm-apple-darwin11 | export TARGET=arm-apple-darwin11 | ||
</ | </syntaxhighlight> | ||
==== Setting up the Environment ==== | ==== 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 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 CPPFLAGS="-isystem $IOS_TOOLCHAIN_BASE/$TARGET/usr/include" | ||
export LDFLAGS="-L$IOS_TOOLCHAIN_BASE/$TARGET/usr/lib" | 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. | Where ''IOS_TOOLCHAIN_BASE'' contains the directory where you installed the toolchain. And ''TRAGET'' has been setup from the previous step. | ||
Line 115: | Line 156: | ||
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). | 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: | Then run the following: | ||
< | <syntaxhighlight lang="bash"> | ||
./path/to/scummvm/configure --host=ios7 --with-staticlib-prefix=$IOS_TOOLCHAIN_BASE/$TARGET/usr | ./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. | Replace ''ios7'' with ''iphone'' if you want to build the older version of our iOS backend. | ||
Line 123: | Line 164: | ||
You can compile ScummVM with running make: | You can compile ScummVM with running make: | ||
< | <syntaxhighlight lang="bash"> | ||
make iphone | 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''. | 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: | 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 | make ios7bundle | ||
</ | </syntaxhighlight> | ||
for the ''ios7'' backend. Or | for the ''ios7'' backend. Or | ||
< | <syntaxhighlight lang="bash"> | ||
make iphonebundle | make iphonebundle | ||
</ | </syntaxhighlight> | ||
for the ''iphone'' backend. | 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! |