compiler/bootstrap: Fully automated (make updatebootstrap)
[sdk] / compiler / libec / Makefile.bootstrap
1 .PHONY: all objdir cleantarget clean realclean distclean
2
3 # CORE VARIABLES
4
5 MODULE := ec
6 VERSION := 0.44
7 CONFIG := bootstrap
8 ifndef COMPILER
9 COMPILER := default
10 endif
11
12 TARGET_TYPE = staticlib
13
14 # FLAGS
15
16 ECFLAGS =
17 ifndef DEBIAN_PACKAGE
18 CFLAGS =
19 LDFLAGS =
20 endif
21 PRJ_CFLAGS =
22 CECFLAGS =
23 OFLAGS =
24 LIBS =
25
26 ifdef DEBUG
27 NOSTRIP := y
28 endif
29
30 CONSOLE = -mwindows
31
32 # INCLUDES
33
34 _CF_DIR = .configs/
35
36 include $(_CF_DIR)crossplatform.mk
37 include $(_CF_DIR)$(TARGET_PLATFORM)-$(COMPILER).cf
38
39 # POST-INCLUDES VARIABLES
40
41 OBJ = obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/
42
43 _ECSOURCES = \
44         src/ast.ec \
45         src/copy.ec \
46         src/dbpass.ec \
47         src/ecdefs.ec \
48         src/expression.ec \
49         src/firstPass.ec \
50         src/freeAst.ec \
51         src/grammar.ec \
52         src/lexer.ec \
53         src/loadSymbols.ec \
54         src/output.ec \
55         src/pass0.ec \
56         src/pass1.ec \
57         src/pass15.ec \
58         src/pass16.ec \
59         src/pass2.ec \
60         src/pass3.ec \
61         src/shortcuts.ec \
62         src/type.ec
63
64 ECSOURCES = $(call shwspace,$(_ECSOURCES))
65
66 _COBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(C),$(notdir $(_ECSOURCES))))
67
68 _SYMBOLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(S),$(notdir $(_ECSOURCES))))
69
70 _IMPORTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(I),$(notdir $(_ECSOURCES))))
71
72 _ECOBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(O),$(notdir $(_ECSOURCES))))
73
74 _BOWLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(B),$(notdir $(_ECSOURCES))))
75
76 COBJECTS = $(call shwspace,$(_COBJECTS))
77
78 SYMBOLS = $(call shwspace,$(_SYMBOLS))
79
80 IMPORTS = $(call shwspace,$(_IMPORTS))
81
82 ECOBJECTS = $(call shwspace,$(_ECOBJECTS))
83
84 BOWLS = $(call shwspace,$(_BOWLS))
85
86 SOURCES = $(ECSOURCES) \
87         ../bootstrap/bsl.c
88
89 PRJ_CFLAGS += \
90          $(if $(DEBUG), -g, -O2 -ffast-math) $(FPIC) -Wall -DREPOSITORY_VERSION="\"$(REPOSITORY_VER)\"" \
91                          -DECERE_BOOTSTRAP \
92                          -DECERE_STATIC
93
94 CUSTOM1_PRJ_CFLAGS = \
95                          -I../bootstrap/include \
96          $(PRJ_CFLAGS)
97
98 ECFLAGS += -module $(MODULE)
99 ECFLAGS += \
100          -nolinenumbers
101
102 CECFLAGS += -cpp $(_CPP)
103
104 # TARGETS
105
106 all: objdir $(COBJECTS) $(OBJ)$(MODULE).main.c
107
108 objdir:
109         $(if $(wildcard $(OBJ)),,$(call mkdirq,$(OBJ)))
110         $(if $(ECERE_SDK_SRC),$(if $(wildcard $(call escspace,$(ECERE_SDK_SRC)/crossplatform.mk)),,@$(call echo,Ecere SDK Source Warning: The value of ECERE_SDK_SRC is pointing to an incorrect ($(ECERE_SDK_SRC)) location.)),)
111         $(if $(ECERE_SDK_SRC),,$(if $(ECP_DEBUG)$(ECC_DEBUG)$(ECS_DEBUG),@$(call echo,ECC Debug Warning: Please define ECERE_SDK_SRC before using ECP_DEBUG, ECC_DEBUG or ECS_DEBUG),))
112
113 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
114         @$(call rmq,$(OBJ)symbols.lst)
115         @$(call touch,$(OBJ)symbols.lst)
116         @$(call echo,$(SYMBOLS)) >> $(OBJ)symbols.lst
117         @$(call echo,$(IMPORTS)) >> $(OBJ)symbols.lst
118         $(ECS) $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(call quote_path,$@)
119
120 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
121         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
122         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(call quote_path,$@) -symbols $(OBJ)
123
124 $(SYMBOLS): | objdir
125
126 # SYMBOL RULES
127
128 $(OBJ)ast.sym: src/ast.ec
129         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/ast.ec) -o $(call quote_path,$@)
130
131 $(OBJ)copy.sym: src/copy.ec
132         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/copy.ec) -o $(call quote_path,$@)
133
134 $(OBJ)dbpass.sym: src/dbpass.ec
135         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/dbpass.ec) -o $(call quote_path,$@)
136
137 $(OBJ)ecdefs.sym: src/ecdefs.ec
138         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/ecdefs.ec) -o $(call quote_path,$@)
139
140 $(OBJ)expression.sym: src/expression.ec
141         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/expression.ec) -o $(call quote_path,$@)
142
143 $(OBJ)firstPass.sym: src/firstPass.ec
144         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/firstPass.ec) -o $(call quote_path,$@)
145
146 $(OBJ)freeAst.sym: src/freeAst.ec
147         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/freeAst.ec) -o $(call quote_path,$@)
148
149 $(OBJ)grammar.sym: src/grammar.ec
150         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/grammar.ec) -o $(call quote_path,$@)
151
152 $(OBJ)lexer.sym: src/lexer.ec
153         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/lexer.ec) -o $(call quote_path,$@)
154
155 $(OBJ)loadSymbols.sym: src/loadSymbols.ec
156         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/loadSymbols.ec) -o $(call quote_path,$@)
157
158 $(OBJ)output.sym: src/output.ec
159         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/output.ec) -o $(call quote_path,$@)
160
161 $(OBJ)pass0.sym: src/pass0.ec
162         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass0.ec) -o $(call quote_path,$@)
163
164 $(OBJ)pass1.sym: src/pass1.ec
165         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass1.ec) -o $(call quote_path,$@)
166
167 $(OBJ)pass15.sym: src/pass15.ec
168         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass15.ec) -o $(call quote_path,$@)
169
170 $(OBJ)pass16.sym: src/pass16.ec
171         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass16.ec) -o $(call quote_path,$@)
172
173 $(OBJ)pass2.sym: src/pass2.ec
174         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass2.ec) -o $(call quote_path,$@)
175
176 $(OBJ)pass3.sym: src/pass3.ec
177         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass3.ec) -o $(call quote_path,$@)
178
179 $(OBJ)shortcuts.sym: src/shortcuts.ec
180         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/shortcuts.ec) -o $(call quote_path,$@)
181
182 $(OBJ)type.sym: src/type.ec
183         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/type.ec) -o $(call quote_path,$@)
184
185 # C OBJECT RULES
186
187 $(OBJ)ast.c: src/ast.ec $(OBJ)ast.sym | $(SYMBOLS)
188         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/ast.ec) -o $(call quote_path,$@) -symbols $(OBJ)
189
190 $(OBJ)copy.c: src/copy.ec $(OBJ)copy.sym | $(SYMBOLS)
191         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/copy.ec) -o $(call quote_path,$@) -symbols $(OBJ)
192
193 $(OBJ)dbpass.c: src/dbpass.ec $(OBJ)dbpass.sym | $(SYMBOLS)
194         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/dbpass.ec) -o $(call quote_path,$@) -symbols $(OBJ)
195
196 $(OBJ)ecdefs.c: src/ecdefs.ec $(OBJ)ecdefs.sym | $(SYMBOLS)
197         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/ecdefs.ec) -o $(call quote_path,$@) -symbols $(OBJ)
198
199 $(OBJ)expression.c: src/expression.ec $(OBJ)expression.sym | $(SYMBOLS)
200         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/expression.ec) -o $(call quote_path,$@) -symbols $(OBJ)
201
202 $(OBJ)firstPass.c: src/firstPass.ec $(OBJ)firstPass.sym | $(SYMBOLS)
203         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/firstPass.ec) -o $(call quote_path,$@) -symbols $(OBJ)
204
205 $(OBJ)freeAst.c: src/freeAst.ec $(OBJ)freeAst.sym | $(SYMBOLS)
206         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/freeAst.ec) -o $(call quote_path,$@) -symbols $(OBJ)
207
208 $(OBJ)grammar.c: src/grammar.ec $(OBJ)grammar.sym | $(SYMBOLS)
209         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/grammar.ec) -o $(call quote_path,$@) -symbols $(OBJ)
210
211 $(OBJ)lexer.c: src/lexer.ec $(OBJ)lexer.sym | $(SYMBOLS)
212         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/lexer.ec) -o $(call quote_path,$@) -symbols $(OBJ)
213
214 $(OBJ)loadSymbols.c: src/loadSymbols.ec $(OBJ)loadSymbols.sym | $(SYMBOLS)
215         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/loadSymbols.ec) -o $(call quote_path,$@) -symbols $(OBJ)
216
217 $(OBJ)output.c: src/output.ec $(OBJ)output.sym | $(SYMBOLS)
218         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/output.ec) -o $(call quote_path,$@) -symbols $(OBJ)
219
220 $(OBJ)pass0.c: src/pass0.ec $(OBJ)pass0.sym | $(SYMBOLS)
221         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass0.ec) -o $(call quote_path,$@) -symbols $(OBJ)
222
223 $(OBJ)pass1.c: src/pass1.ec $(OBJ)pass1.sym | $(SYMBOLS)
224         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass1.ec) -o $(call quote_path,$@) -symbols $(OBJ)
225
226 $(OBJ)pass15.c: src/pass15.ec $(OBJ)pass15.sym | $(SYMBOLS)
227         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass15.ec) -o $(call quote_path,$@) -symbols $(OBJ)
228
229 $(OBJ)pass16.c: src/pass16.ec $(OBJ)pass16.sym | $(SYMBOLS)
230         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass16.ec) -o $(call quote_path,$@) -symbols $(OBJ)
231
232 $(OBJ)pass2.c: src/pass2.ec $(OBJ)pass2.sym | $(SYMBOLS)
233         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass2.ec) -o $(call quote_path,$@) -symbols $(OBJ)
234
235 $(OBJ)pass3.c: src/pass3.ec $(OBJ)pass3.sym | $(SYMBOLS)
236         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass3.ec) -o $(call quote_path,$@) -symbols $(OBJ)
237
238 $(OBJ)shortcuts.c: src/shortcuts.ec $(OBJ)shortcuts.sym | $(SYMBOLS)
239         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/shortcuts.ec) -o $(call quote_path,$@) -symbols $(OBJ)
240
241 $(OBJ)type.c: src/type.ec $(OBJ)type.sym | $(SYMBOLS)
242         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/type.ec) -o $(call quote_path,$@) -symbols $(OBJ)
243
244 cleantarget: objdir
245         $(call rmq,$(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
246         $(call rmq,$(OBJ)symbols.lst)
247         $(call rmq,$(OBJ)objects.lst)
248
249 clean: cleantarget
250         $(call rmq,$(_ECOBJECTS))
251         $(call rmq,$(_COBJECTS))
252         $(call rmq,$(_BOWLS))
253         $(call rmq,$(_IMPORTS))
254         $(call rmq,$(_SYMBOLS))
255
256 realclean: cleantarget
257         $(call rmrq,$(OBJ))
258
259 distclean: cleantarget
260         $(call rmrq,obj/)