nes-mm5-demo/Makefile

146 lines
3.4 KiB
Makefile

# - - - - - - - - - - - - - #
# Variables to change #
# - - - - - - - - - - - - - #
# CC65 executable locations
CC65 = ../../cc65/bin/cc65.exe
# CA65 executable locations
CA65 = ../../cc65/bin/ca65.exe
# LD65 executable locations
LD65 = ../../cc65/bin/ld65.exe
# NES lib locations
NESLIB = ../../cc65/lib/nes.lib
# asminc folder locations
ASMINC = ../../cc65/asminc
# Emulator executable location
EMULATOR = ../../Mesen/Mesen.exe
# Hexdump executable location
HEXDUMP = ..\..\hexdump.exe
# Game name
GAME_NAME = Boilerplate
# Folder with h files to include
INC = include
# Folder with c sources files
SRC = src
# Bin folder for binary output
BIN = bin
# Folder with assembler sources files
ASM = asm
# Change this to 0 if you don't want FamiStudio
FAMISTUDIO = 1
# Change this to 1 if you want the MMC5 mapper
MMC5 = 0
# ! - - - - - - - - - - - - - - - - ! #
# DO NOT CHANGE ANYTHING AFTER THIS #
# ! - - - - - - - - - - - - - - - - ! #
# get all c files
SRCFILE = $(call rwildcard,$(SRC),*.c)
rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
# make the nes game from assembler files and from c files
all:
make asm
make c
# make the nes game from c files
c: $(GAME_NAME)_c.nes
make clean
# make the nes game from assembler files
asm: $(GAME_NAME)_a.nes
make clean
# create the nes file from assembler sources
$(GAME_NAME)_a.nes:
# create folder if it does not exist
@-if not exist "$(BIN)" ( mkdir "$(BIN)" )
# assemble main file
.\$(CA65) asm/crt0.asm -o $(BIN)/$(GAME_NAME).o --debug-info -DFAMISTUDIO=$(FAMISTUDIO) -DMMC5=$(MMC5)
# link files
ifeq ($(MMC5),1)
.\$(LD65) $(BIN)/$(GAME_NAME).o -C $(GAME_NAME)_mmc5.cfg -o $(GAME_NAME)_a.nes --dbgfile $(GAME_NAME)_a.DBG
else
.\$(LD65) $(BIN)/$(GAME_NAME).o -C $(GAME_NAME).cfg -o $(GAME_NAME)_a.nes --dbgfile $(GAME_NAME)_a.DBG
endif
# create the nes file from c sources
$(GAME_NAME)_c.nes: $(addprefix $(BIN)/,$(SRCFILE:.c=.o))
# assemble main file
$(CA65) $(ASM)/crt0.asm -g -o $(BIN)/$(GAME_NAME).o -I$(ASMINC) -DC_CODE -DFAMISTUDIO=$(FAMISTUDIO) -DMMC5=$(MMC5)
# link files
ifeq ($(MMC5),1)
$(LD65) $(BIN)/$(GAME_NAME).o $^ -C $(GAME_NAME)_mmc5.cfg -o $@ $(NESLIB) --dbgfile $(GAME_NAME)_c.DBG
else
$(LD65) $(BIN)/$(GAME_NAME).o $^ -C $(GAME_NAME).cfg -o $@ $(NESLIB) --dbgfile $(GAME_NAME)_c.DBG
endif
# assemble object files
$(BIN)/%.o: $(BIN)/%.asm
# create folder if it does not exist
@-if not exist "$(@D)" ( mkdir "$(@D)" )
# assemble a file
$(CA65) -g -I$(INC) -I$(ASMINC) -o $@ $^ -DC_CODE -DFAMISTUDIO=$(FAMISTUDIO) -DMMC5=$(MMC5)
# compile c files
$(BIN)/%.asm: %.c
# create folder if it does not exist
@-if not exist "$(@D)" ( mkdir "$(@D)" )
# compile a file
$(CC65) -O -g -I$(INC) -I$(ASM) -o $@ $^ $(NESLIB) --add-source -DFAMISTUDIO=$(FAMISTUDIO) -DMMC5=$(MMC5)
# clean object files
clean:
@-if exist "$(BIN)" ( rmdir /Q /S "$(BIN)" )
# clean all generated files
clean_all:
make clean
del $(GAME_NAME)_a.nes
del $(GAME_NAME)_a.DBG
del $(GAME_NAME)_c.nes
del $(GAME_NAME)_c.DBG
del dump_$(GAME_NAME)_a.txt
del dump_$(GAME_NAME)_c.txt
# run the nes game generated with c sources
run_c:
$(EMULATOR) $(GAME_NAME)_c.nes
# run the nes game generated with assembler sources
run_a:
$(EMULATOR) $(GAME_NAME)_a.nes
# dump the nes files binary into hexa text
hex:
$(HEXDUMP) $(GAME_NAME)_a.nes > dump_$(GAME_NAME)_a.txt
$(HEXDUMP) $(GAME_NAME)_c.nes > dump_$(GAME_NAME)_c.txt