2011年04月05日


広告


SNES9X最新版をPSPに移植してみる(2)

■Ubuntu 10.10向けに生成されたMakefileをPSP向けに手直しする

それでは、Ubuntu 10.10向けに生成されたMakefileをチェックしてみる。

気になるところとしては、以下でzlibやlibpng、それにpthreadをPSPがサポートしているの?というところ。

CCFLAGS = -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -DJOYSTICK_SUPPORT -DZLIB -DUNZIP_SUPPORT -DJMA_SUPPORT -DHAVE_LIBPNG -DHAVE_MKSTEMP -DHAVE_STRINGS_H -DHAVE_SYS_IOCTL_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -DUSE_THREADS $(DEFS)

ここからは少々泥臭い作業となるが、少しずつ修正を加えて試行錯誤しながら、Makefileを修正していきます。

●build.makをincludeする

psp開発環境のディレクトリはユーザー毎に違う可能性がありますが、これは
psp-config --pspsdk-path
を実行することで知ることができます。

hissoriiの環境では、

hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$ psp-config --pspsdk-path
/usr/local/pspdev/psp/sdk
となります。

Makefileに以下を追加することで、build.makをMakefileにincludeできます。

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

詳しい内容は、/usr/local/pspdev/psp/sdk/lib/build.makを参照すれば分かりますが、
CC, CXX, AS, LDといったコマンドの設定は、以下の様にbuild.mak内で行うのでMakefileでは不要になります。

CC = psp-gcc
CXX = psp-g++
AS = psp-gcc
LD = psp-gcc
これで、元々のMakefileではUbuntu向けのコンパイラが使用されていたのが、PSP向けのクロスコンパイラが使用される様に変更されました。

all:やclean:等もbuild.mak内で用意されているため、Makefileからは削除しておきます。

また、snes9xのMakefileでは、オブジェクトはOBJECTSであるのに対し、build.makではOBJSであるのが前提となっているので、以下を追加します。

OBJS = $(OBJECTS)
また、snes9xは(better Cとして)C++で書かれておりコンパイラはg++が要求されますが、Makefile内では変数CCCを前提としているので、以下も追加します。

CCC = $(CXX)
最後に、インクルードファイルのディレクトリ指定ですが、Makefileでは

INCLUDES = -I. -I.. -I../apu/ -I../unzip/ -I../jma/ -I../filter/
と定義され、build.mak内では、変数INCDIRで定義されますが、こちらは-Iのつかない単純なディレクトリ指定なので、以下の様にINCDIRの各ディレクトリに-IがつくようにしてINCLUDESに追加します。

INCLUDES += $(addprefix -I,$(INCDIR))

まずは、以下の差分の様にMakefileを修正しました。

Index: Makefile
===================================================================
--- Makefile (リビジョン 70)
+++ Makefile (作業コピー)
@@ -43,10 +43,6 @@
OBJECTS += ../jma/7zlzma.o ../jma/crc32.o ../jma/iiostrm.o ../jma/inbyte.o ../jma/jma.o ../jma/lzma.o ../jma/lzmadec.o ../jma/s9x-jma.o ../jma/winout.o
endif

-CCC = g++
-CC = gcc
-NASM =
-GASM = g++
INCLUDES = -I. -I.. -I../apu/ -I../unzip/ -I../jma/ -I../filter/

CCFLAGS = -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -DJOYSTICK_SUPPORT -DZLIB -DUNZIP_SUPPORT -DJMA_SUPPORT -DHAVE_LIBPNG -DHAVE_MKSTEMP -DHAVE_STRINGS_H -DHAVE_SYS_IOCTL_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -DUSE_THREADS $(DEFS)
@@ -54,18 +50,17 @@

.SUFFIXES: .o .cpp .c .cc .h .m .i .s .asm .obj

-all: Makefile configure snes9x
+OBJS = $(OBJECTS)

-Makefile: configure Makefile.in
- @echo "Makefile is older than configure or in-file. Run configure or touch Makefile."
- exit 1
+TARGET = snes9x15281
+EXTRA_TARGETS = EBOOT.PBP
+PSP_EBOOT_TITLE = snes9x/1.52.81

-configure: configure.ac
- @echo "configure is older than in-file. Run autoconf or touch configure."
- exit 1
+PSPSDK=$(shell psp-config --pspsdk-path)
+include $(PSPSDK)/lib/build.mak

-snes9x: $(OBJECTS)
- $(CCC) $(INCLUDES) -o $@ $(OBJECTS) -lm -lz -lpng -lSM -lICE -lX11 -lXext -lpthread
+CCC = $(CXX)
+INCLUDES += $(addprefix -I,$(INCDIR))

../jma/s9x-jma.o: ../jma/s9x-jma.cpp
$(CCC) $(INCLUDES) -c $(CCFLAGS) -fexceptions $*.cpp -o $@
@@ -113,6 +108,3 @@

.obj.o:
cp $*.obj $*.o
-
-clean:
- rm -f $(OBJECTS)

おもむろにmakeを実行してみます。

hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$ make
psp-g++ -I. -I.. -I../apu/ -I../unzip/ -I../jma/ -I../filter/ -I. -I/usr/local/pspdev/psp/sdk/include -c -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -DJOYSTICK_SUPPORT -DZLIB -DUNZIP_SUPPORT -DJMA_SUPPORT -DHAVE_LIBPNG -DHAVE_MKSTEMP -DHAVE_STRINGS_H -DHAVE_SYS_IOCTL_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -DUSE_THREADS -DMITSHM -DCPU_SHUTDOWN -DSPC700_SHUTDOWN -DCORRECT_VRAM_READS ../apu/apu.cpp -o ../apu/apu.o
../snes9x.h:185 から include されたファイル中,
../apu/apu.cpp:179 から:
../port.h:184:20: error: memory.h: そのようなファイルやディレクトリはありません
../port.h:188:21: error: strings.h: そのようなファイルやディレクトリはありません
../apu/apu.cpp:179 から include されたファイル中:
../snes9x.h:190:18: error: zlib.h: そのようなファイルやディレクトリはありません
In file included from ../apu/apu.cpp:181:
../snapshot.h:195: error: variable or field ‘S9xFreezeToStream’ declared void
../snapshot.h:195: error: ‘gzFile’ was not declared in this scope
../snapshot.h:196: error: ‘gzFile’ was not declared in this scope
In file included from ../apu/apu.cpp:182:
../display.h:212: error: ‘gzFile’ has not been declared
../display.h:213: error: variable or field ‘S9xCloseSnapshotFile’ declared void
../display.h:213: error: ‘gzFile’ was not declared in this scope
make: *** [../apu/apu.o] エラー 1
hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$

まぁ、一発でmakeが通るはずもありませんが、コンパイラが正しくpsp-g++を使用していること、インクルードファイルのディレクトリもokで、まぁ結果は想定の範囲内です。多分。
あー、あと依存関係の定義が全然ないですね。なくてもmakeはできるので、まぁいいか。




タグ:SNES9X PSP
posted by ひっそりぃ at 2011/04/05 00:39 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。