summaryrefslogtreecommitdiff
path: root/Makefile
blob: c5cde09fe14ed457d0f55794090407c39599a79f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
NAME := pso-gc

BUILD_DIR := build/$(NAME)

DOL := $(BUILD_DIR)/PsoV3.dol
ELF := $(DOL:.dol=.elf)

WINE := wine
export WINEDEBUG ?= -all
DEVKITPPC := /opt/devkitpro/devkitPPC

MWCC_VERSION := 1.3.2
MWLD_VERSION := 1.3.2

ASM_INPUTS := $(wildcard asm/*.s)
C_INPUTS := $(wildcard src/*.c)
CPP_INPUTS := $(wildcard src/*.cpp)
LDSCRIPT := $(BUILD_DIR)/ldscript.lcf

AS := $(DEVKITPPC)/bin/powerpc-eabi-as
CPP := $(DEVKITPPC)/bin/powerpc-eabi-cpp -P

CC := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwcceppc.exe
LD := $(WINE) tools/mwcc_compiler/$(MWCC_VERSION)/mwldeppc.exe

INCLUDES := -i include -i include/dolphin -i include/libc
ASM_INCLUDES := -I include/

ifdef LD_TEST
TEST_LD := -DLD_TEST
else
TEST_LD :=
endif

LDFLAGS := -fp hard -nodefaults

ASFLAGS := -mgekko $(ASM_INCLUDES)

CFLAGS_BASE := -I- $(INCLUDES) $(TEST_LD) -nodefaults -proc gekko -fp hard -O4 -use_lmw_stmw on -str reuse -rostr -sdata2 4

CFLAGS := $(CFLAGS_BASE)
CXXFLAGS := $(CFLAGS_BASE) -Cpp_exceptions off -RTTI off

include obj_files.mk

# This is a hack, and should be removed once we make separate repos for
# all the support libraries (such as the Dolphin SDK, MSL, and MetroTRK).
$(BUILD_DIR)/src/pso/%.o: DIR_UNIQUE_CFLAGS := -inline none -sym on

# File specific flags.

ALL_DIRS := $(sort $(dir $(O_FILES)))

default: all

all: $(ELF)

DUMMY != mkdir -p $(ALL_DIRS)

$(LDSCRIPT): ldscript.lcf
	$(CPP) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<

clean:
	rm -f -d -r build
	find . -name '*.o' -exec rm {} +

$(ELF): $(O_FILES) $(LDSCRIPT)
	@echo $(O_FILES) > build/o_files
	$(LD) $(LDFLAGS) -o $@ -lcf $(LDSCRIPT) @build/o_files

$(BUILD_DIR)/%.o: %.s
	@echo Assembling $<
	$(QUIET) $(AS) $(ASFLAGS) -o $@ $<

$(BUILD_DIR)/%.o: %.c
	@echo "Compiling " $<
	$(QUIET) $(CC) -lang=c $(CFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.o: %.cp
	@echo "Compiling " $<
	$(QUIET) $(CC) $(CXXFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.o: %.cpp
	@echo "Compiling " $<
	$(QUIET) $(CC) -lang=c++ $(CXXFLAGS) $(DIR_UNIQUE_CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $<