-
Notifications
You must be signed in to change notification settings - Fork 133
/
Rules.make
134 lines (104 loc) · 4.25 KB
/
Rules.make
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# _____ ___ ____ ___ ____
# ____| | ____| | | |____|
# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
#-----------------------------------------------------------------------
# Copyright 2001-2004, ps2dev - http://www.ps2dev.org
# Licenced under Academic Free License version 2.0
# Review ps2sdk README & LICENSE files for further details.
IOP_CC_VERSION := $(shell $(IOP_CC) -dumpversion)
IOP_OBJS_DIR ?= obj/
IOP_SRC_DIR ?= src/
IOP_INC_DIR ?= include/
ifeq ($(IOP_CC_VERSION),3.2.2)
ASFLAGS_TARGET = -march=r3000
endif
ifeq ($(IOP_CC_VERSION),3.2.3)
ASFLAGS_TARGET = -march=r3000
endif
# include dir
IOP_INCS := $(IOP_INCS) -I$(IOP_SRC_DIR) -I$(IOP_SRC_DIR)include -I$(IOP_INC_DIR) -I$(PS2SDKSRC)/iop/kernel/include -I$(PS2SDKSRC)/common/include
# Optimization compiler flags
IOP_OPTFLAGS ?= -Os
# Warning compiler flags
IOP_WARNFLAGS ?= -Wall -Werror
# Debug information flags
IOP_DBGINFOFLAGS ?= -gdwarf-2 -gz
# C compiler flags
# -fno-builtin is required to prevent the GCC built-in functions from being included,
# for finer-grained control over what goes into each IRX.
IOP_CFLAGS := -D_IOP -fno-builtin -G0 $(IOP_OPTFLAGS) $(IOP_WARNFLAGS) $(IOP_DBGINFOFLAGS) $(IOP_INCS) $(IOP_CFLAGS)
ifeq ($(DEBUG),1)
IOP_CFLAGS += -DDEBUG
endif
# Linker flags
IOP_LDFLAGS := -nostdlib -s $(IOP_LDFLAGS)
# Additional C compiler flags for GCC >=v5.3.0
# -msoft-float is to "remind" GCC/Binutils that the soft-float ABI is to be used. This is due to a bug, which
# results in the ABI not being passed correctly to binutils and iop-as defaults to the hard-float ABI instead.
# -mno-explicit-relocs is required to work around the fact that GCC is now known to
# output multiple LO relocs after one HI reloc (which the IOP kernel cannot deal with).
# -fno-toplevel-reorder (for IOP import and export tables only) disables toplevel reordering by GCC v4.2 and later.
# Without it, the import and export tables can be broken apart by GCC's optimizations.
ifneq ($(IOP_CC_VERSION),3.2.2)
ifneq ($(IOP_CC_VERSION),3.2.3)
IOP_CFLAGS += -msoft-float -mno-explicit-relocs
IOP_IETABLE_CFLAGS := -fno-toplevel-reorder
endif
endif
# If gpopt is requested, use it if the GCC version is compatible
ifneq (x$(IOP_PREFER_GPOPT),x)
ifeq ($(IOP_CC_VERSION),3.2.2)
IOP_CFLAGS += -DUSE_GP_REGISTER=1 -mgpopt -G$(IOP_PREFER_GPOPT)
endif
ifeq ($(IOP_CC_VERSION),3.2.3)
IOP_CFLAGS += -DUSE_GP_REGISTER=1 -mgpopt -G$(IOP_PREFER_GPOPT)
endif
endif
# Assembler flags
IOP_ASFLAGS := $(ASFLAGS_TARGET) -EL -G0 $(IOP_ASFLAGS)
IOP_OBJS := $(IOP_OBJS:%=$(IOP_OBJS_DIR)%)
# Externally defined variables: IOP_BIN, IOP_OBJS, IOP_LIB
# These macros can be used to simplify certain build rules.
IOP_C_COMPILE = $(IOP_CC) $(IOP_CFLAGS)
# Command for ensuring the output directory for the rule exists.
DIR_GUARD = @$(MKDIR) -p $(@D)
MAKE_CURPID := $(shell printf '%s' $$PPID)
$(IOP_OBJS_DIR)%.o: $(IOP_SRC_DIR)%.c
$(DIR_GUARD)
$(IOP_C_COMPILE) -c $< -o $@
$(IOP_OBJS_DIR)%.o: $(IOP_SRC_DIR)%.S
$(DIR_GUARD)
$(IOP_C_COMPILE) -c $< -o $@
$(IOP_OBJS_DIR)%.o: $(IOP_SRC_DIR)%.s
$(DIR_GUARD)
$(IOP_AS) $(IOP_ASFLAGS) $< -o $@
.INTERMEDIATE:: $(IOP_LIB)_tmp$(MAKE_CURPID) $(IOP_OBJS_DIR)build-imports.c $(IOP_OBJS_DIR)build-exports.c
$(IOP_OBJS_DIR)template-imports.h:
$(DIR_GUARD)
$(PRINTF) '%s\n' "#include \"irx_imports.h\"" > $@
# Rules to build imports.lst.
$(IOP_OBJS_DIR)build-imports.c: $(IOP_OBJS_DIR)template-imports.h $(IOP_SRC_DIR)imports.lst
$(DIR_GUARD)
cat $^ > $@
$(IOP_OBJS_DIR)imports.o: $(IOP_OBJS_DIR)build-imports.c
$(DIR_GUARD)
$(IOP_C_COMPILE) $(IOP_IETABLE_CFLAGS) -c $< -o $@
$(IOP_OBJS_DIR)template-exports.h:
$(DIR_GUARD)
$(PRINTF) '%s\n' "#include \"irx.h\"" > $@
# Rules to build exports.tab.
$(IOP_OBJS_DIR)build-exports.c: $(IOP_OBJS_DIR)template-exports.h $(IOP_SRC_DIR)exports.tab
$(DIR_GUARD)
cat $^ > $@
$(IOP_OBJS_DIR)exports.o: $(IOP_OBJS_DIR)build-exports.c
$(DIR_GUARD)
$(IOP_C_COMPILE) $(IOP_IETABLE_CFLAGS) -c $< -o $@
$(IOP_BIN): $(IOP_OBJS) $(IOP_LIB_ARCHIVES) $(IOP_ADDITIONAL_DEPS)
$(DIR_GUARD)
$(IOP_C_COMPILE) $(IOP_OPTFLAGS) -o $(IOP_BIN) $(IOP_OBJS) $(IOP_LDFLAGS) $(IOP_LIB_ARCHIVES) $(IOP_LIBS)
$(IOP_LIB)_tmp$(MAKE_CURPID): $(IOP_OBJS)
$(DIR_GUARD)
$(IOP_AR) cru $@ $(IOP_OBJS)
$(IOP_LIB): $(IOP_LIB)_tmp$(MAKE_CURPID)
$(DIR_GUARD)
mv $< $@