buildsystem,makefiles,tarball: improve distclean targets to remove .configs/, *.ews...
[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 = ../../
35 ifndef BS_REGEN_COMP
36 BS_REGEN_COMP := default
37 endif
38
39 include $(_CF_DIR)crossplatform.mk
40 include $(_CF_DIR)$(BS_REGEN_COMP).cf
41
42 # POST-INCLUDES VARIABLES
43
44 OBJ = obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/
45
46 _ECSOURCES = \
47         src/ast.ec \
48         src/copy.ec \
49         src/dbpass.ec \
50         src/ecdefs.ec \
51         src/expression.ec \
52         src/firstPass.ec \
53         src/freeAst.ec \
54         src/grammar.ec \
55         src/lexer.ec \
56         src/loadSymbols.ec \
57         src/output.ec \
58         src/pass0.ec \
59         src/pass1.ec \
60         src/pass15.ec \
61         src/pass16.ec \
62         src/pass2.ec \
63         src/pass3.ec \
64         src/shortcuts.ec \
65         src/type.ec
66
67 ECSOURCES = $(call shwspace,$(_ECSOURCES))
68
69 _COBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(C),$(notdir $(_ECSOURCES))))
70
71 _SYMBOLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(S),$(notdir $(_ECSOURCES))))
72
73 _IMPORTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(I),$(notdir $(_ECSOURCES))))
74
75 _ECOBJECTS = $(addprefix $(OBJ),$(patsubst %.ec,%$(O),$(notdir $(_ECSOURCES))))
76
77 _BOWLS = $(addprefix $(OBJ),$(patsubst %.ec,%$(B),$(notdir $(_ECSOURCES))))
78
79 COBJECTS = $(call shwspace,$(_COBJECTS))
80
81 SYMBOLS = $(call shwspace,$(_SYMBOLS))
82
83 IMPORTS = $(call shwspace,$(_IMPORTS))
84
85 ECOBJECTS = $(call shwspace,$(_ECOBJECTS))
86
87 BOWLS = $(call shwspace,$(_BOWLS))
88
89 SOURCES = $(ECSOURCES) \
90         ../bootstrap/bsl.c
91
92 PRJ_CFLAGS += \
93          $(if $(DEBUG), -g, -O2 -ffast-math) $(FPIC) -Wall -DREPOSITORY_VERSION="\"$(REPOSITORY_VER)\"" \
94                          -DECERE_BOOTSTRAP \
95                          -DECERE_STATIC
96
97 CUSTOM1_PRJ_CFLAGS = \
98                          -I../bootstrap/include \
99          $(PRJ_CFLAGS)
100
101 ECFLAGS += -module $(MODULE)
102 ECFLAGS += \
103          -nolinenumbers
104
105 CECFLAGS += -cpp $(_CPP)
106
107 # TARGETS
108
109 all: objdir $(COBJECTS) $(OBJ)$(MODULE).main.c
110
111 objdir:
112         $(if $(wildcard $(OBJ)),,$(call mkdir,$(OBJ)))
113         $(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.)),)
114         $(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),))
115
116 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
117         @$(call rm,$(OBJ)symbols.lst)
118         @$(call touch,$(OBJ)symbols.lst)
119         @$(call echo,$(SYMBOLS)) >> $(OBJ)symbols.lst
120         @$(call echo,$(IMPORTS)) >> $(OBJ)symbols.lst
121         $(ECS) $(ARCH_FLAGS) $(ECSLIBOPT) @$(OBJ)symbols.lst -symbols obj/$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX) -o $(call quote_path,$@)
122
123 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
124         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
125         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(PRJ_CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(call quote_path,$@) -symbols $(OBJ)
126
127 $(SYMBOLS): | objdir
128
129 # SYMBOL RULES
130
131 $(OBJ)ast.sym: src/ast.ec
132         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/ast.ec) -o $(call quote_path,$@)
133
134 $(OBJ)copy.sym: src/copy.ec
135         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/copy.ec) -o $(call quote_path,$@)
136
137 $(OBJ)dbpass.sym: src/dbpass.ec
138         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/dbpass.ec) -o $(call quote_path,$@)
139
140 $(OBJ)ecdefs.sym: src/ecdefs.ec
141         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/ecdefs.ec) -o $(call quote_path,$@)
142
143 $(OBJ)expression.sym: src/expression.ec
144         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/expression.ec) -o $(call quote_path,$@)
145
146 $(OBJ)firstPass.sym: src/firstPass.ec
147         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/firstPass.ec) -o $(call quote_path,$@)
148
149 $(OBJ)freeAst.sym: src/freeAst.ec
150         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/freeAst.ec) -o $(call quote_path,$@)
151
152 $(OBJ)grammar.sym: src/grammar.ec
153         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/grammar.ec) -o $(call quote_path,$@)
154
155 $(OBJ)lexer.sym: src/lexer.ec
156         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/lexer.ec) -o $(call quote_path,$@)
157
158 $(OBJ)loadSymbols.sym: src/loadSymbols.ec
159         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/loadSymbols.ec) -o $(call quote_path,$@)
160
161 $(OBJ)output.sym: src/output.ec
162         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/output.ec) -o $(call quote_path,$@)
163
164 $(OBJ)pass0.sym: src/pass0.ec
165         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass0.ec) -o $(call quote_path,$@)
166
167 $(OBJ)pass1.sym: src/pass1.ec
168         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass1.ec) -o $(call quote_path,$@)
169
170 $(OBJ)pass15.sym: src/pass15.ec
171         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass15.ec) -o $(call quote_path,$@)
172
173 $(OBJ)pass16.sym: src/pass16.ec
174         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass16.ec) -o $(call quote_path,$@)
175
176 $(OBJ)pass2.sym: src/pass2.ec
177         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass2.ec) -o $(call quote_path,$@)
178
179 $(OBJ)pass3.sym: src/pass3.ec
180         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/pass3.ec) -o $(call quote_path,$@)
181
182 $(OBJ)shortcuts.sym: src/shortcuts.ec
183         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/shortcuts.ec) -o $(call quote_path,$@)
184
185 $(OBJ)type.sym: src/type.ec
186         $(ECP) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) -c $(call quote_path,src/type.ec) -o $(call quote_path,$@)
187
188 # C OBJECT RULES
189
190 $(OBJ)ast.c: src/ast.ec $(OBJ)ast.sym | $(SYMBOLS)
191         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/ast.ec) -o $(call quote_path,$@) -symbols $(OBJ)
192
193 $(OBJ)copy.c: src/copy.ec $(OBJ)copy.sym | $(SYMBOLS)
194         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/copy.ec) -o $(call quote_path,$@) -symbols $(OBJ)
195
196 $(OBJ)dbpass.c: src/dbpass.ec $(OBJ)dbpass.sym | $(SYMBOLS)
197         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/dbpass.ec) -o $(call quote_path,$@) -symbols $(OBJ)
198
199 $(OBJ)ecdefs.c: src/ecdefs.ec $(OBJ)ecdefs.sym | $(SYMBOLS)
200         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/ecdefs.ec) -o $(call quote_path,$@) -symbols $(OBJ)
201
202 $(OBJ)expression.c: src/expression.ec $(OBJ)expression.sym | $(SYMBOLS)
203         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/expression.ec) -o $(call quote_path,$@) -symbols $(OBJ)
204
205 $(OBJ)firstPass.c: src/firstPass.ec $(OBJ)firstPass.sym | $(SYMBOLS)
206         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/firstPass.ec) -o $(call quote_path,$@) -symbols $(OBJ)
207
208 $(OBJ)freeAst.c: src/freeAst.ec $(OBJ)freeAst.sym | $(SYMBOLS)
209         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/freeAst.ec) -o $(call quote_path,$@) -symbols $(OBJ)
210
211 $(OBJ)grammar.c: src/grammar.ec $(OBJ)grammar.sym | $(SYMBOLS)
212         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/grammar.ec) -o $(call quote_path,$@) -symbols $(OBJ)
213
214 $(OBJ)lexer.c: src/lexer.ec $(OBJ)lexer.sym | $(SYMBOLS)
215         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/lexer.ec) -o $(call quote_path,$@) -symbols $(OBJ)
216
217 $(OBJ)loadSymbols.c: src/loadSymbols.ec $(OBJ)loadSymbols.sym | $(SYMBOLS)
218         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/loadSymbols.ec) -o $(call quote_path,$@) -symbols $(OBJ)
219
220 $(OBJ)output.c: src/output.ec $(OBJ)output.sym | $(SYMBOLS)
221         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/output.ec) -o $(call quote_path,$@) -symbols $(OBJ)
222
223 $(OBJ)pass0.c: src/pass0.ec $(OBJ)pass0.sym | $(SYMBOLS)
224         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass0.ec) -o $(call quote_path,$@) -symbols $(OBJ)
225
226 $(OBJ)pass1.c: src/pass1.ec $(OBJ)pass1.sym | $(SYMBOLS)
227         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass1.ec) -o $(call quote_path,$@) -symbols $(OBJ)
228
229 $(OBJ)pass15.c: src/pass15.ec $(OBJ)pass15.sym | $(SYMBOLS)
230         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass15.ec) -o $(call quote_path,$@) -symbols $(OBJ)
231
232 $(OBJ)pass16.c: src/pass16.ec $(OBJ)pass16.sym | $(SYMBOLS)
233         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass16.ec) -o $(call quote_path,$@) -symbols $(OBJ)
234
235 $(OBJ)pass2.c: src/pass2.ec $(OBJ)pass2.sym | $(SYMBOLS)
236         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass2.ec) -o $(call quote_path,$@) -symbols $(OBJ)
237
238 $(OBJ)pass3.c: src/pass3.ec $(OBJ)pass3.sym | $(SYMBOLS)
239         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/pass3.ec) -o $(call quote_path,$@) -symbols $(OBJ)
240
241 $(OBJ)shortcuts.c: src/shortcuts.ec $(OBJ)shortcuts.sym | $(SYMBOLS)
242         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/shortcuts.ec) -o $(call quote_path,$@) -symbols $(OBJ)
243
244 $(OBJ)type.c: src/type.ec $(OBJ)type.sym | $(SYMBOLS)
245         $(ECC) $(CFLAGS) $(CECFLAGS) $(ECFLAGS) $(CUSTOM1_PRJ_CFLAGS) $(FVISIBILITY) -c $(call quote_path,src/type.ec) -o $(call quote_path,$@) -symbols $(OBJ)
246
247 cleantarget: objdir
248         $(call rm,$(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S))
249         $(call rm,$(OBJ)symbols.lst)
250         $(call rm,$(OBJ)objects.lst)
251
252 clean: cleantarget
253         $(call rm,$(_ECOBJECTS))
254         $(call rm,$(_COBJECTS))
255         $(call rm,$(_BOWLS))
256         $(call rm,$(_IMPORTS))
257         $(call rm,$(_SYMBOLS))
258
259 realclean: cleantarget
260         $(call rmr,$(OBJ))
261
262 distclean:
263         $(_MAKE) -f $(_CF_DIR)Cleanfile distclean distclean_all_subdirs
264
265 Makefile.bootstrap: ;
266 $(_CF_DIR)crossplatform.mk: ;
267 $(_CF_DIR)$(TARGET_PLATFORM)-$(COMPILER).cf: ;