2015年4月4日 星期六

Cubieboard 編譯 Mame + SDL2

編譯之前需要先確定編譯環境,至少要有 gcc、g++、cpp 才行,如果沒有請使用下列指令安裝:
# apt-get install arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ arm-linux-gnueabihf-cpp 
由於我們是要編譯 Arm 版的 mame 所以需要安裝的是armhf的編譯套件。

接下來開始編譯進入 Mame 的部份
$ mkdir mame && cd mame
$ wget http://mamedev.org/downloader.php?file=releases/mame0159s.zip
$ unzip mame0159s.zip
$ unzip mame.zip
這時候會把 Mame-0.159 的編譯檔案都解出來在 mame資料夾中

再來做第一次編譯
$ make
有可能會遇到下列問題:

Mame_Error 1. alsa的函式庫未安裝,解決方法如下:
# apt-get install libasound2-dev
Mame_Error 2. moc error ,解決方法如下:
# apt-get install automoc
Mame_Error 3.
src/osd/sdl/sdlinc.h:5:22: fatal error: SDL2/SDL.h: 沒有此一檔案或目錄
compilation terminated.
make: *** [obj/sdl/osd/sdl/sdlos_unix.o] Error 1
這個問題是因為 Mame編譯時需要用到SDL2,而Cubieboard的套件只有SDL1的關係,所以我們必須自行編譯SDL2,解決方法如下:
$ mkdir SDL2 && cd SDL2
$ wget http://www.libsdl.org/release/SDL2-2.0.3.tar.gz
$ tar xfva SDL2-2.0.3.tar.gz && cd SDL2-2.0
$ ./configure
在configure中會出現 dbus 的 warning ,解決方法如下:
# apt-get install libdbus-1-dev
接下來重新執行./configure後就可以進行make了,指令如下:
$ make all
SDL2_Error 1 .
/home/cubie/SDL2/SDL2-2.0.3/src/render/opengles2/SDL_gles2funcs.h:70:1: error: unknown type name 'GLchar'
make: *** [build/SDL_render_gles2.lo] Error
解決方法如下:

先備份 /usr/include/GLES2/ 裡面的 gl2.h & gl2ext.h 檔案,然後到下列網站下載新的 gl2.h & gl2ext.h 檔。
http://blog.eldajani.net/banana-pi-arch-linux-snes-emulation-using-retroarch/
解決之後 make 就會成功了,然後安裝SDL,指令如下:
# make install
再來回到 Mame 的編譯
Mame_Error 4.
src/osd/modules/font/font_sdl.c:12:26: fatal error: SDL2/SDL_ttf.h: 沒有此一檔案或目錄
compilation terminated.
make: *** [obj/sdl/osd/modules/font/font_sdl.o] Error 1
這是因為SDL2的字型函式庫沒安裝,解決方法如下:
$ wget http://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.12.tar.gz
$ tar xfva SDL2_ttf-2.0.12.tar.gz
$ cd SDL2_ttf-2.0.12
$ ./configure
$ make all
# make install
Mame_Error 5.
collect2: ld terminated with signal 9 [已砍掉]
make: *** [mame] Error 1
這個問題是因為編譯 Mame,把記憶體與 swap 用光造成崩潰的關係,所以我們必須手動增加 swap,指令如下:
# dd if=/dev/zero of=moreswap bs=1M count=512
# mkswap moreswap
# swapon moreswap
# swapon -s
再來就能正常編譯了,編譯完會在 mame 的資料夾中出現 mame 的執行檔,最後把執行檔做 Soft Link 至 /usr/bin  /usr/local/bin  /usr/game/ 中就可以了。指令如下:
# ln -s ./mame  /usr/bin/mame
# ln -s ./mame  /usr/local/bin/mame
# ln -s ./mame  /usr/game/mame