summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-04-13 17:34:33 +0200
committerBad Diode <bd@badd10de.dev>2021-04-13 17:34:33 +0200
commit2809b83ee4d0fde8ebb406d4cdd39d142840254c (patch)
tree10d24f2b7ec1cbc6ef25a0c6b2760892602e0b69
downloadgba-experiments-2809b83ee4d0fde8ebb406d4cdd39d142840254c.tar.gz
gba-experiments-2809b83ee4d0fde8ebb406d4cdd39d142840254c.zip
Initial commit of gba template compilation with custom Makefile
-rw-r--r--.gitignore1
-rw-r--r--Makefile72
-rw-r--r--src/main.c33
3 files changed, 106 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
build
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.
5DEVKITPRO := /opt/devkitpro
6DEVKITARM := /opt/devkitpro/devkitARM
7PATH := $(DEVKITARM)/bin:$(PATH)
8LIBGBA_DIR := $(DEVKITPRO)/libgba
9LIBGBA_SRC := /opt/devkitpro/libgba/include/
10LIBGBA := $(LIBGBA_DIR)/lib/libgba.a
11LIBGBA += $(LIBGBA_DIR)/lib/libfat.a
12LIBGBA += $(LIBGBA_DIR)/lib/libmm.a
13
14# Source code location and files to watch for changes.
15SRC_DIR := src
16SRC_MAIN := $(SRC_DIR)/main.c
17WATCH_SRC := $(wildcard $(SRC_DIR)/*.c)
18WATCH_SRC += $(wildcard $(SRC_DIR)/*.h)
19
20# Output library names and executables.
21BIN_NAME := template
22BUILD_DIR := build
23ELF := $(BUILD_DIR)/$(BIN_NAME).elf
24BIN := $(BUILD_DIR)/$(BIN_NAME).gba
25
26# Compiler and linker configuration.
27CC := arm-none-eabi-gcc
28OBJCOPY := arm-none-eabi-objcopy
29ARCH := -mthumb -mthumb-interwork
30SPECS := -specs=gba.specs
31CFLAGS := -g -Wall -Wextra -pedantic
32CFLAGS += -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH)
33CFLAGS += -I$(LIBGBA_SRC)
34LDFLAGS := $(ARCH) $(SPECS)
35LDLIBS := $(LIBGBA)
36RELEASE_CFLAGS := -DNDEBUG -O2
37DEBUG_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
44DEBUG ?= 0
45ifeq ($(DEBUG), 1)
46 CFLAGS += $(DEBUG_CFLAGS)
47else
48 CFLAGS += $(RELEASE_CFLAGS)
49endif
50
51main: $(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.
67run: main
68 mgba-qt $(BIN)
69
70# Remove build directory.
71clean:
72 rm -r $(BUILD_DIR)
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..64f6234
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,33 @@
1#include <gba_console.h>
2#include <gba_video.h>
3#include <gba_interrupt.h>
4#include <gba_systemcalls.h>
5#include <gba_input.h>
6#include <stdio.h>
7#include <stdlib.h>
8
9//---------------------------------------------------------------------------------
10// Program entry point
11//---------------------------------------------------------------------------------
12int main(void) {
13//---------------------------------------------------------------------------------
14
15
16 // the vblank interrupt must be enabled for VBlankIntrWait() to work
17 // since the default dispatcher handles the bios flags no vblank handler
18 // is required
19 irqInit();
20 irqEnable(IRQ_VBLANK);
21
22 consoleDemoInit();
23
24 // ansi escape sequence to set print co-ordinates
25 // /x1b[line;columnH
26 iprintf("\x1b[10;10HHello World!\n");
27
28 while (1) {
29 VBlankIntrWait();
30 }
31}
32
33