sdk/Build System: Improved the bootstrap Makefiles
[sdk] / ecere / Makefile.ecereCOM
1 .PHONY: all objdir clean realclean distclean
2
3 # CORE VARIABLES
4
5 MODULE := ecereCOM
6 CONFIG := release
7 ifndef COMPILER
8 COMPILER := default
9 endif
10
11 TARGET_TYPE = sharedlib
12
13 # FLAGS
14
15 ECFLAGS =
16 ifndef DEBIAN_PACKAGE
17 CFLAGS =
18 endif
19 CECFLAGS =
20 OFLAGS =
21 LDFLAGS =
22 LIBS =
23
24 ifdef DEBUG
25 NOSTRIP := y
26 endif
27
28 CONSOLE = -mwindows
29
30 # INCLUDES
31
32 _CF_DIR = ../
33 USE_BOOTSTRAP := defined
34
35 include $(_CF_DIR)crossplatform.mk
36 include $(_CF_DIR)default.cf
37
38 # POST-INCLUDES VARIABLES
39
40 OBJ = obj/$(MODULE).$(CONFIG).$(PLATFORM)/
41
42 RES = 
43
44 ifdef LINUX_TARGET
45 TARGET = obj/$(MODULE).$(CONFIG).$(PLATFORM)/$(LP)ecereCOM$(SO).0.44
46 SONAME = -Wl,-soname,libecereCOM.so.0
47 else
48 TARGET = obj/$(MODULE).$(CONFIG).$(PLATFORM)/$(LP)ecereCOM$(SO)
49 SONAME =
50 endif
51
52 _ECSOURCES = \
53         src/sys/Mutex.ec \
54         src/sys/i18n.ec \
55         src/com/containers/Array.ec \
56         src/com/containers/AVLTree.ec \
57         src/com/containers/BuiltInContainer.ec \
58         src/com/containers/Container.ec \
59         src/com/containers/CustomAVLTree.ec \
60         src/com/containers/LinkList.ec \
61         src/com/containers/List.ec \
62         src/com/containers/Map.ec \
63         src/com/BinaryTree.ec \
64         src/com/BTNode.ec \
65         src/com/dataTypes.ec \
66         src/com/instance.ec \
67         src/com/String.ec \
68         src/com/OldList.ec
69
70 ECSOURCES = $(call shwspace,$(_ECSOURCES))
71
72 COBJECTS = $(call shwspace,$(addprefix $(OBJ),$(patsubst %.ec,%$(C),$(notdir $(_ECSOURCES)))))
73
74 SYMBOLS = $(call shwspace,$(addprefix $(OBJ),$(patsubst %.ec,%$(S),$(notdir $(_ECSOURCES)))))
75
76 IMPORTS = $(call shwspace,$(addprefix $(OBJ),$(patsubst %.ec,%$(I),$(notdir $(_ECSOURCES)))))
77
78 ECOBJECTS = $(call shwspace,$(addprefix $(OBJ),$(patsubst %.ec,%$(O),$(notdir $(_ECSOURCES)))))
79
80 BOWLS = $(call shwspace,$(addprefix $(OBJ),$(patsubst %.ec,%$(B),$(notdir $(_ECSOURCES)))))
81
82 _OBJECTS = \
83         $(OBJ)instance.c.o
84
85 OBJECTS = $(_OBJECTS) $(ECOBJECTS) $(OBJ)$(MODULE).main$(O)
86
87 SOURCES = $(ECSOURCES) \
88         src/com/instance.c
89
90 RESOURCES =
91
92 LIBS += $(SHAREDLIB) $(EXECUTABLE) $(LINKOPT)
93
94 ifndef STATIC_LIBRARY_TARGET
95 LIBS +=
96 endif
97
98 CFLAGS += \
99          $(if $(DEBIAN_PACKAGE),$(CPPFLAGS),) $(if $(DEBUG), -D_DEBUG,) \
100          $(if $(DEBUG), -g, -O2 -ffast-math) $(FORCE_32_BIT) $(FPIC) -w \
101                          -DBUILDING_ECERE_COM \
102                          -DECERE_COM_MODULE \
103                          -DECERE_NOFILE
104
105
106 ECFLAGS += \
107          -nolinenumbers -defaultns ecere
108
109
110 # PLATFORM-SPECIFIC OPTIONS
111
112 ifdef LINUX_TARGET
113
114 ifndef STATIC_LIBRARY_TARGET
115 LIBS += \
116         $(call _L,dl) \
117         $(call _L,m) \
118         $(call _L,pthread)
119 endif
120
121 endif
122
123
124
125 CECFLAGS += -cpp $(_CPP)
126
127 ifndef STATIC_LIBRARY_TARGET
128 OFLAGS += $(FORCE_32_BIT)
129 OFLAGS += $(LDFLAGS)
130 endif
131
132 # TARGETS
133
134 all: objdir $(TARGET)
135
136 objdir:
137         $(if $(wildcard $(OBJ)),,$(call mkdirq,$(OBJ)))
138
139 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
140         $(ECS) $(ECSLIBOPT) $(SYMBOLS) $(IMPORTS) -symbols obj/$(MODULE).$(CONFIG).$(PLATFORM) -o $(OBJ)$(MODULE).main.ec
141
142 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
143         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
144         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.c -symbols $(OBJ)
145
146 $(SYMBOLS): | objdir
147 $(OBJECTS): | objdir
148 $(TARGET): $(SOURCES) $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir
149 ifndef STATIC_LIBRARY_TARGET
150         $(CC) $(OFLAGS) $(OBJECTS) $(LIBS) -o $(TARGET) $(INSTALLNAME) $(SONAME)
151 ifndef NOSTRIP
152         $(STRIP) $(STRIPOPT) $(TARGET)
153 endif
154 else
155         $(AR) rcs $(TARGET) $(OBJECTS) $(LIBS)
156 endif
157         $(call cpq,$(TARGET),../$(SODESTDIR))
158 ifdef LINUX_TARGET
159         ln -sf $(LP)$(MODULE)$(SO).0.44 ../$(SODESTDIR)$(LP)$(MODULE)$(SO).0
160         ln -sf $(LP)$(MODULE)$(SO).0.44 ../$(SODESTDIR)$(LP)$(MODULE)$(SO)
161 endif
162
163 # SYMBOL RULES
164
165 $(OBJ)Mutex.sym: src/sys/Mutex.ec
166         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/sys/Mutex.ec -o $(OBJ)Mutex.sym
167
168 $(OBJ)i18n.sym: src/sys/i18n.ec
169         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/sys/i18n.ec -o $(OBJ)i18n.sym
170
171 $(OBJ)Array.sym: src/com/containers/Array.ec
172         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/Array.ec -o $(OBJ)Array.sym
173
174 $(OBJ)AVLTree.sym: src/com/containers/AVLTree.ec
175         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/AVLTree.ec -o $(OBJ)AVLTree.sym
176
177 $(OBJ)BuiltInContainer.sym: src/com/containers/BuiltInContainer.ec
178         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/BuiltInContainer.ec -o $(OBJ)BuiltInContainer.sym
179
180 $(OBJ)Container.sym: src/com/containers/Container.ec
181         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/Container.ec -o $(OBJ)Container.sym
182
183 $(OBJ)CustomAVLTree.sym: src/com/containers/CustomAVLTree.ec
184         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/CustomAVLTree.ec -o $(OBJ)CustomAVLTree.sym
185
186 $(OBJ)LinkList.sym: src/com/containers/LinkList.ec
187         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/LinkList.ec -o $(OBJ)LinkList.sym
188
189 $(OBJ)List.sym: src/com/containers/List.ec
190         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/List.ec -o $(OBJ)List.sym
191
192 $(OBJ)Map.sym: src/com/containers/Map.ec
193         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/containers/Map.ec -o $(OBJ)Map.sym
194
195 $(OBJ)BinaryTree.sym: src/com/BinaryTree.ec
196         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/BinaryTree.ec -o $(OBJ)BinaryTree.sym
197
198 $(OBJ)BTNode.sym: src/com/BTNode.ec
199         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/BTNode.ec -o $(OBJ)BTNode.sym
200
201 $(OBJ)dataTypes.sym: src/com/dataTypes.ec
202         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/dataTypes.ec -o $(OBJ)dataTypes.sym
203
204 $(OBJ)instance.sym: src/com/instance.ec
205         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/instance.ec -o $(OBJ)instance.sym
206
207 $(OBJ)String.sym: src/com/String.ec
208         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/String.ec -o $(OBJ)String.sym
209
210 $(OBJ)OldList.sym: src/com/OldList.ec
211         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/com/OldList.ec -o $(OBJ)OldList.sym
212
213 # C OBJECT RULES
214
215 $(OBJ)Mutex.c: src/sys/Mutex.ec $(OBJ)Mutex.sym | $(SYMBOLS)
216         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/sys/Mutex.ec -o $(OBJ)Mutex.c -symbols $(OBJ)
217
218 $(OBJ)i18n.c: src/sys/i18n.ec $(OBJ)i18n.sym | $(SYMBOLS)
219         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/sys/i18n.ec -o $(OBJ)i18n.c -symbols $(OBJ)
220
221 $(OBJ)Array.c: src/com/containers/Array.ec $(OBJ)Array.sym | $(SYMBOLS)
222         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/Array.ec -o $(OBJ)Array.c -symbols $(OBJ)
223
224 $(OBJ)AVLTree.c: src/com/containers/AVLTree.ec $(OBJ)AVLTree.sym | $(SYMBOLS)
225         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/AVLTree.ec -o $(OBJ)AVLTree.c -symbols $(OBJ)
226
227 $(OBJ)BuiltInContainer.c: src/com/containers/BuiltInContainer.ec $(OBJ)BuiltInContainer.sym | $(SYMBOLS)
228         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/BuiltInContainer.ec -o $(OBJ)BuiltInContainer.c -symbols $(OBJ)
229
230 $(OBJ)Container.c: src/com/containers/Container.ec $(OBJ)Container.sym | $(SYMBOLS)
231         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/Container.ec -o $(OBJ)Container.c -symbols $(OBJ)
232
233 $(OBJ)CustomAVLTree.c: src/com/containers/CustomAVLTree.ec $(OBJ)CustomAVLTree.sym | $(SYMBOLS)
234         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/CustomAVLTree.ec -o $(OBJ)CustomAVLTree.c -symbols $(OBJ)
235
236 $(OBJ)LinkList.c: src/com/containers/LinkList.ec $(OBJ)LinkList.sym | $(SYMBOLS)
237         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/LinkList.ec -o $(OBJ)LinkList.c -symbols $(OBJ)
238
239 $(OBJ)List.c: src/com/containers/List.ec $(OBJ)List.sym | $(SYMBOLS)
240         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/List.ec -o $(OBJ)List.c -symbols $(OBJ)
241
242 $(OBJ)Map.c: src/com/containers/Map.ec $(OBJ)Map.sym | $(SYMBOLS)
243         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/containers/Map.ec -o $(OBJ)Map.c -symbols $(OBJ)
244
245 $(OBJ)BinaryTree.c: src/com/BinaryTree.ec $(OBJ)BinaryTree.sym | $(SYMBOLS)
246         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/BinaryTree.ec -o $(OBJ)BinaryTree.c -symbols $(OBJ)
247
248 $(OBJ)BTNode.c: src/com/BTNode.ec $(OBJ)BTNode.sym | $(SYMBOLS)
249         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/BTNode.ec -o $(OBJ)BTNode.c -symbols $(OBJ)
250
251 $(OBJ)dataTypes.c: src/com/dataTypes.ec $(OBJ)dataTypes.sym | $(SYMBOLS)
252         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/dataTypes.ec -o $(OBJ)dataTypes.c -symbols $(OBJ)
253
254 $(OBJ)instance.c: src/com/instance.ec $(OBJ)instance.sym | $(SYMBOLS)
255         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/instance.ec -o $(OBJ)instance.c -symbols $(OBJ)
256
257 $(OBJ)String.c: src/com/String.ec $(OBJ)String.sym | $(SYMBOLS)
258         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/String.ec -o $(OBJ)String.c -symbols $(OBJ)
259
260 $(OBJ)OldList.c: src/com/OldList.ec $(OBJ)OldList.sym | $(SYMBOLS)
261         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/com/OldList.ec -o $(OBJ)OldList.c -symbols $(OBJ)
262
263 # OBJECT RULES
264
265 $(OBJ)Mutex.o: $(OBJ)Mutex.c
266         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)Mutex.c -o $(OBJ)Mutex.o
267
268 $(OBJ)i18n.o: $(OBJ)i18n.c
269         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)i18n.c -o $(OBJ)i18n.o
270
271 $(OBJ)Array.o: $(OBJ)Array.c
272         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)Array.c -o $(OBJ)Array.o
273
274 $(OBJ)AVLTree.o: $(OBJ)AVLTree.c
275         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)AVLTree.c -o $(OBJ)AVLTree.o
276
277 $(OBJ)BuiltInContainer.o: $(OBJ)BuiltInContainer.c
278         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)BuiltInContainer.c -o $(OBJ)BuiltInContainer.o
279
280 $(OBJ)Container.o: $(OBJ)Container.c
281         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)Container.c -o $(OBJ)Container.o
282
283 $(OBJ)CustomAVLTree.o: $(OBJ)CustomAVLTree.c
284         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)CustomAVLTree.c -o $(OBJ)CustomAVLTree.o
285
286 $(OBJ)LinkList.o: $(OBJ)LinkList.c
287         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)LinkList.c -o $(OBJ)LinkList.o
288
289 $(OBJ)List.o: $(OBJ)List.c
290         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)List.c -o $(OBJ)List.o
291
292 $(OBJ)Map.o: $(OBJ)Map.c
293         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)Map.c -o $(OBJ)Map.o
294
295 $(OBJ)BinaryTree.o: $(OBJ)BinaryTree.c
296         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)BinaryTree.c -o $(OBJ)BinaryTree.o
297
298 $(OBJ)BTNode.o: $(OBJ)BTNode.c
299         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)BTNode.c -o $(OBJ)BTNode.o
300
301 $(OBJ)dataTypes.o: $(OBJ)dataTypes.c
302         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)dataTypes.c -o $(OBJ)dataTypes.o
303
304 $(OBJ)instance.o: $(OBJ)instance.c
305         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)instance.c -o $(OBJ)instance.o
306
307 $(OBJ)String.o: $(OBJ)String.c
308         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)String.c -o $(OBJ)String.o
309
310 $(OBJ)OldList.o: $(OBJ)OldList.c
311         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)OldList.c -o $(OBJ)OldList.o
312
313 $(OBJ)instance.c.o: src/com/instance.c
314         $(CC) $(CFLAGS) -c src/com/instance.c -o $(OBJ)instance.c.o
315
316 $(OBJ)$(MODULE).main$(O): $(OBJ)$(MODULE).main.c
317         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.c -o $(OBJ)$(MODULE).main$(O)
318
319 clean: objdir
320         $(call rmq,$(OBJ)$(MODULE).main.o $(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S) $(TARGET))
321         $(call rmq,$(_OBJECTS))
322         $(call rmq,$(ECOBJECTS))
323         $(call rmq,$(COBJECTS))
324         $(call rmq,$(BOWLS))
325         $(call rmq,$(IMPORTS))
326         $(call rmq,$(SYMBOLS))
327
328 realclean: clean
329         $(call rmrq,$(OBJ))
330
331 distclean:
332         $(call rmrq,obj/)