Zack Buhman 3bb4740030 cartridge: initial
The Makefile duplication was done out of laziness; the main Makefile
should be rewritten in a similar fashion to this one to allow
per-target selection of linker script.
2024-03-28 15:41:09 +08:00

96 lines
1.9 KiB
Makefile

LIB = ../saturn
### architecture-specific flags ###
AARCH = --isa=sh2 --big
CARCH = -m2 -mb
### general flags ###
OPT ?= -O3
DEBUG = -g -gdwarf-4
AFLAGS += --fatal-warnings
CFLAGS += -falign-functions=4 -ffunction-sections -fdata-sections -fshort-enums -ffreestanding -nostdlib
CFLAGS += -Wall -Werror -Wfatal-errors
CFLAGS += -Wno-array-bounds
CFLAGS += -I$(LIB)
CXXFLAGS += -fno-exceptions -fno-non-call-exceptions -fno-rtti -fno-threadsafe-statics
LDFLAGS += --gc-sections --print-gc-sections --no-warn-rwx-segment --print-memory-usage --entry=_start --orphan-handling=error
LDFLAGS += -L$(LIB)
DEPFLAGS = -MMD -MP
### target ###
TARGET = sh2-none-elf-
CC = $(TARGET)gcc
CXX = $(TARGET)g++
AS = $(TARGET)as
LD = $(TARGET)ld
OBJCOPY = $(TARGET)objcopy
OBJDUMP = $(TARGET)objdump
### rules ###
%.o: %.s
$(AS) $(AARCH) $(AFLAGS) $(DEBUG) $< -o $@
%.o: %.c
$(CC) $(CARCH) $(CFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@
%.o: %.cpp
$(CXX) $(CARCH) $(CFLAGS) $(CXXFLAGS) $(OPT) $(DEBUG) $(DEPFLAGS) -MF ${<}.d -c $< -o $@
%.elf:
$(LD) $(LDFLAGS) -T $(LDSCRIPT) $^ -o $@
%.bin: %.elf
$(OBJCOPY) -O binary $< $@
du -b $@
%.ss: %.bin
cp $< $@
%.pcm.o: %.pcm
$(OBJCOPY) \
-I binary -O elf32-sh -B sh2 \
--rename-section .data=.rom.$(basename $@) \
$< $@
### object files ###
SYS_IP_OBJ += $(LIB)/ip/sys_id.o
SYS_IP_OBJ += $(LIB)/ip/segasmp/sys_sec.o
SYS_IP_OBJ += $(LIB)/ip/sys_area.o
SYS_IP_OBJ += $(LIB)/ip/sys_areb.o
SYS_IP_OBJ += $(LIB)/ip/sys_aree.o
SYS_IP_OBJ += $(LIB)/ip/sys_arej.o
SYS_IP_OBJ += $(LIB)/ip/sys_arek.o
SYS_IP_OBJ += $(LIB)/ip/sys_arel.o
SYS_IP_OBJ += $(LIB)/ip/sys_aret.o
SYS_IP_OBJ += $(LIB)/ip/sys_areu.o
SYS_IP_OBJ += $(LIB)/ip/sys_init.o
COMMON_OBJ = start.o runtime.o
CARTRIDGE_OBJ = main.o wc3.pcm.o
cartridge.elf: LDSCRIPT = $(LIB)/cartridge.lds
cartridge.elf: $(SYS_IP_OBJ) $(COMMON_OBJ) $(CARTRIDGE_OBJ)
.SUFFIXES:
.INTERMEDIATE:
.SECONDARY:
.PHONY: all clean
%: RCS/%,v
%: RCS/%
%: %,v
%: s.%
%: SCCS/s.%