mirror of https://github.com/ClassiCube/ClassiCube
102 lines
3.2 KiB
Makefile
102 lines
3.2 KiB
Makefile
ifeq ($(strip $(DEVKITPRO)),)
|
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
endif
|
|
|
|
.SUFFIXES:
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Configurable options
|
|
#---------------------------------------------------------------------------------
|
|
# Name of the final output
|
|
TARGET = ClassiCube-gba
|
|
# List of directories containing source code
|
|
SOURCE_DIRS = src src/gba
|
|
# Directory where object files are placed
|
|
BUILD_DIR = build/gba
|
|
|
|
GAME_TITLE = ClassiCube
|
|
GAME_CODE = 0000
|
|
MAKER_CODE = 00
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Compilable files
|
|
#---------------------------------------------------------------------------------
|
|
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
|
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
|
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
|
|
|
# Dependency tracking
|
|
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
|
DEPFILES := $(OBJS:%.o=%.d)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Code generation
|
|
#---------------------------------------------------------------------------------
|
|
ARCH = -mthumb -mthumb-interwork
|
|
CFLAGS = -g -Wall -O2 -DPLAT_GBA -ffunction-sections -fdata-sections -mcpu=arm7tdmi -mtune=arm7tdmi $(ARCH)
|
|
ASFLAGS = -g $(ARCH)
|
|
|
|
LDFLAGS = -specs=gba.specs -g $(ARCH)
|
|
|
|
LIBGBA := $(DEVKITPRO)/libgba
|
|
INCLUDES += $(foreach dir, $(LIBGBA), -I$(dir)/include)
|
|
LDFLAGS += $(foreach dir, $(LIBGBA), -L$(dir)/lib)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Compiler tools
|
|
#---------------------------------------------------------------------------------
|
|
PREFIX = $(DEVKITPRO)/devkitARM/bin/arm-none-eabi-
|
|
ARM_AS = $(PREFIX)as
|
|
ARM_CC = $(PREFIX)gcc
|
|
ARM_OBJCOPY = $(PREFIX)objcopy
|
|
|
|
GBAFIX = $(DEVKITPRO)/tools/bin/gbafix
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Main targets
|
|
#---------------------------------------------------------------------------------
|
|
default: $(BUILD_DIR) $(TARGET).gba
|
|
|
|
clean:
|
|
rm $(TARGET).gba $(TARGET).elf $(OBJS)
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $(BUILD_DIR)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Executable generation
|
|
#---------------------------------------------------------------------------------
|
|
$(TARGET).elf: $(OBJS)
|
|
$(ARM_CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
|
|
|
$(TARGET).gba: $(TARGET).elf
|
|
$(ARM_OBJCOPY) -O binary $< $@
|
|
$(GBAFIX) $@ -t$(GAME_TITLE) -c$(GAME_CODE) -m$(MAKER_CODE)
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Object generation
|
|
#---------------------------------------------------------------------------------
|
|
$(BUILD_DIR)/%.o: src/%.c
|
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.o: src/gba/%.c
|
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.o: src/gba/%.S
|
|
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# Dependency tracking
|
|
#---------------------------------------------------------------------------------
|
|
$(DEPFILES):
|
|
|
|
include $(wildcard $(DEPFILES))
|