gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

DS development > Fixing a makefile to use maxmod

#176208 - ant512 - Mon May 09, 2011 9:15 pm

I posted this over at devkitpro.org but haven't had any replies as yet, so I thought I'd give it a try over here.

Can anyone tell me how to modify this makefile so that it converts all wav files in the directory "sfx" into a soundbank and includes that in the final ROM? Makefiles really aren't my thing...

Code:

# WoopsiGfx Makefile                               ex:set ts=4 sw=4:
# builds the WoopsiGfx test applications, and should be sufficient for most
# needs - options are switched on/off with USE_ constants.

# set the texts that appear in the loader menus
TEXT1       := Earth Shaker DS
TEXT2       := Using WoopsiGfx
TEXT3       := ant.simianzombie.com

# 4-bit-deep bitmap file to use as icon in loader menus
ICON       := $(DEVKITPRO)/libwoopsigfx/icon/logo.bmp

#-------------------------------------------------------------------------------
# TARGET is the name of the output file
# BUILD is the directory where object files & intermediate files will be placed
# RELEASE is where the binary files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
# DEFINES is a set of -Dsym[=value] settings to pass to the compilers
#-------------------------------------------------------------------------------

TARGET      :=   $(shell basename $(CURDIR))
BUILD      :=   build
RELEASE     :=  Release
SOURCES      :=   src src/bmp data gfx
INCLUDES   :=   include include/bmp include/blocks include/levels
DEFINES      :=

# we do *not* do -o thing - WinterMute points out that this stops our
# resultant .nds from working on some loaders.  By default, ndstool puts boot
# code into the wifi-logospace and since its not visible anywhere else, its
# downright churlish for us to overwrite it.  If you want to, put it back, but
# its not the default.
# LOGO      := -o $(CURDIR)/../data/logo_wifi.bmp

#===============================================================================
# options for code generation - unlikely you'll want to change this
#===============================================================================

ARCH      :=   -mthumb-interwork

# uncomment to generate debugging information
#MINUSG      :=   -g

# baseline flags for
CFLAGS      :=   $(MINUSG) $(ARCH) \
            -Wall -O2 \
            -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer \
            -ffast-math

CFLAGS      +=   -DARM9
ASFLAGS      :=   $(MINUSG) $(ARCH)
LDFLAGS      :=   $(MINUSG) $(ARCH) -mno-fpu

# enable dead-code stripping
CFLAGS      +=   -ffunction-sections -fdata-sections
LDFLAGS      +=   -Wl,--gc-sections

# link map (optional)
# LDFLAGS      +=   -Wl,-Map,$(OUTPUT).map

#===============================================================================
# no real need to edit anything past this point unless you need to add
# additional rules for different file extensions
#===============================================================================

# disable all default rules
.SUFFIXES:

# ensure that we can see the compiler toolset
PATH       := $(DEVKITARM)/bin:$(PATH)

ifneq ($(BUILD),$(notdir $(CURDIR)))

# from here on, any symbols we want to propagate into the real build must be
# exported - all the lines above the 'ifneq' are evaluated in both cases...

# directory name is used to construct the target.nds filename
export OUTPUT   :=   $(CURDIR)/$(RELEASE)/$(TARGET)

# name the GNU toolset
PREFIX         :=   arm-eabi-
export CC      :=   $(PREFIX)gcc
export CXX      :=   $(PREFIX)g++
export AR      :=   $(PREFIX)ar
export OBJCOPY   :=   $(PREFIX)objcopy
export LD      :=   $(CXX)

# scan source directory for all possible source files (things we can turn into .o)
CFILES         :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES         :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
PCXFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pcx)))
BINFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bin)))
PALFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pal)))
RAWFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.raw)))
MAPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.map)))
JPEGFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.jpg)))
MODFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.mod)))
GIFFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.gif)))
BMPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bmp)))

# build list of .o filenames
export OFILES   :=   $(MAPFILES:.map=.o) $(RAWFILES:.raw=.o) $(PALFILES:.pal=.o)\
               $(BINFILES:.bin=.o) $(PCXFILES:.pcx=.o) $(JPEGFILES:.jpg=.o)\
               $(MODFILES:.mod=.o) $(GIFFILES:.gif=.o) $(BMPFILES:.bmp=.o)\
               $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
 
#-------------------------------------------------------------------------------
# standard magic to run the build from a build directory - this works because
# we poke all the source directories into VPATH
export VPATH   :=   $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))

