gbaunixのコンパイル
UNIX® on the Game Boy Advanceをコンパイルしてみた。
devkitProのdevkitARM release 24の場合、以下の修正が必要でした。リンカのエラーが良くわからなくてハマった。
diff -ru gbaunix-0.0_org/Makefile gbaunix/Makefile --- gbaunix-0.0_org/Makefile Wed Sep 8 11:01:36 2004 +++ gbaunix/Makefile Wed Dec 24 02:24:47 2008 @@ -5,16 +5,19 @@ # # Host: Mac OS X +include $(DEVKITARM)\gba_rules -CROSSTOOLS_PREFIX = arm-elf -CROSSTOOLS_PATH = /usr/local/devkitARM +export DEPSDIR := $(CURDIR)/build + +CROSSTOOLS_PREFIX = arm-eabi +#CROSSTOOLS_PATH = /devkitpro/devkitARM AS = $(CROSSTOOLS_PREFIX)-as CC = $(CROSSTOOLS_PREFIX)-gcc LD = $(CROSSTOOLS_PREFIX)-ld OBJCOPY = $(CROSSTOOLS_PREFIX)-objcopy -INCLUDES = -I$(CROSSTOOLS_PATH)/$(CROSSTOOLS_PREFIX)/include -LOCAL_INCLUDES = -ASFLAGS = $(INCLUDES) +#INCLUDES = -I$(CROSSTOOLS_PATH)/$(CROSSTOOLS_PREFIX)/include +#LOCAL_INCLUDES = +#ASFLAGS = $(INCLUDES) # -DGAMEBOY mandatory # -DGAMEBOY_DMA @@ -34,12 +37,13 @@ -mtune=arm7tdmi CFLAGS_ARM = $(GAMEBOY_FLAGS) $(INCLUDES) $(LOCAL_INCLUDES) $(COPTFLAG) \ -marm -mthumb-interwork -specs=gba.specs -mcpu=arm7tdmi \ - -mtune=arm7tdmi -LDFLAGS = -Map /tmp/gba.map -lm + -mtune=arm7tdmi -Igba +LDFLAGS = -Map unixv5.map -lm #LDFLAGS = -lm +#LDFLAGS = -lm -g $(ARCH) -Wl,-Map,$(notdir $@).map OBJCOPYFLAGS = -v -O binary -GBAUNIXV5_ELF = unixv5 +GBAUNIXV5_ELF = unixv5.elf GBAUNIXV5_TMP = unixv5.tmp GBAUNIXV5_ROM = unixv5.gba UNIXV5_DISK = disks/unixv5.dsk @@ -130,7 +134,7 @@ $(OBJCOPY) $(OBJCOPYFLAGS) $< $@ $(GBAUNIXV5_ELF): $(OBJS) Makefile - $(CC) $(CFLAGS) -o $@ $(OBJS) -Wl,$(LDFLAGS) + $(CC) $(CFLAGS) -o $@ $(OBJS) -Wl,$(LDFLAGS) .PHONY: all clean realclean diff -ru gbaunix-0.0_org/gba/gba_fsio.c gbaunix/gba/gba_fsio.c --- gbaunix-0.0_org/gba/gba_fsio.c Tue Aug 24 18:01:32 2004 +++ gbaunix/gba/gba_fsio.c Wed Dec 24 02:21:44 2008 @@ -9,7 +9,7 @@ long fpos[GBA_MAXFILES]; int filestable[GBA_MAXFILES]; -dcache_t D[DI_MAX]; +__attribute__ ((section(".ewram"))) dcache_t D[DI_MAX]; int di = 0; void diff -ru gbaunix-0.0_org/gba/gba_fsio.h gbaunix/gba/gba_fsio.h --- gbaunix-0.0_org/gba/gba_fsio.h Tue Aug 24 15:39:42 2004 +++ gbaunix/gba/gba_fsio.h Wed Dec 24 01:32:53 2008 @@ -7,7 +7,8 @@ #define GBA_FSIO_IWRAM_CALL_LENGTH ,long_call #endif -#define GBA_FSIO_IWRAM_FUNC(func) __attribute__ ((section(".iwram.text") GBA_FSIO_IWRAM_CALL_LENGTH)) func +#define GBA_FSIO_IWRAM_FUNC(func) __attribute__ ((section(".iwram") GBA_FSIO_IWRAM_CALL_LENGTH)) func /* Experimental write pre-caching */ // #define GAMEBOY_WCACHE 1 diff -ru gbaunix-0.0_org/scp.c gbaunix/scp.c --- gbaunix-0.0_org/scp.c Tue Aug 24 10:21:59 2004 +++ gbaunix/scp.c Wed Dec 24 02:19:06 2008 @@ -78,7 +78,7 @@ volatile int32 stop_cpu = 0; t_value *sim_eval = NULL; int32 sim_end = 1; /* 1 = little, 0 = big */ -unsigned char sim_flip[FLIP_SIZE]; +__attribute__ ((section(".ewram"))) unsigned char sim_flip[FLIP_SIZE]; #define print_val(a,b,c,d) fprint_val (stdout, (a), (b), (c), (d)) #define SZ_D(dp) (size_map[((dp) -> dwidth + CHAR_BIT - 1) / CHAR_BIT])