summaryrefslogtreecommitdiff
path: root/Makefile
blob: c5019b6aaea741f55216d2b8cb60c92ca58983de (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
NAME := pso-gc

BUILD_DIR := build/$(NAME)

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

WINE := wine
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/
ASM_INCLUDES := -I include/

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

LDFLAGS := -fp hard -nodefaults

ASFLAGS := -mgekko $(ASM_INCLUDES)

CFLAGS := -nodefaults -proc gekko -fp hard -O4 -use_lmw_stmw on -str reuse -RTTI off -rostr -sdata2 4 -g $(INCLUDES) $(TEST_LD)

include obj_files.mk

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) $(CFLAGS) $(FILE_UNIQUE_CFLAGS) -c -o $@ $<

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

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