#1まずコンパイル(1/7)
管理人は(2006-1/7現在)まだ。
やっとこ「RIN_v1_32-src.zip」がコンパイル出来て、
(ゲーム)も正常に実行できた。程度の低レベルです。
(ゲームはちゃんと自作ハードで吸い出しました、
マッパーなしのNTD純正テトリスですけど)
もう少しレベルアップしたら、このページももっと良くなります。
まだ現在はこのページが見れたあなたと、
殆ど同じレベルなんですよ。
#2まだコンパイル(1/8)(makeの一般的な使い方の例)
今日は(2006-1/8現在)RINコンパイルやってました。
え?そんなん、終わったんじゃなかったの?はい、とっくに終わってますが、
ちょっとMakeの作り直しです。全体を把握してました。
オリジナルはライブラリ作成するのに、さらに3つmakefileがあるのですが、
これらを、検討しなおした所、さして重要でないので、全部一つに纏めても
良いという事が、解りました。
但し、オリジナルと全く同じバイナリにする為には、libpngだけは最適化が
「O3」では駄目で「O2」にしなければいけないという事です。
「O3」の方が「O2」よりバイナリサイズが、大きくなります。libpngは速度が
重要ではないし、サイズが小さいほうが有り難く、もしかしたら、この方が
全体のパフォーマンスが上がったのかも知れません。
(たしかPSPのメインメモリが32MBだったから、実行時は、ここに無圧縮の
ROMカートリッジも乗せなきゃいけないですから)
そういうわけで、ここだけ「O2」でコンパイルするmakeを作成したら、昨日の
コンパイル結果の「EBOOT.BPB」とバイナリ一致しました。(つまり全く同じもの)
このmakeから学ぶ事は、
○一般的なmake書き方と、何故か一般的でない部分。
(他人に見せる場合は現在の状態で見せては、駄目で、
(特定行は)行頭にタブをいれます(見ればどの行か判る))
それ以外にも人に見せる段になって微妙にブラッシュアップしますが、
普段使いではこんな感じですね。(この状態の方が変更に強い)
あえて、普段の状態を見てもらうという事で。
○オブジェクトディレクトリーの自動生成。
○ソースリストとオブジェクトファイルの管理(仕分け)
○同じアーカイブファイルは一ヶ所にしかない。(コピーしては管理上絶対に、駄目です)
○特定のライブラリのみ、コンパイル方法を変える。やり方。
○自分の作った部分と他人の作った部分の仕分け。管理法。(この場合の自分はRIN様です)
○ライブラリのバージョンは進化するに決まってるんですから、一ヶ所に書く。
makeが書けてもこの辺の管理の技術がない方は参考にしてください。
意味がわからなかったら、じっくり何度も見れば、意味が分かる様になります。
それでも、わからなかったら、高々makeごとき、
ここはこういう風に書くんだって、真似してください。
このサンプルは余計なものが一つもついてないから、何度も見ればわかる筈。
そういう訳で現在のmake。
make maketree↓ で、objディレクトリを自動生成し、
make↓ で、ライブラリからなにから、一発コンパイルできます。
「Makefile」
# RIN v1.32 makefile
# please at the first time only type to 'make maketree' on bash console.
include Makefile.psp
#add tools
RANLIB = psp-ranlib
MD = -mkdir.exe
#DEFS += -DUSE_GPU
#DEFS += -DDEBUG
PBP = EBOOT.PBP
BINARY = out
OBJ = obj
OBJDIRS = $(OBJ) $(OBJ)/gbcore
LIBSDIR = src/lib
# libraly versions on directory names.
VER_ZLIB = zlib122
VER_LIBPNG = libpng128
VER_UNZIPLIB = unziplib
ZLIBOBJ = $(LIBSDIR)/$(VER_ZLIB)
LPNGOBJ = $(LIBSDIR)/$(VER_LIBPNG)
UZL_OBJ = $(LIBSDIR)/$(VER_UNZIPLIB)
OBJS = \
$(OBJ)/startup.o \
$(OBJ)/gbcore/cpu.o \
$(OBJ)/gbcore/gb.o \
$(OBJ)/gbcore/lcd.o \
$(OBJ)/gbcore/sgb.o \
$(OBJ)/gbcore/rom.o \
$(OBJ)/gbcore/mbc.o \
$(OBJ)/gbcore/apu.o \
$(OBJ)/gbcore/cheat.o \
$(OBJ)/main.o \
$(OBJ)/pg.o \
$(OBJ)/renderer.o \
$(OBJ)/menu.o \
$(OBJ)/filer.o \
$(OBJ)/sound.o \
$(OBJ)/saveload.o \
$(OBJ)/image.o \
$(OBJ)/gz.o \
$(OBJ)/syscall.o
LPNGOBJS = \
$(LPNGOBJ)/png.o \
$(LPNGOBJ)/pngerror.o \
$(LPNGOBJ)/pngget.o \
$(LPNGOBJ)/pngmem.o \
$(LPNGOBJ)/pngpread.o \
$(LPNGOBJ)/pngread.o \
$(LPNGOBJ)/pngrio.o \
$(LPNGOBJ)/pngrtran.o \
$(LPNGOBJ)/pngrutil.o \
$(LPNGOBJ)/pngset.o \
$(LPNGOBJ)/pngtrans.o \
$(LPNGOBJ)/pngwio.o \
$(LPNGOBJ)/pngwrite.o \
$(LPNGOBJ)/pngwtran.o \
$(LPNGOBJ)/pngwutil.o
ZLIBOBJS = \
$(ZLIBOBJ)/adler32.o \
$(ZLIBOBJ)/compress.o \
$(ZLIBOBJ)/crc32.o \
$(ZLIBOBJ)/deflate.o \
$(ZLIBOBJ)/gzio.o \
$(ZLIBOBJ)/infback.o \
$(ZLIBOBJ)/inffast.o \
$(ZLIBOBJ)/inflate.o \
$(ZLIBOBJ)/inftrees.o \
$(ZLIBOBJ)/trees.o \
$(ZLIBOBJ)/uncompr.o \
$(ZLIBOBJ)/zutil.o
UZL_OBJS = \
$(UZL_OBJ)/unzip.o \
$(UZL_OBJ)/ioapi.o \
$(UZL_OBJ)/zlibInterface.o
LIBS = \
$(UZL_OBJ)/unziplib.a \
$(LPNGOBJ)/libpng.a \
$(ZLIBOBJ)/libz.a -lc
all: $(PBP)
$(PBP): $(BINARY)
outpatch
elf2pbp outp "RIN GB/GBC Emulator"
$(BINARY): $(OBJS) $(LIBS)
$(LD) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
$(STRIP) $(BINARY)
$(OBJ)/%.o: src/%.c
$(CC) $(DEFS) $(INCLUDES) $(CFLAGS) -c $< -o $@
$(OBJ)/%.o: src/%.S
$(CC) $(DEFS) $(ARCHFLAGS) -c $< -o $@
#libpng only '-O2' and 'need includes zlib header files'.
LIBPNG_CFLAGS= -Wall -O2 -fomit-frame-pointer $(ARCHFLAGS)
$(LPNGOBJ)/%.o: $(LPNGOBJ)/%.c
$(CC) $(DEFS) -I$(ZLIBOBJ) $(INCLUDES) $(LIBPNG_CFLAGS) -c $< -o $@
$(UZL_OBJ)/unziplib.a: $(UZL_OBJS)
$(RM) $@
$(AR) rcs $@ $^
$(LPNGOBJ)/libpng.a: $(LPNGOBJS)
$(RM) $@
$(AR) rcs $@ $^
$(RANLIB) $@
$(ZLIBOBJ)/libz.a: $(ZLIBOBJS)
$(RM) $@
$(AR) rcs $@ $^
$(sort $(OBJDIRS)):
$(MD) $@
maketree: $(sort $(OBJDIRS))
clean:
$(RM) $(OBJ)/*.o $(OBJ)/gbcore/*.o *.map out outp
cleanlib:
$(RM) \
$(UZL_OBJ)/*.o \
$(LPNGOBJ)/*.o \
$(ZLIBOBJ)/*.o
cleanliba:
$(RM) \
$(UZL_OBJ)/*.a \
$(LPNGOBJ)/*.a \
$(ZLIBOBJ)/*.a
「Makefile.psp」
#C-Programs
AR = psp-ar
CC = psp-gcc-4.0.0
LD = psp-gcc-4.0.0
STRIP = psp-strip
RM= rm -f
RMDIR= rm -rf
MKDIR= @mkdir -p
#Compiler Flags
ARCHFLAGS=-mgp32 -mlong32 -msingle-float -mabi=eabi
CFLAGS= -Wall -O3 -fomit-frame-pointer $(ARCHFLAGS)
LDFLAGS=-nostartfiles -Wl,-Ttext=0x08900000
腹痛死亡。
■みんなの元気をオラにくれ(1/9)
管理人すっかりフリーザに吸収されて、既に形すらないんすけど...