146 lines
3.4 KiB
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
|