.PHONY: $(BUILD) clean rebuild
 
$(BUILD): $(CURDIR)/$(RELEASE)
   @[ -d $@ ] || mkdir -p $@
   @make --no-print-directory -C $(BUILD) -f $(CURDIR)/makefile

$(CURDIR)/$(RELEASE):
   @-mkdir -p $(CURDIR)/$(RELEASE)
 
clean:
   @echo Cleaning... $(TARGET)
   @rm -fr $(BUILD) *.elf *.*ds* $(RELEASE)/*.*ds*
 
rebuild: clean $(BUILD)

#-------------------------------------------------------------------------------

else   # executing in the build directory
 
#-------------------------------------------------------------------------------
# main targets
#-------------------------------------------------------------------------------

$(OUTPUT).nds      :    $(OFILES)
 
#-------------------------------------------------------------------------------
# every directory mentioned in INCLUDES and LIBDIRS is expected to have a corresponding
# ./include directory which needs to be passed with -I to the C(++) compiler
#-------------------------------------------------------------------------------
LIBDIRS      += $(DEVKITPRO)/libnds
LIBDIRS      += $(DEVKITPRO)/libwoopsigfx

# add all directories specified in INCLUDES and SOURCES
_INCS      += $(foreach dir,$(INCLUDES),-I$(CURDIR)/../$(dir))
_INCS      += $(foreach dir,$(SOURCES),-I$(CURDIR)/../$(dir))

# add all directories specified in LIBDIRS
_INCS      += $(foreach dir,$(LIBDIRS),-I$(dir)/include)
_INCS      += $(foreach dir,$(LIBDIRS),-I$(dir)/include/nds)

# and the build directory
_INCS      += -I$(CURDIR)/$(BUILD)

#-------------------------------------------------------------------------------
# every directory mentioned in LIBDIRS is expected to have a corresponding
# ./lib directory which needs to be passed with -L to the linker
#-------------------------------------------------------------------------------
_LPATHS      :=   $(foreach dir,$(LIBDIRS),-L$(dir)/lib)

#-------------------------------------------------------------------------------
# look at the various options that have been selected and switch in the
# appropriate -D, -I, -l and -L options
#-------------------------------------------------------------------------------

_DEFS      = $(DEFINES)

# use WoopsiGfx
_INCS      += -I$(DEVKITPRO)/libwoopsigfx/include
_LIBS      += -L$(DEVKITPRO)/libwoopsigfx/lib -lwoopsigfx

# and of course we need libnds
_LIBS      += -lnds9

# this makes it easier to type the ndstool command line
_BANNER       := -b $(ICON) "$(TEXT1);$(TEXT2);$(TEXT3)"

#-------------------------------------------------------------------------------
# rule to build a .nds binary - forces the link every time because we don't have proper
# dependencies in here...
%.nds: $(OFILES)
   @echo Linking...
   @$(LD) $(LDFLAGS) -specs=ds_arm9.specs $(OFILES) $(_LPATHS) $(_LIBS) -o $(TARGET).elf
   @$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin
   @ndstool -c $@ -9 $(TARGET).bin $(_ARM7BIN) $(LOGO) $(_BANNER)
   @echo Built: $(notdir $(OUTPUT)).nds
 
#-------------------------------------------------------------------------------
# rule to compile C++
#
%.o : %.cpp
   @echo Compiling $(notdir $<)
   @$(CXX) -MMD -MF $*.d -MP $(CFLAGS) $(_DEFS) $(_INCS) -c $< -o$@
 
#-------------------------------------------------------------------------------
# rule to compile C
#
%.o : %.c
   @echo Compiling $(notdir $<)
   @$(CC) -MMD -MF $*.d -MP $(CFLAGS) $(_DEFS) $(_INCS) -c $< -o$@
 
#-------------------------------------------------------------------------------
# rule to compile Assembler
#
%.o : %.s
   @echo Assembling $(notdir $<)
   @$(CC) -MMD -MF $*.d -MP $(ASFLAGS) $(_DEFS) $(_INCS) -c $< -o$@

#-------------------------------------------------------------------------------
# utility function to convert arbitrary data file to .o
#
define bin2o
   cp $(<) $(*).tmp
   $(OBJCOPY) -I binary -O elf32-littlearm -B arm \
      --rename-section .data=.rodata \
      --redefine-sym _binary_$*_tmp_start=$*\
      --redefine-sym _binary_$*_tmp_end=$*_end\
      --redefine-sym _binary_$*_tmp_size=$*_size\
      $(*).tmp $(@)
   echo "extern const u8" $(*)"[];" > $(*).h
   echo "extern const u32" $(*)_size[]";" >> $(*).h
   rm $(*).tmp
endef
 
#-------------------------------------------------------------------------------
%.o   :   %.pcx
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.bin
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.raw
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.pal
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.map
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.mdl
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.jpg
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.mod
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.gif
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.bmp
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
# now include all the dependency files, one per object file - we assume that the
# .d file is next to the .o file, which is what our C/C++/Assembler rules are
# set up to do...
#
DEPENDS   := $(OFILES:.o=.d)
-include $(DEPENDS)

endif

################################################################################
# This makefile the following environment variables
#
# $(DEVKITPRO) points to your devkitPro environment
# $(DEVKITARM) points to the ARM toolset
#
################################################################################

#176211 - SchmendrickSchmuck - Wed May 11, 2011 11:34 pm

Code:

# WoopsiGfx Makefile                               ex:set ts=4 sw=4:
# builds the WoopsiGfx test applications, and should be sufficient for most
# needs - options are switched on/off with USE_ constants.

# set the texts that appear in the loader menus
TEXT1       := Earth Shaker DS
TEXT2       := Using WoopsiGfx
TEXT3       := ant.simianzombie.com

# 4-bit-deep bitmap file to use as icon in loader menus
ICON       := $(DEVKITPRO)/libwoopsigfx/icon/logo.bmp

#-------------------------------------------------------------------------------
# TARGET is the name of the output file
# BUILD is the directory where object files & intermediate files will be placed
# RELEASE is where the binary files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
# DEFINES is a set of -Dsym[=value] settings to pass to the compilers
#-------------------------------------------------------------------------------

TARGET      :=   $(shell basename $(CURDIR))
BUILD      :=   build
RELEASE     :=  Release
SOURCES      :=   src src/bmp data gfx
INCLUDES   :=   include include/bmp include/blocks include/levels
DEFINES      :=
MUSIC       :=  sfx

# we do *not* do -o thing - WinterMute points out that this stops our
# resultant .nds from working on some loaders.  By default, ndstool puts boot
# code into the wifi-logospace and since its not visible anywhere else, its
# downright churlish for us to overwrite it.  If you want to, put it back, but
# its not the default.
# LOGO      := -o $(CURDIR)/../data/logo_wifi.bmp

#===============================================================================
# options for code generation - unlikely you'll want to change this
#===============================================================================

ARCH      :=   -mthumb-interwork

# uncomment to generate debugging information
#MINUSG      :=   -g

# baseline flags for
CFLAGS      :=   $(MINUSG) $(ARCH) \
            -Wall -O2 \
            -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer \
            -ffast-math

CFLAGS      +=   -DARM9
ASFLAGS      :=   $(MINUSG) $(ARCH)
LDFLAGS      :=   $(MINUSG) $(ARCH) -mno-fpu

# enable dead-code stripping
CFLAGS      +=   -ffunction-sections -fdata-sections
LDFLAGS      +=   -Wl,--gc-sections

# link map (optional)
# LDFLAGS      +=   -Wl,-Map,$(OUTPUT).map

#===============================================================================
# no real need to edit anything past this point unless you need to add
# additional rules for different file extensions
#===============================================================================

# disable all default rules
.SUFFIXES:

# ensure that we can see the compiler toolset
PATH       := $(DEVKITARM)/bin:$(PATH)

ifneq ($(BUILD),$(notdir $(CURDIR)))

# from here on, any symbols we want to propagate into the real build must be
# exported - all the lines above the 'ifneq' are evaluated in both cases...

# directory name is used to construct the target.nds filename
export OUTPUT   :=   $(CURDIR)/$(RELEASE)/$(TARGET)

# name the GNU toolset
PREFIX         :=   arm-eabi-
export CC      :=   $(PREFIX)gcc
export CXX      :=   $(PREFIX)g++
export AR      :=   $(PREFIX)ar
export OBJCOPY   :=   $(PREFIX)objcopy
export LD      :=   $(CXX)

# scan source directory for all possible source files (things we can turn into .o)
CFILES         :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES         :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
PCXFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pcx)))
PALFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pal)))
RAWFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.raw)))
MAPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.map)))
JPEGFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.jpg)))
MODFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.mod)))
GIFFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.gif)))
BMPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bmp)))
BINFILES   :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.*))) soundbank.bin
 
export AUDIOFILES   :=   $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir))

# build list of .o filenames
export OFILES   :=   $(MAPFILES:.map=.o) $(RAWFILES:.raw=.o) $(PALFILES:.pal=.o)\
               $(BINFILES:.bin=.o) $(PCXFILES:.pcx=.o) $(JPEGFILES:.jpg=.o)\
               $(MODFILES:.mod=.o) $(GIFFILES:.gif=.o) $(BMPFILES:.bmp=.o)\
               $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
 
#-------------------------------------------------------------------------------
# standard magic to run the build from a build directory - this works because
# we poke all the source directories into VPATH
export VPATH   :=   $(foreach dir,$(SOURCES),$(CURDIR)/$(dir))

.PHONY: $(BUILD) clean rebuild
 
$(BUILD): $(CURDIR)/$(RELEASE)
   @[ -d $@ ] || mkdir -p $@
   @make --no-print-directory -C $(BUILD) -f $(CURDIR)/makefile

$(CURDIR)/$(RELEASE):
   @-mkdir -p $(CURDIR)/$(RELEASE)
 
clean:
   @echo Cleaning... $(TARGET)
   @rm -fr $(BUILD) *.elf *.*ds* $(RELEASE)/*.*ds*
 
rebuild: clean $(BUILD)

#-------------------------------------------------------------------------------

else   # executing in the build directory
 
#-------------------------------------------------------------------------------
# main targets
#-------------------------------------------------------------------------------

$(OUTPUT).nds      :    $(OFILES)
 
#---------------------------------------------------------------------------------
# rule to build soundbank from music files
#---------------------------------------------------------------------------------
soundbank.bin : $(AUDIOFILES)
#---------------------------------------------------------------------------------
   @mmutil $^ -d -osoundbank.bin -hsoundbank.h

#-------------------------------------------------------------------------------
# every directory mentioned in INCLUDES and LIBDIRS is expected to have a corresponding
# ./include directory which needs to be passed with -I to the C(++) compiler
#-------------------------------------------------------------------------------
LIBDIRS      += $(DEVKITPRO)/libnds
LIBDIRS      += $(DEVKITPRO)/libwoopsigfx

# add all directories specified in INCLUDES and SOURCES
_INCS      += $(foreach dir,$(INCLUDES),-I$(CURDIR)/../$(dir))
_INCS      += $(foreach dir,$(SOURCES),-I$(CURDIR)/../$(dir))

# add all directories specified in LIBDIRS
_INCS      += $(foreach dir,$(LIBDIRS),-I$(dir)/include)
_INCS      += $(foreach dir,$(LIBDIRS),-I$(dir)/include/nds)

# and the build directory
_INCS      += -I$(CURDIR)/$(BUILD)

#-------------------------------------------------------------------------------
# every directory mentioned in LIBDIRS is expected to have a corresponding
# ./lib directory which needs to be passed with -L to the linker
#-------------------------------------------------------------------------------
_LPATHS      :=   $(foreach dir,$(LIBDIRS),-L$(dir)/lib)

#-------------------------------------------------------------------------------
# look at the various options that have been selected and switch in the
# appropriate -D, -I, -l and -L options
#-------------------------------------------------------------------------------

_DEFS      = $(DEFINES)

# use WoopsiGfx
_INCS      += -I$(DEVKITPRO)/libwoopsigfx/include
_LIBS      += -L$(DEVKITPRO)/libwoopsigfx/lib -lwoopsigfx

# and of course we need libnds
_LIBS      += -lnds9 -lmm9

# this makes it easier to type the ndstool command line
_BANNER       := -b $(ICON) "$(TEXT1);$(TEXT2);$(TEXT3)"

#-------------------------------------------------------------------------------
# rule to build a .nds binary - forces the link every time because we don't have proper
# dependencies in here...
%.nds: $(OFILES)
   @echo Linking...
   @$(LD) $(LDFLAGS) -specs=ds_arm9.specs $(OFILES) $(_LPATHS) $(_LIBS) -o $(TARGET).elf
   @$(OBJCOPY) -O binary $(TARGET).elf $(TARGET).bin
   @ndstool -c $@ -9 $(TARGET).bin $(_ARM7BIN) $(LOGO) $(_BANNER)
   @echo Built: $(notdir $(OUTPUT)).nds
 
#-------------------------------------------------------------------------------
# rule to compile C++
#
%.o : %.cpp
   @echo Compiling $(notdir $<)
   @$(CXX) -MMD -MF $*.d -MP $(CFLAGS) $(_DEFS) $(_INCS) -c $< -o$@
 
#-------------------------------------------------------------------------------
# rule to compile C
#
%.o : %.c
   @echo Compiling $(notdir $<)
   @$(CC) -MMD -MF $*.d -MP $(CFLAGS) $(_DEFS) $(_INCS) -c $< -o$@
 
#-------------------------------------------------------------------------------
# rule to compile Assembler
#
%.o : %.s
   @echo Assembling $(notdir $<)
   @$(CC) -MMD -MF $*.d -MP $(ASFLAGS) $(_DEFS) $(_INCS) -c $< -o$@

#-------------------------------------------------------------------------------
# utility function to convert arbitrary data file to .o
#
define bin2o
   cp $(<) $(*).tmp
   $(OBJCOPY) -I binary -O elf32-littlearm -B arm \
      --rename-section .data=.rodata \
      --redefine-sym _binary_$*_tmp_start=$*\
      --redefine-sym _binary_$*_tmp_end=$*_end\
      --redefine-sym _binary_$*_tmp_size=$*_size\
      $(*).tmp $(@)
   echo "extern const u8" $(*)"[];" > $(*).h
   echo "extern const u32" $(*)_size[]";" >> $(*).h
   rm $(*).tmp
endef
 
#-------------------------------------------------------------------------------
%.o   :   %.pcx
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.bin
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.raw
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.pal
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)
 
#-------------------------------------------------------------------------------
%.o   :   %.map
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.mdl
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.jpg
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.mod
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.gif
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
%.o   :   %.bmp
#-------------------------------------------------------------------------------
   @echo Converting $(notdir $<)
   @$(bin2o)

#-------------------------------------------------------------------------------
# now include all the dependency files, one per object file - we assume that the
# .d file is next to the .o file, which is what our C/C++/Assembler rules are
# set up to do...
#
DEPENDS   := $(OFILES:.o=.d)
-include $(DEPENDS)

endif

################################################################################
# This makefile the following environment variables
#
# $(DEVKITPRO) points to your devkitPro environment
# $(DEVKITARM) points to the ARM toolset
#
################################################################################


That should do it. Note that I'm not exactly all that well-known in the area of makefiles, but I pasted in the parts of code that I use for maxmod.

Changes:

Code:

SOURCES      :=   src src/bmp data gfx
INCLUDES   :=   include include/bmp include/blocks include/levels
DEFINES      :=
[b]MUSIC       :=  sfx[/b]

[...]

GIFFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.gif)))
BMPFILES      :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bmp)))
[b]BINFILES   :=   $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.*))) soundbank.bin
 
export AUDIOFILES   :=   $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir))[/b]

[...]

#-------------------------------------------------------------------------------
# main targets
#-------------------------------------------------------------------------------

$(OUTPUT).nds      :    $(OFILES)
 
[b]#---------------------------------------------------------------------------------
# rule to build soundbank from music files
#---------------------------------------------------------------------------------
soundbank.bin : $(AUDIOFILES)
#---------------------------------------------------------------------------------
   @mmutil $^ -d -osoundbank.bin -hsoundbank.h[/b]

[...]

# use WoopsiGfx
_INCS      += -I$(DEVKITPRO)/libwoopsigfx/include
_LIBS      += -L$(DEVKITPRO)/libwoopsigfx/lib -lwoopsigfx

# and of course we need libnds
_LIBS      += -lnds9 [b]-lmm9[/b]



If I missed anything, I'm sure someone else will be able to help you out. I must say your makefile seems a little overkill, perhaps because you don't have the 'include $(DEVKITARM)/ds_rules' part or something; my makefile's a lot shorter.
_________________
http://DSLiero.DennisvanZwieten.com - Liero for NDS!

#176212 - ant512 - Thu May 12, 2011 9:33 am

Thanks very much for that, I'll give it a go. The makefile probably contains a lot of junk that the PALib guys put in, as I think I got the original from there. Various other people have changed it over time. I tried to replace it with a makefile from the libnds maxmod examples but kept coming across weird errors.