1. 確定NDK Toolchain是4.8.3版本
2. 使用如下指令編譯:
$ cd
$ git clone -b v0.9.9 https://github.com/hrydgard/ppsspp
$ cd ppsspp
$ git submodule update --init --recursive
$ source ~/bbndk/bbndk-env*.sh
$ cd Blackberry
$ vim build.sh
#!/bin/bash
rm -rf CMake*
BB_OS=`cat ${QNX_TARGET}/etc/qversion 2>/dev/null`
if [ -z "$BB_OS" ]; then
echo "Could not find your Blackberry NDK. Please source bbndk-env.sh"
exit 1
fi
echo "Building for Blackberry ${BB_OS}"
# Set up cmake with GCC 4.6.3 cross-compiler from PATH
CC=ntoarmv7-gcc CXX=ntoarmv7-g++ cmake -DCMAKE_TOOLCHAIN_FILE=bb.toolchain.cmake -DBLACKBERRY=${BB_OS} ..
# Compile and create unsigned PPSSPP.bar with debugtoken
DEBUG="-devMode -debugToken ${HOME}/debugtoken.bar"
make -j4 && blackberry-nativepackager -package PPSSPP.bar bar-descriptor.xml $DEBUG
$ vim ../CMakeLists.txt
# Detect CPU from CMAKE configuration. Toolchains should set this up
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm")
set(ARM ON)
endif()
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^armv7")
set(ARMV7 ON)
endif()
set(ARM ON)
set(ARMV7 ON)
# Remove soon?
set(USE_FFMPEG ON)
if(ARM OR SIMULATOR)
set(USING_EGL ON)
set(MOBILE_DEVICE ON)
endif()
if (NOT ARM) # Assume x86
set(X86 ON)
endif()
set(X86 OFF)
$ ./build.sh
奇怪的是,編譯後都是無法執行的,PPSSPPBlackberry都會Crash,然後訊息都是如下,完全看不出是那個Library的問題,因此,司徒只好把所有static library改成shared library來找問題,最終找出是ffmpeg的問題,過程修改如下:
Process 14352626 (PPSSPPBlackberry) terminated SIGSEGV code=2 fltno=11 ip=01b9c8f8 mapaddr=0004f8f8. ref=1103a960
把ffmpeg改成shared library
$ cd ffmpeg
$ vim blackberry-build.sh
#--disable-shared \
#--enable-static \
--enable-shared \
$ ./blackberry-build.sh
$ cd ../Blackberry
$ mkdir -p lib
$ cp ../ffmpeg/blackberry/armv7/lib/*.so* .
$ cp ../ffmpeg/blackberry/armv7/lib/*.so* lib
$ vim CMakeFiles/PPSSPPBlackberry.dir/link.txt
ntoarmv7-g++ -march=armv7-a -mfpu=neon -mcpu=cortex-a9 -std=c++11 -g CMakeFiles/PPSSPPBlackberry.dir/UI/NativeApp.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/BackgroundAudio.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/DevScreens.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/EmuScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/android/jni/TestRunner.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/GameInfoCache.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/MainScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/MiscScreens.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/GameScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/GameSettingsScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/TiltAnalogSettingsScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/TiltEventProcessor.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/TouchControlLayoutScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/TouchControlVisibilityScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/GamepadEmu.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/UIShader.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/OnScreenDisplay.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/ControlMappingScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/Store.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/CwCheatScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/InstallZipScreen.cpp.o CMakeFiles/PPSSPPBlackberry.dir/UI/ui_atlas.cpp.o -o PPSSPPBlackberry lib/libCore.a lib/libCommon.a lib/libnative.a lib/liblibzip.a lib/libpng17.a lib/librg_etc1.a lib/libvjson.a lib/libstb_vorbis.a lib/libsnappy.a lib/libkirk.a lib/libcityhash.a lib/libxbrz.a lib/libxxhash.a libstdc++.a libbps.so.3 libc.so.3 libEGL.so.1 libGLESv2.so.1 libiconv.so.1 libm.so.2 libOpenAL.so.1 libscreen.so.1 libsocket.so.3 libz.so libz.so.2 libavcodec.so libavformat.so libavcodec.so libavutil.so libswresample.so libswscale.so
$ make -j 4
ntoarmv7-g++: error: libstdc++.a: No such file or directory
ntoarmv7-g++: error: libbps.so.3: No such file or directory
ntoarmv7-g++: error: libc.so.3: No such file or directory
ntoarmv7-g++: error: libEGL.so.1: No such file or directory
ntoarmv7-g++: error: libGLESv2.so.1: No such file or directory
ntoarmv7-g++: error: libiconv.so.1: No such file or directory
ntoarmv7-g++: error: libm.so.2: No such file or directory
ntoarmv7-g++: error: libOpenAL.so.1: No such file or directory
ntoarmv7-g++: error: libscreen.so.1: No such file or directory
ntoarmv7-g++: error: libsocket.so.3: No such file or directory
ntoarmv7-g++: error: libz.so: No such file or directory
ntoarmv7-g++: error: libz.so.2: No such file or directory
P.S. 以上這些檔案可以從bbndk裡面找到,然後複製到目前資料夾以及lib資料夾即可
接著打包Bar檔案
$ vim bar-descriptor.xml
<asset path="lib">lib</asset>
<env var="LD_LIBRARY_PATH" value="app/native/lib"/>
$ DEBUG="-devMode -debugToken ${HOME}/.rim/debugtoken_q30.bar"
$ blackberry-nativepackager -package PPSSPP.bar bar-descriptor.xml $DEBUG
完成