Permalink
Cannot retrieve contributors at this time
183 lines (147 sloc)
6.8 KB
| ZGB_PATH_UNIX := $(subst ',,$(subst \,/,'$(ZGB_PATH)')) | |
| GBDK_HOME := $(ZGB_PATH_UNIX)/../env/gbdk | |
| PATH := $(ZGB_PATH_UNIX)/../env/make-3.81-bin/bin;$(ZGB_PATH_UNIX)/../env/gbdk/bin;$(ZGB_PATH_UNIX)/../env/msys/bin;$(PATH) | |
| #--- Default build will be release. Can be overiden passing BUILD_TYPE = debug as a parameter | |
| BUILD_TYPE = Release | |
| OBJDIR = ../$(BUILD_TYPE) | |
| OBJDIR_RES_SRC = ../res/src | |
| OBJDIR_RES = ../$(BUILD_TYPE)/res | |
| OBJDIR_ZGB = ../$(BUILD_TYPE)/zgb | |
| BINDIR = ../bin | |
| SDCC = sdcc | |
| SDASGB = sdasgb | |
| SDLDGB = sdldgb | |
| MAKEBIN = makebin | |
| IHXCHECK = ihxcheck | |
| GBR2C = $(ZGB_PATH_UNIX)/../tools/gbr2c/gbr2c | |
| GBM2C = $(ZGB_PATH_UNIX)/../tools/gbm2c/gbm2c | |
| PNGB = $(ZGB_PATH_UNIX)/../env/pngb | |
| MOD2GBT = $(ZGB_PATH_UNIX)/../env/mod2gbt | |
| BGB = $(ZGB_PATH_UNIX)/../env/bgb/bgb | |
| ROMVIEW = $(ZGB_PATH_UNIX)/../env/romview/romview.exe | |
| CFLAGS = -mgbz80 --no-std-crt0 --fsigned-char --use-stdout -Dnonbanked= -I$(GBDK_HOME)/include -I$(GBDK_HOME)/include/asm $(BUILD_DEFS) -I../include -I$(ZGB_PATH_UNIX)/include | |
| CFLAGS += -DFILE_NAME=$(basename $(<F)) | |
| #since I am placing my OAM mirror at the end of the ram (0xDF00-0xDFFF) I need to move the stack to 0xDEFF | |
| LNAMES=-g _shadow_OAM=0xC000 -g .STACK=0xDEFF -g .refresh_OAM=0xFF80 -b _DATA=0xc0a0 -b _CODE=0x0200 | |
| LFLAGS=-n -m -j -w -i -k $(GBDK_HOME)/lib/small/asxxxx/gbz80/ -l gbz80.lib -k $(GBDK_HOME)/lib/small/asxxxx/gb/ -l gb.lib -k $(OBJDIR_ZGB)/ -l zgb.lib $(LNAMES) | |
| ifneq ($(strip $(N_BANKS)),) | |
| BINFLAGS = -yt 1 -yo $(N_BANKS) | |
| endif | |
| # DMG/Color flags | |
| EXTENSION = gb | |
| ifneq (,$(findstring Color,$(BUILD_TYPE))) | |
| BINFLAGS += -yc | |
| CFLAGS += -DCGB | |
| EXTENSION = gbc | |
| endif | |
| # Release/Debug flags | |
| ifneq (,$(findstring Debug,$(BUILD_TYPE))) | |
| CFLAGS += --debug | |
| LFLAGS += -y | |
| PROJECT_NAME := $(PROJECT_NAME)_Debug | |
| else | |
| CFLAGS += -DNDEBUG | |
| endif | |
| current_dir = $(shell pwd) | |
| ASMS_ZGB = $(foreach dir,$(ZGB_PATH_UNIX)/src,$(notdir $(wildcard $(dir)/*.s))) | |
| CLASSES_ZGB = $(foreach dir,$(ZGB_PATH_UNIX)/src,$(notdir $(wildcard $(dir)/*.c))) | |
| ASMS = $(foreach dir,.,$(notdir $(wildcard $(dir)/*.s))) | |
| CLASSES = $(foreach dir,.,$(notdir $(wildcard $(dir)/*.c))) | |
| GBRS = $(foreach dir,../res,$(notdir $(wildcard $(dir)/*.gbr))) | |
| GBMS = $(foreach dir,../res,$(notdir $(wildcard $(dir)/*.gbm))) | |
| PNGS = $(foreach dir,../res,$(notdir $(wildcard $(dir)/*.png))) | |
| MUSICS = $(foreach dir,../res/music,$(notdir $(wildcard $(dir)/*.mod))) | |
| OBJS = $(GBMS:%.gbm=$(OBJDIR_RES)/%.gbm.o) $(GBRS:%.gbr=$(OBJDIR_RES)/%.gbr.o) $(PNGS:%.png=$(OBJDIR_RES)/%.png.o) $(MUSICS:%.mod=$(OBJDIR_RES)/%.mod.o) $(ASMS:%.s=$(OBJDIR)/%.o) $(CLASSES:%.c=$(OBJDIR)/%.o) | |
| OBJS_ZGB = $(ASMS_ZGB:%.s=$(OBJDIR_ZGB)/%.o) $(CLASSES_ZGB:%.c=$(OBJDIR_ZGB)/%.o) | |
| OBJS_ZGB_LIB = $(ASMS_ZGB:%.s=\n%.o) $(CLASSES_ZGB:%.c=\n%.o) | |
| #prevent gbr2c and gbm2c intermediate files from being deleted | |
| .SECONDARY: $(GBMS:%.gbm=$(OBJDIR_RES_SRC)/%.gbm.c) $(GBRS:%.gbr=$(OBJDIR_RES_SRC)/%.gbr.c) $(PNGS:%.png=$(OBJDIR_RES_SRC)/%.png.c) | |
| #dependencies ------------------------------------------------------------------------------------------- | |
| ifneq ($(MAKECMDGOALS),clean) | |
| -include $(CLASSES:%.c=$(OBJDIR)/%.d) | |
| -include $(CLASSES_ZGB:%.c=$(OBJDIR_ZGB)/%.d) | |
| endif | |
| $(OBJDIR_ZGB)/%.d: $(ZGB_PATH_UNIX)/src/%.c | |
| @set -e; mkdir -p $(OBJDIR_ZGB); rm -f $@; \ | |
| $(SDCC) -MM $(CFLAGS) $< > $@.$$$$; \ | |
| sed 's,\($*\)\.rel[ :]*,$(OBJDIR_ZGB)/$*.o $@ : ,g' < $@.$$$$ > $@; \ | |
| rm -f $@.$$$$ | |
| $(OBJDIR)/%.d: %.c $(OBJDIR_RES_SRC) $(GBMS:%.gbm=$(OBJDIR_RES_SRC)/%.gbm.c) $(GBRS:%.gbr=$(OBJDIR_RES_SRC)/%.gbr.c) | |
| @set -e; mkdir -p $(OBJDIR);rm -f $@; \ | |
| $(SDCC) -MM $(CFLAGS) $< > $@.$$$$; \ | |
| sed 's,\($*\)\.rel[ :]*,$(OBJDIR)/$*.o $@ : ,g' < $@.$$$$ > $@; \ | |
| rm -f $@.$$$$ | |
| #--------------------------------------------------------------------------------------------------------- | |
| #folders--------------------------------------------- | |
| $(BINDIR): | |
| @echo Creating folder $(BINDIR) | |
| @mkdir $(BINDIR) | |
| $(OBJDIR): | |
| @echo Creating folder $(OBJDIR) | |
| @mkdir $(OBJDIR) | |
| $(OBJDIR_RES): | |
| @echo Creating folder $(OBJDIR_RES) | |
| @mkdir $(OBJDIR_RES) | |
| $(OBJDIR_RES_SRC): | |
| @echo Creating folder $(OBJDIR_RES_SRC) | |
| @mkdir $(OBJDIR_RES_SRC) | |
| #resources--------------------------------------------- | |
| $(OBJDIR_RES_SRC)/%.gbm.c: ../res/%.gbm | |
| @$(GBM2C) $< $(OBJDIR_RES_SRC) | |
| $(OBJDIR_RES_SRC)/%.gbr.c: ../res/%.gbr | |
| @$(GBR2C) $< $(OBJDIR_RES_SRC) | |
| $(OBJDIR_RES_SRC)/%.png.c: ../res/%.png | |
| @$(PNGB) -mgse $< $@ | |
| $(OBJDIR_RES)/%.o: $(OBJDIR_RES_SRC)/%.c | |
| @echo compiling resource $< | |
| @$(SDCC) $(CFLAGS) -c -o $@ $< | |
| $(OBJDIR_RES)/%.mod.o: ../res/music/%.mod | |
| @echo compiling music: $< | |
| @$(MOD2GBT) $< $(basename $(basename $(notdir $<)))_mod -c $(subst .b,,$(suffix $(<:%.mod=%))) > /dev/null | |
| @mv output.c $(OBJDIR)/music_tmp.c | |
| @$(SDCC) $(CFLAGS) -c -o $@ $(OBJDIR)/music_tmp.c | |
| #ZGB--------------------------------------------- | |
| $(OBJDIR_ZGB): | |
| @echo Creating folder $(OBJDIR_ZGB) | |
| @mkdir $(OBJDIR_ZGB) | |
| $(OBJDIR)/zgb/%.o: $(ZGB_PATH_UNIX)/src/%.s | |
| @echo compiling $< | |
| @$(SDASGB) -plosgff -I"libc" -I$(GBDK_HOME)/lib/small/asxxxx $(filter --constseg CODE_%, $(subst .b,--constseg CODE_,$(suffix $(<:%.s=%)))) -c -o $@ $< | |
| $(OBJDIR)/zgb/%.o: $(ZGB_PATH_UNIX)/src/%.c | |
| @echo compiling $< | |
| @$(SDCC) $(CFLAGS) $(filter --constseg CODE_%, $(subst .b,--constseg CODE_,$(suffix $(<:%.c=%)))) -c -o $@ $< | |
| $(OBJDIR_ZGB)/zgb.lib: $(OBJDIR_ZGB) $(OBJS_ZGB) | |
| @echo creating zgb.lib | |
| @rm -f $(OBJDIR_ZGB)/zgb.lib | |
| @echo -e "$(OBJS_ZGB_LIB)" >> $(OBJDIR_ZGB)/zgb.lib | |
| #Project files------------------------------------ | |
| $(OBJDIR)/%.o: %.s | |
| @echo compiling $< | |
| @$(SDASGB) -plosgff -I"libc" $(filter --constseg CODE_%, $(subst .b,--constseg CODE_,$(suffix $(<:%.s=%)))) -c -o $@ $< | |
| $(OBJDIR)/%.o: %.c | |
| @echo compiling $< | |
| @$(SDCC) $(CFLAGS) $(filter --constseg CODE_%, $(subst .b,--constseg CODE_,$(suffix $(<:%.c=%)))) -c -o $@ $< | |
| $(BINDIR)/$(PROJECT_NAME).$(EXTENSION): $(OBJDIR_ZGB)/zgb.lib $(OBJDIR) $(OBJDIR_RES) $(OBJDIR_RES_SRC) $(BINDIR) $(OBJS) | |
| @echo Linking | |
| @$(SDLDGB) $(LFLAGS) $(OBJDIR)/$(PROJECT_NAME).ihx $(GBDK_HOME)/lib/small/asxxxx/gb/crt0.o $(OBJS) | |
| @$(IHXCHECK) $(OBJDIR)/$(PROJECT_NAME).ihx -e | |
| @$(MAKEBIN) -Z $(BINFLAGS) $(OBJDIR)/$(PROJECT_NAME).ihx $(OBJDIR)/$(PROJECT_NAME).$(EXTENSION) | |
| @$(ROMVIEW) $(OBJDIR)/$(PROJECT_NAME).$(EXTENSION) 255 | |
| @mv $(OBJDIR)/$(PROJECT_NAME).$(EXTENSION) $(BINDIR)/$(PROJECT_NAME).$(EXTENSION) | |
| @rm -f *.adb | |
| build_lib: $(OBJDIR) $(OBJS) | |
| build_gb: $(BINDIR)/$(PROJECT_NAME).$(EXTENSION) | |
| clean: | |
| @echo Cleaning $(PROJECT_NAME) | |
| @rm -rf $(BINDIR) | |
| @rm -f $(OBJDIR)/*.* | |
| @rm -rf .map | |
| @rm -rf .lst | |
| @rm -rf $(OBJDIR_ZGB) | |
| @rm -rf $(OBJDIR_RES) | |
| @rm -rf $(OBJDIR_RES_SRC) | |
| run: all | |
| @if test -f $(BINDIR)/$(PROJECT_NAME).$(EXTENSION); then \ | |
| echo Running $(BINDIR)/$(PROJECT_NAME).$(EXTENSION); \ | |
| $(BGB) $(BINDIR)/$(PROJECT_NAME).$(EXTENSION); \ | |
| fi | |