125 lines
3.8 KiB
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
|