diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..46564cc --- /dev/null +++ b/Makefile | |||
@@ -0,0 +1,72 @@ | |||
1 | .POSIX: | ||
2 | .SUFFIXES: | ||
3 | |||
4 | # Path to the development kit (devkitARM) and the GBA library. | ||
5 | DEVKITPRO := /opt/devkitpro | ||
6 | DEVKITARM := /opt/devkitpro/devkitARM | ||
7 | PATH := $(DEVKITARM)/bin:$(PATH) | ||
8 | LIBGBA_DIR := $(DEVKITPRO)/libgba | ||
9 | LIBGBA_SRC := /opt/devkitpro/libgba/include/ | ||
10 | LIBGBA := $(LIBGBA_DIR)/lib/libgba.a | ||
11 | LIBGBA += $(LIBGBA_DIR)/lib/libfat.a | ||
12 | LIBGBA += $(LIBGBA_DIR)/lib/libmm.a | ||
13 | |||
14 | # Source code location and files to watch for changes. | ||
15 | SRC_DIR := src | ||
16 | SRC_MAIN := $(SRC_DIR)/main.c | ||
17 | WATCH_SRC := $(wildcard $(SRC_DIR)/*.c) | ||
18 | WATCH_SRC += $(wildcard $(SRC_DIR)/*.h) | ||
19 | |||
20 | # Output library names and executables. | ||
21 | BIN_NAME := template | ||
22 | BUILD_DIR := build | ||
23 | ELF := $(BUILD_DIR)/$(BIN_NAME).elf | ||
24 | BIN := $(BUILD_DIR)/$(BIN_NAME).gba | ||
25 | |||
26 | # Compiler and linker configuration. | ||
27 | CC := arm-none-eabi-gcc | ||
28 | OBJCOPY := arm-none-eabi-objcopy | ||
29 | ARCH := -mthumb -mthumb-interwork | ||
30 | SPECS := -specs=gba.specs | ||
31 | CFLAGS := -g -Wall -Wextra -pedantic | ||
32 | CFLAGS += -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH) | ||
33 | CFLAGS += -I$(LIBGBA_SRC) | ||
34 | LDFLAGS := $(ARCH) $(SPECS) | ||
35 | LDLIBS := $(LIBGBA) | ||
36 | RELEASE_CFLAGS := -DNDEBUG -O2 | ||
37 | DEBUG_CFLAGS := -DDEBUG -O2 | ||
38 | |||
39 | .PHONY: clean run | ||
40 | |||
41 | # Setup debug/release builds. | ||
42 | # make clean && make <target> DEBUG=0 | ||
43 | # make clean && make <target> DEBUG=1 | ||
44 | DEBUG ?= 0 | ||
45 | ifeq ($(DEBUG), 1) | ||
46 | CFLAGS += $(DEBUG_CFLAGS) | ||
47 | else | ||
48 | CFLAGS += $(RELEASE_CFLAGS) | ||
49 | endif | ||
50 | |||
51 | main: $(BUILD_DIR) $(BIN) | ||
52 | |||
53 | # Strip and fix header to create final .gba file. | ||
54 | $(BIN): $(ELF) | ||
55 | $(OBJCOPY) -v -O binary $(ELF) $(BIN) | ||
56 | gbafix $(BIN) | ||
57 | |||
58 | # Link files. | ||
59 | $(ELF): $(SRC_MAIN) $(WATCH_SRC) | ||
60 | $(CC) $(CFLAGS) $(LDFLAGS) -o $(ELF) $(SRC_MAIN) $(LDLIBS) | ||
61 | |||
62 | # Create build directory if needed. | ||
63 | $(BUILD_DIR): | ||
64 | mkdir -p $(BUILD_DIR) | ||
65 | |||
66 | # Test the output .gba in an emulator. | ||
67 | run: main | ||
68 | mgba-qt $(BIN) | ||
69 | |||
70 | # Remove build directory. | ||
71 | clean: | ||
72 | rm -r $(BUILD_DIR) | ||