Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
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