From a9af5324489a88b34788baca0c29bbcf3a57f3bd Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 5 Jul 2010 10:07:33 +0000 Subject: DS: Can now build binaries via our "configure/make" build system. Conversion of the old build system is incomplete. Binaries created using this new build system support most likely will not run! More work is needed, but the work done so far should be enough to get basic NDS support on our buildbot working. svn-id: r50672 --- backends/platform/ds/arm9/makefile | 1 - backends/platform/ds/arm9/source/dsmain.cpp | 7 +- backends/platform/ds/arm9/source/osystem_ds.cpp | 5 + backends/platform/ds/ds.mk | 116 +++++++++++++++++++----- backends/platform/ds/module.mk | 69 ++++++++------ 5 files changed, 148 insertions(+), 50 deletions(-) (limited to 'backends') diff --git a/backends/platform/ds/arm9/makefile b/backends/platform/ds/arm9/makefile index 7f03f4c310..295b5f1bf0 100644 --- a/backends/platform/ds/arm9/makefile +++ b/backends/platform/ds/arm9/makefile @@ -202,7 +202,6 @@ endif #endif ARM7BIN := -7 $(CURDIR)/../../arm7/arm7.bin -ICON := -b ../../../logo.bmp "ScummVM;By Neil Millstone;" CC = arm-eabi-gcc CXX = arm-eabi-g++ diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 5a63e5f08f..30ac0a7880 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -97,7 +97,7 @@ #endif #include "ramsave.h" #include "blitters.h" -#include "cartreset_nolibfat.h" +#include "libcartreset/cartreset_nolibfat.h" #include "keys.h" #ifdef USE_PROFILER #include "profiler/cyg-profile.h" @@ -3344,6 +3344,11 @@ int main(void) { const char *argv[] = {"/scummvmds", "--config=scummvmj.ini"}; #elif defined(DS_BUILD_K) const char *argv[] = {"/scummvmds", "--config=scummvmk.ini"}; +#else + // Use the default config file if no build was specified. This currently + // only happens with builds made using the regular ScummVM build system (as + // opposed to the nds specific build system). + const char *argv[] = {"/scummvmds"}; #endif diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp index 691fb2ec7a..9171151fde 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.cpp +++ b/backends/platform/ds/arm9/source/osystem_ds.cpp @@ -66,6 +66,11 @@ #define DEFAULT_CONFIG_FILE "scummvmj.ini" #elif defined(DS_BUILD_K) #define DEFAULT_CONFIG_FILE "scummvmk.ini" +#else + // Use the "scummvm.ini" as config file if no build was specified. This + // currently only happens with builds made using the regular ScummVM build + // system (as opposed to the nds specific build system). +#define DEFAULT_CONFIG_FILE "scummvm.ini" #endif OSystem_DS* OSystem_DS::_instance = NULL; diff --git a/backends/platform/ds/ds.mk b/backends/platform/ds/ds.mk index 40a7e14965..ee3a1050b8 100644 --- a/backends/platform/ds/ds.mk +++ b/backends/platform/ds/ds.mk @@ -1,6 +1,62 @@ -# Repeat "all" target here, to make sure it is the first target -# Currently disabled, so only arm7.bin gets build -#all: +# To approximate the DS builds A, B, C, ... run our configure like this +# configure --host=ds --disable-all-engines OPTIONS +# where OPTIONS is... +# build A: --enable-scumm +# build B: --enable-sky --enable-queen +# build C: --enable-ago +# build D: --enable-gob --enable-cine --enable-agi +# build E: --enable-saga --disable-mad +# build F: --enable-kyra --disable-mad +# build G: --enable-lure +# build H: --enable-parallaction +# build I: --enable-made --disable-mad +# build K: --enable-cruise --disable-mad +# +# This does not currently take care of some things: +# * It does not #define DS_BUILD_A etc. -- most uses of that should be +# eliminated, though. Only usage should be for selecting the default config +# file (and for that we should really rather allow overriding the value of +# DEFAULT_CONFIG_FILE). +# There are a few game specific hacks which are currently controlled by this, +# too; we need to investigate those. +# * It does not currently adjust the logo. Ideally, if we ever get real plugin +# support, that should be necessary anymore anyway. +# * ... + +# Set location of ndsdir so that we can easily refer to files in it +ndsdir = backends/platform/ds + + +# Until we fix logo support, always use the A logo +LOGO = logoa.bmp + +# Uncomment the following line to enable support for the +# ace DS Debugger (remembering to make the same change in the arm7 makefile): +#USE_DEBUGGER = 1 +# TODO: Need to reimplement this (for arm9 and arm7). +#ifdef USE_DEBUGGER +# DEFINES += -DUSE_DEBUGGER +# CFLAGS += -g +#endif + +# Uncomment the following line to enable the profiler +#USE_PROFILER = 1 +# TODO: Need to reimplement this; and maybe replace it by the --enable-profiling +# configure directive. Below is USE_PROFILER related code from the old NDS +# build system: +#ifdef USE_PROFILER +# CFLAGS += -mpoke-function-name -finstrument-functions -g +# DEFINES += -DUSE_PROFILER +#endif +# And this for module.mk: +#ifdef USE_PROFILER +# PORT_OBJS += arm9/source/profiler/cyg-profile.o +#endif + + + +# NOTE: The header and libs for the debugger is assumed to be in the libnds +# folder. @@ -28,17 +84,26 @@ OPT_SIZE := -Os -mthumb +############################################################################# +# +# ARM9 rules. +# +############################################################################# + +all: scummvm.nds scummvm.ds.gba +%.nds: %.bin $(ndsdir)/arm7/arm7.bin + ndstool -c $@ -9 $< -7 $(ndsdir)/arm7/arm7.bin -b $(srcdir)/$(ndsdir)/$(LOGO) "$(@F);ScummVM $(VERSION);DS Port" +%.ds.gba: %.nds + dsbuild $< -o $@ -l $(srcdir)/$(ndsdir)/arm9/ndsloader.bin + padbin 16 $@ ############################################################################# ############################################################################# ############################################################################# -#ndsdir = $(srcdir)/backends/platform/ds -ndsdir = backends/platform/ds - ############################################################################# # # ARM7 rules. @@ -47,12 +112,6 @@ ndsdir = backends/platform/ds # ############################################################################# -$(ndsdir)/arm7/arm7.bin: $(ndsdir)/arm7/arm7.elf - -$(ndsdir)/arm7/arm7.elf: \ - $(ndsdir)/arm7/source/libcartreset/cartreset.o \ - $(ndsdir)/arm7/source/main.o - # HACK/FIXME: C compiler, for cartreset.c -- we should switch this to use CXX # as soon as possible. CC := $(DEVKITARM)/bin/arm-eabi-gcc @@ -89,7 +148,6 @@ ARM7_LDFLAGS := -g $(ARM7_ARCH) -mno-fpu $(MKDIR) $(*D)/$(DEPDIR) $(CC) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o - # Set custom build flags for cartreset.o $(ndsdir)/arm7/source/libcartreset/cartreset.o: CXXFLAGS=$(ARM7_CFLAGS) $(ndsdir)/arm7/source/libcartreset/cartreset.o: CPPFLAGS= @@ -98,14 +156,28 @@ $(ndsdir)/arm7/source/libcartreset/cartreset.o: CPPFLAGS= $(ndsdir)/arm7/source/main.o: CXXFLAGS=$(ARM7_CXXFLAGS) $(ndsdir)/arm7/source/main.o: CPPFLAGS= +# Rule for creating ARM7 .elf files by linking .o files together with a special linker script +$(ndsdir)/arm7/arm7.elf: \ + $(ndsdir)/arm7/source/libcartreset/cartreset.o \ + $(ndsdir)/arm7/source/main.o + $(CXX) $(ARM7_LDFLAGS) -specs=ds_arm7.specs $+ -L$(DEVKITPRO)/libnds/lib -lnds7 -o $@ + # Rule for creating ARM7 .bin files from .elf files -#%.bin: %.elf -# @echo ------ -# @echo Building $@... -# $(OBJCOPY) -O binary $< $@ +$(ndsdir)/arm7/arm7.bin: $(ndsdir)/arm7/arm7.elf + $(OBJCOPY) -O binary $< $@ + + + + + + + +# Command to build libmad is: +# ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' +# +# I actually had to use +# ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' LDFLAGS='C:/Progra~1/devkitpro/libnds/lib/libnds9.a' --disable-shared --disable-debugging +# +# Fingolfin used +# CXX=arm-eabi-g++ CC=arm-eabi-gcc ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork' --disable-shared --disable-debugging LDFLAGS=$DEVKITPRO/libnds/lib/libnds9.a -# Rule for creating ARM7 .elf files by linking .o files together with a special linker script -%.elf: - @echo ------ - @echo Building $@... - $(CXX) $(ARM7_LDFLAGS) -specs=ds_arm7.specs $+ -L/opt/devkitPro/libnds/lib -lnds7 -o $@ diff --git a/backends/platform/ds/module.mk b/backends/platform/ds/module.mk index 676fd20628..c97f24e12a 100644 --- a/backends/platform/ds/module.mk +++ b/backends/platform/ds/module.mk @@ -21,10 +21,6 @@ PORT_OBJS := \ arm9/source/wordcompletion.o \ arm9/source/interrupt.o -ifdef USE_PROFILER - PORT_OBJS += arm9/source/profiler/cyg-profile.o -endif - DATA_OBJS := \ arm9/data/icons.o \ arm9/data/keyboard.o \ @@ -55,8 +51,8 @@ FAT_OBJS := arm9/source/fat/disc_io.o arm9/source/fat/gba_nds_fat.o\ # arm9/source/fat/io_sd_common.o arm9/source/fat/io_scsd_s.o \ # arm9/source/fat/io_sc_common.o arm9/source/fat/io_sd_common.o -LIBCARTRESET_OBJS := - #arm9/source/libcartreset/cartreset.o +LIBCARTRESET_OBJS := \ +# arm9/source/libcartreset/cartreset.o #MODULE_OBJS := $(PORT_OBJS) $(DATA_OBJS) $(FAT_OBJS) @@ -68,35 +64,56 @@ MODULE_OBJS := $(DATA_OBJS) $(LIBCARTRESET_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) #--------------------------------------------------------------------------------- define bin2o bin2s $< | $(AS) -mthumb -mthumb-interwork -o $(@) - echo "extern const u8" `(echo $( `(echo $(> `(echo $(> `(echo $( $@ + echo "extern const u8" `(echo $(> $@ + echo "extern const u32" `(echo $(> $@ +endef -#--------------------------------------------------------------------------------- -%.o : %.raw -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) +vpath %.raw $(srcdir) +vpath %.pal $(srcdir) +vpath %.bin $(srcdir) + +%.o: %.raw + $(bin2o) + +%_raw.h: %.raw + $(bin2h) + +%.o: %.pal + $(bin2o) + +%_raw.h: %.pal + $(bin2h) + +%.o: %.bin + $(bin2o) + +%_raw.h: %.bin + $(bin2h) -#--------------------------------------------------------------------------------- -%.o : %.pal -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) +# Mark files which require the *_raw.h files manually (for now, at least) +$(MODULE)/arm9/source/dsmain.o: \ + $(MODULE)/arm9/data/icons_raw.h \ + $(MODULE)/arm9/data/keyboard_raw.h \ + $(MODULE)/arm9/data/keyboard_pal_raw.h +$(MODULE)/arm9/source/touchkeyboard.o: \ + $(MODULE)/arm9/data/keyboard_raw.h \ + $(MODULE)/arm9/data/keyboard_pal_raw.h \ + $(MODULE)/arm9/data/8x8font_tga_raw.h -# TODO: Should add more dirs to MODULE_DIRS so that "make distclean" can remove .deps dirs. MODULE_DIRS += \ - backends/platform/ds/ + backends/platform/ds \ + backends/platform/ds/arm7/source \ + backends/platform/ds/arm7/source/libcartreset \ + backends/platform/ds/arm9/source \ + backends/platform/ds/arm9/source/fat \ + backends/platform/ds/arm9/source/libcartreset # We don't use the rules.mk here on purpose OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) $(OBJS) -- cgit v1.2.3