1
1
TOOLCHAIN := $(DEVKITARM )
2
2
COMPARE ?= 0
3
3
4
- ifeq ($(CC ) ,)
5
- HOSTCC := gcc
6
- else
7
- HOSTCC := $(CC )
4
+ # don't use dkP's base_tools anymore
5
+ # because the redefinition of $(CC) conflicts
6
+ # with when we want to use $(CC) to preprocess files
7
+ # thus, manually create the variables for the bin
8
+ # files, or use arm-none-eabi binaries on the system
9
+ # if dkP is not installed on tihs system
10
+
11
+ ifneq (,$(TOOLCHAIN ) )
12
+ ifneq ($(wildcard $(TOOLCHAIN ) /bin) ,)
13
+ export PATH := $(TOOLCHAIN ) /bin:$(PATH )
8
14
endif
9
-
10
- ifeq ($(CXX ) ,)
11
- HOSTCXX := g++
12
- else
13
- HOSTCXX := $(CXX )
14
15
endif
15
16
16
- ifneq (,$(wildcard $(TOOLCHAIN ) /base_tools) )
17
- include $(TOOLCHAIN ) /base_tools
18
- else
19
- export PATH := $(TOOLCHAIN ) /bin:$(PATH )
20
17
PREFIX := arm-none-eabi-
21
18
OBJCOPY := $(PREFIX ) objcopy
22
- export CC := $(PREFIX ) gcc
23
- export AS := $(PREFIX ) as
24
- endif
25
- export CPP := $(PREFIX ) cpp
26
- export LD := $(PREFIX ) ld
19
+ AS := $(PREFIX ) as
20
+
21
+ LD := $(PREFIX ) ld
22
+
23
+ # note: the makefile must be set up so MODERNCC is never called
24
+ # if MODERN=0
25
+ MODERNCC := $(PREFIX ) gcc
27
26
28
27
ifeq ($(OS ) ,Windows_NT)
29
28
EXE := .exe
@@ -37,6 +36,22 @@ MAKER_CODE := 01
37
36
REVISION := 0
38
37
MODERN ?= 0
39
38
39
+ ifneq ($(MODERN ) ,1)
40
+ CPP := $(CC ) -E
41
+ else
42
+ CPP := $(PREFIX ) cpp
43
+ endif
44
+
45
+ ROM_NAME := pokeemerald.gba
46
+ ELF_NAME := $(ROM_NAME:.gba=.elf )
47
+ MAP_NAME := $(ROM_NAME:.gba=.map )
48
+ OBJ_DIR_NAME := build/emerald
49
+
50
+ MODERN_ROM_NAME := pokeemerald_modern.gba
51
+ MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf )
52
+ MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map )
53
+ MODERN_OBJ_DIR_NAME := build/modern
54
+
40
55
SHELL := /bin/bash -o pipefail
41
56
42
57
ELF = $(ROM:.gba=.elf )
@@ -64,20 +79,20 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN)
64
79
ifeq ($(MODERN ) ,0)
65
80
CC1 := tools/agbcc/bin/agbcc$(EXE )
66
81
override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g
67
- ROM := pokeemerald.gba
68
- OBJ_DIR := build/emerald
82
+ ROM := $( ROM_NAME )
83
+ OBJ_DIR := $( OBJ_DIR_NAME )
69
84
LIBPATH := -L ../../tools/agbcc/lib
70
85
else
71
- CC1 = $(shell $(CC ) --print-prog-name=cc1) -quiet
86
+ CC1 = $(shell $(MODERNCC ) --print-prog-name=cc1) -quiet
72
87
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g
73
- ROM := pokeemerald_modern.gba
74
- OBJ_DIR := build/modern
75
- LIBPATH := -L "$(dir $(shell $(CC ) -mthumb -print-file-name=libgcc.a) ) " -L "$(dir $(shell $(CC ) -mthumb -print-file-name=libc.a) ) "
88
+ ROM := $( MODERN_ROM_NAME )
89
+ OBJ_DIR := $( MODERN_OBJ_DIR_NAME )
90
+ LIBPATH := -L "$(dir $(shell $(MODERNCC ) -mthumb -print-file-name=libgcc.a) ) " -L "$(dir $(shell $(MODERNCC ) -mthumb -print-file-name=libc.a) ) "
76
91
endif
77
92
78
93
CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR ) -Wno-trigraphs -DMODERN=$(MODERN )
79
- ifeq ($(MODERN ) ,0 )
80
- CPPFLAGS += -I tools/agbcc/include -I tools/agbcc
94
+ ifneq ($(MODERN ) ,1 )
95
+ CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef
81
96
endif
82
97
83
98
LDFLAGS = -Map ../../$(MAP )
@@ -111,7 +126,7 @@ MAKEFLAGS += --no-print-directory
111
126
# Secondary expansion is required for dependency variables in object rules.
112
127
.SECONDEXPANSION :
113
128
114
- .PHONY : all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS ) berry_fix libagbsyscall modern
129
+ .PHONY : all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS ) berry_fix libagbsyscall modern tidymodern tidynonmodern
115
130
116
131
infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g") , $(info $(subst __SPACE__, ,$(line ) ) ) )
117
132
@@ -162,7 +177,7 @@ all: rom
162
177
tools : $(TOOLDIRS )
163
178
164
179
$(TOOLDIRS ) :
165
- @$(MAKE ) -C $@ CC= $( HOSTCC ) CXX= $( HOSTCXX )
180
+ @$(MAKE ) -C $@
166
181
167
182
rom : $(ROM )
168
183
ifeq ($(COMPARE ) ,1)
@@ -177,7 +192,7 @@ clean: mostlyclean clean-tools
177
192
clean-tools :
178
193
@$(foreach tooldir,$(TOOLDIRS ) ,$(MAKE ) clean -C $(tooldir ) ;)
179
194
180
- mostlyclean : tidy
195
+ mostlyclean : tidynonmodern tidymodern
181
196
rm -f $(SAMPLE_SUBDIR ) /* .bin
182
197
rm -f $(CRY_SUBDIR ) /* .bin
183
198
rm -f $(MID_SUBDIR ) /* .s
@@ -192,10 +207,15 @@ mostlyclean: tidy
192
207
tidy :
193
208
rm -f $(ROM ) $(ELF ) $(MAP )
194
209
rm -r $(OBJ_DIR )
195
- ifeq ($(MODERN ) ,0)
196
- @$(MAKE) tidy MODERN=1
197
- endif
198
210
211
+ tidynonmodern :
212
+ rm -f $(ROM_NAME ) $(ELF_NAME ) $(MAP_NAME )
213
+ rm -rf $(OBJ_DIR_NAME )
214
+
215
+ tidymodern :
216
+ rm -f $(MODERN_ROM_NAME ) $(MODERN_ELF_NAME ) $(MODERN_MAP_NAME )
217
+ rm -rf $(MODERN_OBJ_DIR_NAME )
218
+
199
219
ifneq ($(MODERN ) ,0)
200
220
$(C_BUILDDIR ) /berry_crush.o : override CFLAGS += -Wno-address-of-packed-member
201
221
endif
@@ -223,7 +243,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@
223
243
224
244
225
245
ifeq ($(MODERN ) ,0)
226
- $(C_BUILDDIR ) /libc.o : CC1 := tools/agbcc/bin/old_agbcc
246
+ $(C_BUILDDIR ) /libc.o : CC1 := tools/agbcc/bin/old_agbcc$( EXE )
227
247
$(C_BUILDDIR ) /libc.o : CFLAGS := -O2
228
248
229
249
$(C_BUILDDIR ) /siirtc.o : CFLAGS := -mthumb-interwork
@@ -232,10 +252,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork
232
252
$(C_BUILDDIR ) /agb_flash_1m.o : CFLAGS := -O -mthumb-interwork
233
253
$(C_BUILDDIR ) /agb_flash_mx.o : CFLAGS := -O -mthumb-interwork
234
254
235
- $(C_BUILDDIR ) /m4a.o : CC1 := tools/agbcc/bin/old_agbcc
255
+ $(C_BUILDDIR ) /m4a.o : CC1 := tools/agbcc/bin/old_agbcc$( EXE )
236
256
237
257
$(C_BUILDDIR ) /record_mixing.o : CFLAGS += -ffreestanding
238
- $(C_BUILDDIR ) /librfu_intr.o : CC1 := tools/agbcc/bin/agbcc_arm
258
+ $(C_BUILDDIR ) /librfu_intr.o : CC1 := tools/agbcc/bin/agbcc_arm$( EXE )
239
259
$(C_BUILDDIR ) /librfu_intr.o : CFLAGS := -O2 -mthumb-interwork -quiet
240
260
else
241
261
$(C_BUILDDIR ) /librfu_intr.o : CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
@@ -296,11 +316,11 @@ endif
296
316
297
317
ifeq ($(NODEP ) ,1)
298
318
$(DATA_ASM_BUILDDIR ) /% .o : $(DATA_ASM_SUBDIR ) /% .s
299
- $(PREPROC ) $< charmap.txt | $(CPP ) -I include | $(AS ) $(ASFLAGS ) -o $@
319
+ $(PREPROC ) $< charmap.txt | $(CPP ) -I include - | $(AS ) $(ASFLAGS ) -o $@
300
320
else
301
321
define DATA_ASM_DEP
302
322
$1: $2 $$(shell $(SCANINC ) -I include -I "" $2)
303
- $$(PREPROC ) $$< charmap.txt | $$(CPP ) -I include | $$(AS ) $$(ASFLAGS ) -o $$@
323
+ $$(PREPROC ) $$< charmap.txt | $$(CPP ) -I include - | $$(AS ) $$(ASFLAGS ) -o $$@
304
324
endef
305
325
$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src))))
306
326
endif
@@ -329,7 +349,8 @@ $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS)
329
349
cd $(OBJ_DIR ) && sed " s#tools/#../../tools/#g" ../../$(LD_SCRIPT ) > ld_script.ld
330
350
331
351
$(ELF ) : $(OBJ_DIR ) /ld_script.ld $(OBJS ) berry_fix libagbsyscall
332
- cd $(OBJ_DIR ) && $(LD ) $(LDFLAGS ) -T ld_script.ld -o ../../$@ $(OBJS_REL ) $(LIB )
352
+ @echo " cd $( OBJ_DIR) && $( LD) $( LDFLAGS) -T ld_script.ld -o ../../$@ <objects> <lib>"
353
+ @cd $(OBJ_DIR ) && $(LD ) $(LDFLAGS ) -T ld_script.ld -o ../../$@ $(OBJS_REL ) $(LIB )
333
354
$(FIX ) $@ -t" $( TITLE) " -c$(GAME_CODE ) -m$(MAKER_CODE ) -r$(REVISION ) --silent
334
355
335
356
$(ROM ) : $(ELF )
0 commit comments