tonc_template/Makefile

125 lines
3.8 KiB
Makefile

#!/usr/bin/make -f
# Pure POSIX Makefile for GBA developemnt
#
#
# Copyright (c) 2021 nytpu <alex [at] nytpu.com>
# SPDX-License-Identifier: BSL-1.0
# The orginal source for this file is available at <https://git.sr.ht/~nytpu/tonc-template>.
#
# Permission is hereby granted, free of charge, to any person or organization
# obtaining a copy of the software and accompanying documentation covered by
# this license (the "Software") to use, reproduce, display, distribute,
# execute, and transmit the Software, and to prepare derivative works of the
# Software, and to permit third-parties to whom the Software is furnished to
# do so, all subject to the following:
#
# The copyright notices in the Software and this entire statement, including
# the above license grant, this restriction and the following disclaimer, must
# be included in all copies of the Software, in whole or in part, and all
# derivative works of the Software, unless such copies or derivative works are
# solely in the form of machine-executable object code generated by a source
# language processor.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
# SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
# FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
.POSIX:
.SILENT:
.SUFFIXES:
## program info
# CHANGE ME!
PROGNAME = tonc-template
## compilation flags
ARCH = -mthumb -mthumb-interwork
# when developing, it's recommended to set -Og -g when configuring
CFLAGS = -I. -Ilibmisc -Wall -Wextra -Wfatal-errors -O3 \
-mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH) -Wno-missing-field-initializers \
-Wno-unused-parameter -Werror=return-type
ASFLAGS = -g $(ARCH)
LDFLAGS = -Llibmisc -g $(ARCH)
LDLIBS = -ltonc -lmisc
# configure options to modify flags
include config.mk
## artifacts to build
# C source files to build, with .o extension
OBJS = main.o libgbfs.o
# Files to include in the GBFS bin
GBFSFILES = $(PNGFILES)
# Files to convert from .png to .bin via grit -ff. Unfortunately each png file
# must be duplicated, as "filename.pal.bin", "filename.img.bin", and
# "filename.map.bin". If you're using shared palettes or tilesets then you
# only need to add "shared.pal.bin" and/or "filename.img.bin".
PNGFILES =
## default target
all: $(PROGNAME).gba
## dependencies
main.o: gbfs.h
libgbfs.o: gbfs.h
$(OBJS): config.mk Makefile
## rules
.SUFFIXES: .o .c .s .img.bin .pal.bin .png .ase
.c.o:
printf 'Compiling\t$<\n'
$(CC) $(CFLAGS) -c -o $@ $<
.s.o:
printf 'Assembling\t$<\n'
$(AS) $(ASFLAGS) $< -o $@
.png.pal.bin .png.img.bin:
printf 'Converting\t$< to\t$@\n'
$(GRIT) $< -o $@ -ff
.ase.png:
printf 'Converting\t$< to\t$@\n'
aseprite -b $< --save-as $@
# UNCOMMENT "$(PROGNAME).gbfs" and "cat ..." if you want to include a GBFS
# bundle in your game!
$(PROGNAME).gba: $(PROGNAME).elf #$(PROGNAME).gbfs
printf 'Finalizing ROM\t$@\n'
$(OBJCOPY) -O binary $< $@
$(GBAFIX) $@
$(PADBIN) 256 $@
#cat $(PROGNAME).gbfs >> $@
$(PROGNAME).elf: $(OBJS) libmisc/libmisc.a
printf 'Linking\t\t$@\n'
$(CC) $(LDFLAGS) -specs=gba.specs $(OBJS) $(LDLIBS) -o $@
$(PROGNAME).gbfs: $(GBFSFILES)
printf 'Archiving GBFS\t$@\n'
touch $@
$(GBFS) $@ $(GBFSFILES)
libmisc/libmisc.a:
cd libmisc && CC='$(CC)' CFLAGS='$(CFLAGS)' ./configure && make
## phonies
# technically .PHONY isn't POSIX, but targets with a leading period aren't
# reserved so it's still valid, it'd just be useless to actually execute
.PHONY: all clean
clean:
rm -rf $(PROGNAME).gba $(PROGNAME).elf $(PROGNAME).gbfs \
$(OBJS) $(GBFSFILES) $(PNGFILES)
cd libmisc && make clean