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.
#!/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
Now, in order to compile ScummVM, execute the following commands:
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
At the end of the compilation, you'll find a ScummVM.app application: copy it over SSH, and reboot your device.
Please note binaries generated with these instructions only work with jailbroken devices.
First you need to set up a toolchain for cross-compilation. On our buildbot we use this toolchain. It is based on LLVM/Clang and contains instructions on how to set it up.
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.
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:
- For ios7 use:
Setting up the Environment
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"
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:
./path/to/scummvm/configure --host=ios7 --with-staticlib-prefix=$IOS_TOOLCHAIN_BASE/$TARGET/usr
Replace ios7 with iphone if you want to build the older version of our iOS backend.
You can compile ScummVM with running 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:
for the ios7 backend. Or
for the iphone backend.
Then simply upload the whole ScummVM.app directory to your device under the /Applications folder, and you're done!