diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 147 |
1 files changed, 118 insertions, 29 deletions
@@ -1,48 +1,137 @@ -#--------------------------------------------------------------------------------- +# This is a generic DS makefile, as taken from the libnds example programs. +# + +#------------------------------------------------------------------------------- .SUFFIXES: -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- + ifeq ($(strip $(DEVKITARM)),) -$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") endif include $(DEVKITARM)/ds_rules -export TARGET := $(shell basename $(CURDIR)) -export TOPDIR := $(CURDIR) +#------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +#------------------------------------------------------------------------------- +TARGET := $(shell basename $(CURDIR)) +BUILD := build +SOURCES := source gbagfx +DATA := data +INCLUDES := include gbagfx +#------------------------------------------------------------------------------- +# options for code generation +#------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork -#--------------------------------------------------------------------------------- -# path to tools - this can be deleted if you set the path in windows -#--------------------------------------------------------------------------------- -export PATH := $(DEVKITARM)/bin:$(PATH) +# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD +# *insists* it has a FPU or VFP, and it won't take no for an answer! +CFLAGS := -g -Wall -O2\ + -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer\ + -ffast-math \ + $(ARCH) \ + $(ADDITIONAL_CFLAGS) -.PHONY: $(TARGET).arm7 $(TARGET).arm9 +CFLAGS += $(INCLUDE) -DARM9 +CXXFLAGS := $(CFLAGS) -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -all: $(TARGET).ds.gba +ASFLAGS := -g $(ARCH) +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -mno-fpu -Wl,-Map,$(notdir $*.map) -$(TARGET).ds.gba : $(TARGET).nds +#------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#------------------------------------------------------------------------------- +LIBS := -lfat -lnds9 + + +#------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add +# additional rules for different file extensions +#------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -#--------------------------------------------------------------------------------- -$(TARGET).nds : $(TARGET).arm7 $(TARGET).arm9 - ndstool -c $(TARGET).nds -7 $(TARGET).arm7 -9 $(TARGET).arm9 +export DEPSDIR := $(CURDIR)/$(BUILD) +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + #--------------------------------------------------------------------------------- -$(TARGET).arm7 : arm7/$(TARGET).elf -$(TARGET).arm9 : arm9/$(TARGET).elf - +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) #--------------------------------------------------------------------------------- -arm7/$(TARGET).elf: - $(MAKE) -C arm7 - + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif #--------------------------------------------------------------------------------- -arm9/$(TARGET).elf: - $(MAKE) -C arm9 +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + #--------------------------------------------------------------------------------- clean: - $(MAKE) -C arm9 clean - $(MAKE) -C arm7 clean - rm -f $(TARGET).ds.gba $(TARGET).nds $(TARGET).arm7 $(TARGET).arm9 + @echo clean ... + @rm -fr $(BUILD) $(TARGET).elf $(TARGET).nds $(TARGET).arm9 $(TARGET).ds.gba + + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT).ds.gba : $(OUTPUT).nds +$(OUTPUT).nds : $(OUTPUT).arm9 +$(OUTPUT).arm9 : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- |