-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile-128
197 lines (153 loc) · 6.53 KB
/
Makefile-128
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
################################################################################
##
## RAGE1 - Retro Adventure Game Engine, release 1
## (c) Copyright 2020 Jorge Gonzalez Villalonga <jorgegv@daikon.es>
##
## This code is ublished under a GNU GPL license version 3 or later. See
## LICENSE file in the distribution for details.
##
################################################################################
.SILENT:
MYMAKE = $(MAKE) -s -f Makefile-128 -j8
ZPRAGMA_INC = zpragma-128.inc
# All taps
TAPS = $(BAS_LOADER_TAP) $(LOADING_SCREEN_TAP) $(ASMLOADER_TAP) $(BANK_TAPS) $(MAIN_TAP) $(SUB_TAPS)
-include Makefile.common
CFLAGS += -pragma-define:CRT_ORG_CODE=$(BASE_CODE_ADDRESS_128)
CFLAGS += -pragma-define:REGISTER_SP=$(ISR_VECTOR_ADDRESS_128)
.PHONY: datasets codesets taps
build:
$(MYMAKE) banked_definitions
$(MYMAKE) datasets
$(MYMAKE) codesets
$(MYMAKE) banked_code BANKED_CFLAGS=-D_BANKED_CODE_BUILD
$(MYMAKE) banks
$(MYMAKE) main
$(MYMAKE) subs
$(MYMAKE) loader
$(MYMAKE) asmloader
cp $(ENGINE_DIR)/loader128/$(BAS_LOADER_SRC) $(BAS_LOADER)
$(MYMAKE) taps
$(MYMAKE) final
$(MYMAKE) lowmemcheck
$(MYMAKE) section-check
## Check that certain symbols are linked in low memory. It is assumed that
## all symbols mentioned as "extern" in .h files will be accessed from
## outside their modules and should thus be in lowmem. Also, some functions
## should be always placed in lowmem (bank switching, game_startup, etc.)
# all extern declarations in .h files
ENGINE_LOWMEM_SYMBOLS = $(shell grep -r extern engine/include/rage1/ | grep -Po '[\w\[\]]+;$$' | tr -d '[];' )
# some critical initialization and memory management functions
ENGINE_LOWMEM_SYMBOLS += init_datasets init_codesets memory_switch_bank dataset_activate codeset_call_function memory_call_banked_function
# all data generated in the home bank
GAME_LOWMEM_SYMBOLS = $(shell $(NM) $(GENERATED_DIR)/game_data.o | sed '1,/ Symbols:/d' | awk '{print $$4}' )
# all code generated in the home bank
CODE_LOWMEM_SYMBOLS = $(shell for i in $(ENGINE_DIR)/src/*.o; do $(NM) $$i | sed '1,/ Symbols:/d' | awk '{print $$4}' ; done )
# sum it all
ALL_LOWMEM_SYMBOLS = $(ENGINE_LOWMEM_SYMBOLS) $(GAME_LOWMEM_SYMBOLS) $(CODE_LOWMEM_SYMBOLS)
# target for doing the real check
lowmemcheck:
./tools/lowmemsym.pl -m main.map $(ALL_LOWMEM_SYMBOLS)
##
## Dataset compilation to standalone binaries org'ed at 0x5C00
##
datasets: $(ZX0_DATASETS)
dataset_%.bin:
echo "Compiling DATASET $@ ..."
# the '.../*.{asm,c}' at the end of the next line is critical: asm files MUST be included before C ones!
$(ZCC) $(ZCC_TARGET) $(CFLAGS) $(CFLAGS_LIST) --no-crt -o $@ $(GENERATED_DIR_DATASETS)/$(shell basename $@ .bin).src/*.{asm,c}
cp $@ $@.save
echo "-- $$( basename $@ ) uncompressed size: $$( stat -c%s $@ ) bytes"
if [ $$( stat -c%s $@ ) -gt $(DATASET_MAXSIZE) ]; then \
echo "** ERROR: $$( basename $@ ) size ($$( stat -c%s $@ ) bytes) is greater than $(DATASET_MAXSIZE) bytes"; \
exit 1; \
fi
dataset_%.zx0: dataset_%.bin
echo "Compressing DATASET $< ..."
$(ZX0) $< $@ >/dev/null 2>&1
echo "-- $$( basename $@ ) compressed size: $$( stat -c%s $@ ) bytes"
##
## Codeset compilation to standalone binaries org'ed at 0xC000
##
codesets: $(BIN_CODESETS)
codeset_%.bin:
echo "Compiling CODESET $@ ..."
# the '.../*.{asm,c}' at the end of the next line is critical: asm files MUST be included before C ones!
$(ZCC) $(ZCC_TARGET) $(CFLAGS) $(CFLAGS_LIST) -I$(GAME_SRC_DIR) --no-crt -o $@ $(GENERATED_DIR_CODESETS)/$(shell basename $@ .bin).src/*.{asm,c}
mv $(GENERATED_DIR_CODESETS)/$(shell basename $@ .bin)_code_compiler.bin $@
if [ $$( stat -c%s $@ ) -gt $(CODESET_MAXSIZE) ]; then echo "** ERROR: $$( basename $@ ) size is greater than $(CODESET_MAXSIZE) bytes"; exit 1; fi
##
## SUBs (Single Use Binaries) compilation to standalone binaries
##
subs: $(SUB_BINS)
sub_%.bin:
echo "Compiling SUB $@ ..."
mv $(GAME_SRC_DIR)/sub_$* $(GENERATED_DIR_SUBS)/sub_$*.src
$(MAKE) -s -C $(GENERATED_DIR_SUBS)/sub_$*.src
cp $(GENERATED_DIR_SUBS)/sub_$*.src/sub.bin $(GENERATED_DIR)/sub_$*.bin
if ( grep -i 'SINGLE_USE_BLOB' $(GAME_DATA_DIR)/game_config/*.gdata | grep -i 'NAME=$*' | grep -qi 'COMPRESS=1' ) then \
echo "Compressing SUB $@ ..." ; \
$(ZX0) -f $(GENERATED_DIR)/sub_$*.bin >/dev/null 2>&1 ; \
fi
# we set org at 0x0000 for the subs (unused)
sub_%.tap:
echo "Creating TAP $@..."
if ( grep -i 'SINGLE_USE_BLOB' $(GAME_DATA_DIR)/game_config/*.gdata | grep -i 'NAME=$*' | grep -qi 'COMPRESS=1' ) then \
z88dk-appmake +zx --noloader --noheader --org 0x0000 -b $(GENERATED_DIR)/sub_$*.bin.zx0 -o sub_$*.tap ; \
else \
z88dk-appmake +zx --noloader --noheader --org 0x0000 -b $(GENERATED_DIR)/sub_$*.bin -o sub_$*.tap ; \
fi
##
## Banked code compilation to standalone binary at 0xC000
## and associated checks
##
banked_definitions:
./tools/check_banked_code_definitions.pl
banked_code: $(BIN_BANKED_CODE)
$(BIN_BANKED_CODE): $(BANKED_CODE_OBJS_COMMON) $(BANKED_CODE_OBJS_128)
echo "Building $@..."
$(ZCC) $(ZCC_TARGET) $(CFLAGS) -m $(BANKED_CFLAGS) --no-crt -o $@ $(BANKED_CODE_OBJS_128) $(BANKED_CODE_OBJS_COMMON)
mv $(BANKED_CODE_DIR)/$(shell basename $@ .bin)_code_compiler.bin $@
if [ $$( stat -c%s $@ ) -gt $(BANK_MAXSIZE) ]; then echo "** ERROR: $$( basename $@ ) size is greater than $(BANK_MAXSIZE) bytes"; exit 1; fi
##
## Dataset/Codeset Banks
##
banks:
echo "Building Bank binaries and Dataset/Codeset maps..."
./tools/banktool.pl -i $(GENERATED_DIR_DATASETS) -c $(GENERATED_DIR_CODESETS) -o $(GENERATED_DIR)
##
## Custom ASM loader
##
loader:
echo "Creating custom loader..."
./tools/loadertool.pl -i $(GENERATED_DIR) -o $(GENERATED_DIR_ASMLOADER) $(LOADING_SCREEN_FLAG)
asmloader: $(ASMLOADER_BIN)
$(ASMLOADER_BIN):
echo "Assembling loader routine..."
$(ZCC) $(ZCC_TARGET) $(CFLAGS) $(CFLAGS_LIST) --list --no-crt $(ASMLOADER_SRC) -o $(ASMLOADER_BIN)
##
## Taps
##
taps: $(TAPS)
# we set org at 0xC000 for the banks
bank_%.tap: bank_%.bin
echo "Creating TAP $@..."
z88dk-appmake +zx --noloader --noheader --org 0xC000 -b $<
# we set org at base code address for 128 mode, 0x5F00 for 48 mode
$(MAIN_TAP): $(MAIN_BIN)
echo "Creating TAP $@..."
z88dk-appmake +zx --noloader --noheader --org $(BASE_CODE_ADDRESS_128) -b $<
# we set org at 0x8000 for loader
$(ASMLOADER_TAP): $(ASMLOADER_BIN)
echo "Creating TAP $@..."
z88dk-appmake +zx --noloader --org 0x8000 -b $<
##
## Main
##
$(MAIN_BIN): $(OBJS)
echo "Bulding $(MAIN_BIN)...."
$(ZCC) $(ZCC_TARGET) $(CFLAGS) $(CFLAGS_LIST) $(INCLUDE) $(LIBDIR) $(LIBS) $(OBJS) -startup=31 -o $(MAIN_BIN)
##
## Run options
##
FUSE_RUN_OPTS = --machine 128