|
| 1 | +PRODUCT_NAME = my_project |
| 2 | + |
| 3 | +# You probably won't need to touch anything below here!!! |
| 4 | +# The one exception is the cleanup stuff. |
| 5 | + |
| 6 | +SOURCES = $(wildcard *.c) |
| 7 | +ASMSOURCES = $(wildcard *.asm) |
| 8 | +AUDIOSOURCES = $(wildcard *.wav) |
| 9 | +DKPATH = /opt/devkitpro |
| 10 | +FIND = find |
| 11 | +COPY = cp -r |
| 12 | + |
| 13 | +# --- File Names |
| 14 | +ELF_NAME = $(PRODUCT_NAME).elf |
| 15 | +ROM_NAME = $(PRODUCT_NAME).gba |
| 16 | +BIN_NAME = $(PRODUCT_NAME) |
| 17 | + |
| 18 | +#MODEL = -mthumb-interwork -mthumb |
| 19 | +MODEL = -mthumb-interwork -marm -mlong-calls #This makes interrupts work |
| 20 | +SPECS = -specs=gba.specs |
| 21 | + |
| 22 | +# --- Archiver |
| 23 | +AS = $(DKPATH)/devkitARM/bin/arm-none-eabi-as |
| 24 | +ASFLAGS = -mthumb-interwork |
| 25 | + |
| 26 | +# --- Compiler |
| 27 | +CC = $(DKPATH)/devkitARM/bin/arm-none-eabi-gcc |
| 28 | +CFLAGS = $(MODEL) -O2 -Wall -pedantic -Wextra -std=c99 -fpermissive -fcommon -save-temps -D_ROM=$(ROM_NAME) |
| 29 | + |
| 30 | +# --- Linker |
| 31 | +LD = $(DKPATH)/devkitARM/bin/arm-none-eabi-gcc |
| 32 | +LDFLAGS = $(SPECS) $(MODEL) -lm |
| 33 | + |
| 34 | +# --- Object/Executable Packager |
| 35 | +OBJCOPY = $(DKPATH)/devkitARM/bin/arm-none-eabi-objcopy |
| 36 | +OBJCOPYFLAGS = -O binary |
| 37 | + |
| 38 | +# --- ROM Fixer |
| 39 | +GBAFIX = $(DKPATH)/tools/bin/gbafix |
| 40 | + |
| 41 | +# --- Delete |
| 42 | +RM = rm -f |
| 43 | + |
| 44 | +ASMOBJECTS = $(ASMSOURCES:.asm=.o) |
| 45 | +AUDIOOBJECTS = $(AUDIOSOURCES:.wav=.c) |
| 46 | +AUDIOHEADERS = $(AUDIOSOURCES:.wav=.h) |
| 47 | +COBJECTS = $(SOURCES:.c=.o) $(AUDIOSOURCES:.wav=.o) |
| 48 | +OBJECTS = $(COBJECTS) $(ASMOBJECTS) |
| 49 | + |
| 50 | + |
| 51 | +# --- Main build target |
| 52 | + |
| 53 | +all : audio build |
| 54 | + |
| 55 | +build : $(ROM_NAME) |
| 56 | + |
| 57 | +# --- Build .elf file into .gba ROM file |
| 58 | +$(ROM_NAME) : $(ELF_NAME) |
| 59 | + $(OBJCOPY) $(OBJCOPYFLAGS) $(ELF_NAME) $(ROM_NAME) |
| 60 | + $(GBAFIX) $(ROM_NAME) |
| 61 | + |
| 62 | +# --- Build .o files into .elf file |
| 63 | +$(ELF_NAME) : $(OBJECTS) |
| 64 | + $(LD) $^ $(LDFLAGS) -o $@ |
| 65 | + |
| 66 | +# -- Build .asm files into .o files |
| 67 | +$(ASMOBJECTS) : %.o : %.asm |
| 68 | + $(AS) $(ASFLAGS) $< -o $@ |
| 69 | + |
| 70 | +# -- Build .c files into .o files |
| 71 | +$(COBJECTS) : %.o : %.c |
| 72 | + $(CC) $(CFLAGS) -c $< -o $@ |
| 73 | + |
| 74 | +# -- Build .wav files into .c and .h files |
| 75 | +$(AUDIOOBJECTS) : %.c : %.wav |
| 76 | + wav2c $< $@ $* |
| 77 | + |
| 78 | +$(AUDIOHEADERS) : %.h : %.c |
| 79 | + |
| 80 | + |
| 81 | +clean: |
| 82 | + $(RM) $(ROM_NAME) $(ELF_NAME) $(BIN_NAME) |
| 83 | + $(RM) $(AUDIOOBJECTS) $(AUDIOHEADERS) |
| 84 | + $(RM) *.o *.i *.s *.sav |
| 85 | + |
| 86 | +audio: $(AUDIOOBJECTS) |
0 commit comments