diff --git a/libctru/Makefile b/libctru/Makefile index 92c78e4..5dd829b 100644 --- a/libctru/Makefile +++ b/libctru/Makefile @@ -1,36 +1,124 @@ -CC = arm-none-eabi-gcc -AR = arm-none-eabi-ar -CFLAGS += -Wall -std=c99 -march=armv6 -O0 -I"$(CURDIR)/include/" +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- -CFILES = $(wildcard source/*.c) -OFILES = $(CFILES:source/%.c=build/%.o) -DFILES = $(CFILES:source/%.c=build/%.d) -SFILES = $(wildcard source/*.s) -OFILES += $(SFILES:source/%.s=build/%.o) -PROJECTNAME = "libctru" +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif -.PHONY:=all dir +include $(DEVKITARM)/base_rules -all: dir lib/$(PROJECTNAME).a +#--------------------------------------------------------------------------------- +# 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 +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#--------------------------------------------------------------------------------- +TARGET := ctru +BUILD := build +SOURCES := source source/services +DATA := data +INCLUDES := include -dir: - mkdir -p build - mkdir -p lib +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -marm -lib/$(PROJECTNAME).a: $(OFILES) - $(AR) rvs $@ $^ +CFLAGS := -g -Wall -O2 -mthumb-interwork\ + -mcpu=mpcore -mtune=mpcore \ + -mfpu=vfp -ffast-math -mword-relocations \ + $(ARCH) +CFLAGS += $(INCLUDE) -DARM11 -D_3DS +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) -mcpu=mpcore -mtune=mpcore +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := + +#--------------------------------------------------------------------------------- +# 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)/lib/lib$(TARGET).a + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +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)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +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) \ + -I$(CURDIR)/$(BUILD) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + +lib: + @[ -d $@ ] || mkdir -p $@ + +$(BUILD): lib + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- clean: - @rm -f build/*.o build/*.d - @rm -f $(PROJECTNAME).a - @echo "all cleaned up !" + @echo clean ... + @rm -fr $(BUILD) lib --include $(DFILES) +#--------------------------------------------------------------------------------- +else -build/%.o: source/%.c - $(CC) $(CFLAGS) -c $< -o $@ - @$(CC) -MM $< > build/$*.d +DEPENDS := $(OFILES:.o=.d) -build/%.o: source/%.s - $(CC) $(CFLAGS) -c $< -o $@ - @$(CC) -MM $< > build/$*.d +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT) : $(OFILES) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/libctru/source/AC.c b/libctru/source/services/ac.c similarity index 100% rename from libctru/source/AC.c rename to libctru/source/services/ac.c diff --git a/libctru/source/APT.c b/libctru/source/services/apt.c similarity index 100% rename from libctru/source/APT.c rename to libctru/source/services/apt.c diff --git a/libctru/source/CFGNOR.c b/libctru/source/services/cfgnor.c similarity index 100% rename from libctru/source/CFGNOR.c rename to libctru/source/services/cfgnor.c diff --git a/libctru/source/CSND.c b/libctru/source/services/csnd.c similarity index 100% rename from libctru/source/CSND.c rename to libctru/source/services/csnd.c diff --git a/libctru/source/FS.c b/libctru/source/services/fs.c similarity index 100% rename from libctru/source/FS.c rename to libctru/source/services/fs.c diff --git a/libctru/source/GPU.c b/libctru/source/services/gpu.c similarity index 100% rename from libctru/source/GPU.c rename to libctru/source/services/gpu.c diff --git a/libctru/source/gpuResetSequence.c b/libctru/source/services/gpuResetSequence.c similarity index 100% rename from libctru/source/gpuResetSequence.c rename to libctru/source/services/gpuResetSequence.c diff --git a/libctru/source/GSP.c b/libctru/source/services/gsp.c similarity index 100% rename from libctru/source/GSP.c rename to libctru/source/services/gsp.c diff --git a/libctru/source/GX.c b/libctru/source/services/gx.c similarity index 100% rename from libctru/source/GX.c rename to libctru/source/services/gx.c diff --git a/libctru/source/HID.c b/libctru/source/services/hid.c similarity index 100% rename from libctru/source/HID.c rename to libctru/source/services/hid.c diff --git a/libctru/source/HTTPC.c b/libctru/source/services/httpc.c similarity index 100% rename from libctru/source/HTTPC.c rename to libctru/source/services/httpc.c diff --git a/libctru/source/IR.c b/libctru/source/services/ir.c similarity index 100% rename from libctru/source/IR.c rename to libctru/source/services/ir.c diff --git a/libctru/source/OS.c b/libctru/source/services/os.c similarity index 100% rename from libctru/source/OS.c rename to libctru/source/services/os.c diff --git a/libctru/source/SHDR.c b/libctru/source/services/shdr.c similarity index 100% rename from libctru/source/SHDR.c rename to libctru/source/services/shdr.c diff --git a/libctru/source/SOC.c b/libctru/source/services/soc.c similarity index 100% rename from libctru/source/SOC.c rename to libctru/source/services/soc.c