makefiles: made changes to order only dependencies consistent across all makefiles
[sdk] / compiler / libec / Makefile
1 .PHONY: all objdir clean realclean distclean
2 .SILENT:
3
4 # CONTENT
5
6 MODULE := ec
7 CONFIG := release
8 COMPILER := default
9 TARGET_TYPE = sharedlib
10
11 OBJ = obj/$(CONFIG).$(PLATFORM)/
12
13 RES = 
14
15 # CROSS-PLATFORM MAGIC
16
17 include ../../include.mk
18
19 ifdef LINUX
20 TARGET = obj/$(CONFIG).$(PLATFORM)/$(LP)ec$(SO).0.44
21 SONAME = -Wl,-soname,libec.so.0
22 else
23 TARGET = obj/$(CONFIG).$(PLATFORM)/$(LP)ec$(SO)
24 SONAME =
25 endif
26
27 # $(OBJ)bsl.o is added manually here
28 OBJECTS = $(OBJ)ast.o $(OBJ)copy.o $(OBJ)dbpass.o $(OBJ)ecdefs.o $(OBJ)expression.o \
29         $(OBJ)firstPass.o $(OBJ)freeAst.o $(OBJ)grammar.o $(OBJ)lexer.o $(OBJ)loadSymbols.o \
30         $(OBJ)output.o $(OBJ)pass0.o $(OBJ)pass1.o $(OBJ)pass15.o $(OBJ)pass16.o $(OBJ)pass2.o \
31         $(OBJ)pass3.o $(OBJ)shortcuts.o $(OBJ)type.o $(OBJ)bsl.o $(OBJ)$(MODULE).main$(O)
32
33 COBJECTS = $(OBJ)ast.c $(OBJ)copy.c $(OBJ)dbpass.c $(OBJ)ecdefs.c $(OBJ)expression.c \
34         $(OBJ)firstPass.c $(OBJ)freeAst.c $(OBJ)grammar.c $(OBJ)lexer.c $(OBJ)loadSymbols.c \
35         $(OBJ)output.c $(OBJ)pass0.c $(OBJ)pass1.c $(OBJ)pass15.c $(OBJ)pass16.c $(OBJ)pass2.c \
36         $(OBJ)pass3.c $(OBJ)shortcuts.c $(OBJ)type.c
37
38 SYMBOLS = $(OBJ)ast.sym $(OBJ)copy.sym $(OBJ)dbpass.sym $(OBJ)ecdefs.sym \
39         $(OBJ)expression.sym $(OBJ)firstPass.sym $(OBJ)freeAst.sym $(OBJ)grammar.sym $(OBJ)lexer.sym \
40         $(OBJ)loadSymbols.sym $(OBJ)output.sym $(OBJ)pass0.sym $(OBJ)pass1.sym $(OBJ)pass15.sym \
41         $(OBJ)pass16.sym $(OBJ)pass2.sym $(OBJ)pass3.sym $(OBJ)shortcuts.sym $(OBJ)type.sym
42
43 IMPORTS = $(OBJ)ast.imp $(OBJ)copy.imp $(OBJ)dbpass.imp $(OBJ)ecdefs.imp \
44         $(OBJ)expression.imp $(OBJ)firstPass.imp $(OBJ)freeAst.imp $(OBJ)grammar.imp $(OBJ)lexer.imp \
45         $(OBJ)loadSymbols.imp $(OBJ)output.imp $(OBJ)pass0.imp $(OBJ)pass1.imp $(OBJ)pass15.imp \
46         $(OBJ)pass16.imp $(OBJ)pass2.imp $(OBJ)pass3.imp $(OBJ)shortcuts.imp $(OBJ)type.imp
47
48 SOURCES = src/ast.ec src/copy.ec src/dbpass.ec src/ecdefs.ec src/expression.ec \
49         src/firstPass.ec src/freeAst.ec src/grammar.ec src/lexer.ec src/loadSymbols.ec src/output.ec \
50         src/pass0.ec src/pass1.ec src/pass15.ec src/pass16.ec src/pass2.ec src/pass3.ec \
51         src/shortcuts.ec src/type.ec
52
53 PRECOMPILED_SOURCES = precompiled/expression.c precompiled/grammar.c precompiled/type.c
54
55 RESOURCES =
56
57 # TOOLCHAIN
58
59 ifdef WINDOWS
60 else
61 export LD_LIBRARY_PATH = ../../obj/$(PLATFORM)/lib/
62 export DYLD_LIBRARY_PATH = ../../obj/$(PLATFORM)/lib/
63 endif
64
65 ECP := $(call psep,../bootstrap/obj/bin.$(PLATFORM)/ecp)
66 ECC := $(call psep,../bootstrap/obj/bin.$(PLATFORM)/ecc)
67 ECS := $(call psep,../bootstrap/obj/bin.$(PLATFORM)/ecs)
68
69 # FLAGS
70
71 CFLAGS = -fmessage-length=0 -O2 -ffast-math -m32 $(FPIC) -w -I../bootstrap/include \
72          -DYYTOKENTYPE
73
74 # BSL CFLAGS
75 BSL_CFLAGS = -fmessage-length=0 -O2 -ffast-math -m32 $(FPIC) -w
76
77 CECFLAGS =
78
79 ECFLAGS = -nolinenumbers
80
81 OFLAGS = -m32 \
82          -L../../obj/$(PLATFORM)/bin \
83          -L../../obj/$(PLATFORM)/lib
84
85 LIBS = -lecere $(SHAREDLIB) $(EXECUTABLE) $(LINKOPT)
86
87 UPXFLAGS = -9 -q
88
89 # HARD CODED PLATFORM-SPECIFIC OPTIONS
90 ifdef LINUX
91 OFLAGS += -Wl,--no-undefined
92 endif
93
94 # TARGETS
95
96 all: objdir $(TARGET)
97
98 objdir:
99 ifneq "$(wildcard $(OBJ))" "$(OBJ)"
100         $(call mkdirq,$(OBJ))
101         $(call cpq,$(PRECOMPILED_SOURCES),$(OBJ))
102 endif
103
104 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
105         $(ECS) $(ECSLIBOPT) $(SYMBOLS) $(IMPORTS) -symbols obj/$(CONFIG).$(PLATFORM) -o $(OBJ)$(MODULE).main.ec
106
107 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
108         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
109         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.c -symbols $(OBJ)
110
111 $(SYMBOLS): | objdir
112 $(OBJECTS): | objdir
113 $(TARGET): $(SOURCES) $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir
114         $(CC) $(OFLAGS) $(OBJECTS) $(LIBS) -o $(TARGET) $(INSTALLNAME)
115         $(STRIP) $(STRIPOPT) $(TARGET)
116         $(call cpq,$(TARGET),../../$(SODESTDIR))
117 ifdef LINUX
118         ln -sf $(LP)$(MODULE)$(SO).0.44 ../../$(SODESTDIR)$(LP)$(MODULE)$(SO).0
119         ln -sf $(LP)$(MODULE)$(SO).0.44 ../../$(SODESTDIR)$(LP)$(MODULE)$(SO)
120 endif   
121 ifdef WINDOWS
122         $(call cpq,$(TARGET),../../compiler/bootstrap/obj/bin.$(PLATFORM)/)
123 endif
124
125 # SYMBOL RULES
126
127 $(OBJ)ast.sym: src/ast.ec
128         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/ast.ec -o $(OBJ)ast.sym
129
130 $(OBJ)copy.sym: src/copy.ec
131         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/copy.ec -o $(OBJ)copy.sym
132
133 $(OBJ)dbpass.sym: src/dbpass.ec
134         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/dbpass.ec -o $(OBJ)dbpass.sym
135
136 $(OBJ)ecdefs.sym: src/ecdefs.ec
137         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/ecdefs.ec -o $(OBJ)ecdefs.sym
138
139 $(OBJ)expression.sym: src/expression.ec
140         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/expression.ec -o $(OBJ)expression.sym
141
142 $(OBJ)firstPass.sym: src/firstPass.ec
143         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/firstPass.ec -o $(OBJ)firstPass.sym
144
145 $(OBJ)freeAst.sym: src/freeAst.ec
146         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/freeAst.ec -o $(OBJ)freeAst.sym
147
148 $(OBJ)grammar.sym: src/grammar.ec
149         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/grammar.ec -o $(OBJ)grammar.sym
150
151 $(OBJ)lexer.sym: src/lexer.ec
152         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/lexer.ec -o $(OBJ)lexer.sym
153
154 $(OBJ)loadSymbols.sym: src/loadSymbols.ec
155         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/loadSymbols.ec -o $(OBJ)loadSymbols.sym
156
157 $(OBJ)output.sym: src/output.ec
158         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/output.ec -o $(OBJ)output.sym
159
160 $(OBJ)pass0.sym: src/pass0.ec
161         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass0.ec -o $(OBJ)pass0.sym
162
163 $(OBJ)pass1.sym: src/pass1.ec
164         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass1.ec -o $(OBJ)pass1.sym
165
166 $(OBJ)pass15.sym: src/pass15.ec
167         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass15.ec -o $(OBJ)pass15.sym
168
169 $(OBJ)pass16.sym: src/pass16.ec
170         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass16.ec -o $(OBJ)pass16.sym
171
172 $(OBJ)pass2.sym: src/pass2.ec
173         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass2.ec -o $(OBJ)pass2.sym
174
175 $(OBJ)pass3.sym: src/pass3.ec
176         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass3.ec -o $(OBJ)pass3.sym
177
178 $(OBJ)shortcuts.sym: src/shortcuts.ec
179         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/shortcuts.ec -o $(OBJ)shortcuts.sym
180
181 $(OBJ)type.sym: src/type.ec
182         $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/type.ec -o $(OBJ)type.sym
183
184 # C OBJECT RULES
185
186 $(OBJ)ast.c: src/ast.ec $(OBJ)ast.sym | $(SYMBOLS)
187         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/ast.ec -o $(OBJ)ast.c -symbols $(OBJ)
188
189 $(OBJ)copy.c: src/copy.ec $(OBJ)copy.sym | $(SYMBOLS)
190         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/copy.ec -o $(OBJ)copy.c -symbols $(OBJ)
191
192 $(OBJ)dbpass.c: src/dbpass.ec $(OBJ)dbpass.sym | $(SYMBOLS)
193         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/dbpass.ec -o $(OBJ)dbpass.c -symbols $(OBJ)
194
195 $(OBJ)ecdefs.c: src/ecdefs.ec $(OBJ)ecdefs.sym | $(SYMBOLS)
196         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/ecdefs.ec -o $(OBJ)ecdefs.c -symbols $(OBJ)
197
198 $(OBJ)expression.c: src/expression.ec | $(SYMBOLS)
199         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/expression.ec -o $(OBJ)expression.c -symbols $(OBJ)
200
201 $(OBJ)firstPass.c: src/firstPass.ec $(OBJ)firstPass.sym | $(SYMBOLS)
202         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/firstPass.ec -o $(OBJ)firstPass.c -symbols $(OBJ)
203
204 $(OBJ)freeAst.c: src/freeAst.ec $(OBJ)freeAst.sym | $(SYMBOLS)
205         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/freeAst.ec -o $(OBJ)freeAst.c -symbols $(OBJ)
206
207 $(OBJ)grammar.c: src/grammar.ec | $(SYMBOLS)
208         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/grammar.ec -o $(OBJ)grammar.c -symbols $(OBJ)
209
210 $(OBJ)lexer.c: src/lexer.ec $(OBJ)lexer.sym | $(SYMBOLS)
211         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/lexer.ec -o $(OBJ)lexer.c -symbols $(OBJ)
212
213 $(OBJ)loadSymbols.c: src/loadSymbols.ec $(OBJ)loadSymbols.sym | $(SYMBOLS)
214         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/loadSymbols.ec -o $(OBJ)loadSymbols.c -symbols $(OBJ)
215
216 $(OBJ)output.c: src/output.ec $(OBJ)output.sym | $(SYMBOLS)
217         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/output.ec -o $(OBJ)output.c -symbols $(OBJ)
218
219 $(OBJ)pass0.c: src/pass0.ec $(OBJ)pass0.sym | $(SYMBOLS)
220         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass0.ec -o $(OBJ)pass0.c -symbols $(OBJ)
221
222 $(OBJ)pass1.c: src/pass1.ec $(OBJ)pass1.sym | $(SYMBOLS)
223         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass1.ec -o $(OBJ)pass1.c -symbols $(OBJ)
224
225 $(OBJ)pass15.c: src/pass15.ec $(OBJ)pass15.sym | $(SYMBOLS)
226         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass15.ec -o $(OBJ)pass15.c -symbols $(OBJ)
227
228 $(OBJ)pass16.c: src/pass16.ec $(OBJ)pass16.sym | $(SYMBOLS)
229         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass16.ec -o $(OBJ)pass16.c -symbols $(OBJ)
230
231 $(OBJ)pass2.c: src/pass2.ec $(OBJ)pass2.sym | $(SYMBOLS)
232         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass2.ec -o $(OBJ)pass2.c -symbols $(OBJ)
233
234 $(OBJ)pass3.c: src/pass3.ec $(OBJ)pass3.sym | $(SYMBOLS)
235         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass3.ec -o $(OBJ)pass3.c -symbols $(OBJ)
236
237 $(OBJ)shortcuts.c: src/shortcuts.ec $(OBJ)shortcuts.sym | $(SYMBOLS)
238         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/shortcuts.ec -o $(OBJ)shortcuts.c -symbols $(OBJ)
239
240 $(OBJ)type.c: src/type.ec | $(SYMBOLS)
241         $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/type.ec -o $(OBJ)type.c -symbols $(OBJ)
242
243 # IMPLICIT OBJECT RULE
244
245 $(OBJ)%$(O) : $(OBJ)%.c
246         $(CC) $(CFLAGS) $(FVISIBILITY) -c $< -o $@
247
248 # OBJECT RULES
249
250 $(OBJ)$(MODULE).main$(O): $(OBJ)$(MODULE).main.c
251         $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.c -o $(OBJ)$(MODULE).main$(O)
252
253 $(OBJ)bsl.o: ../bootstrap/bsl.c
254         $(CC) $(BSL_CFLAGS) $(FVISIBILITY) -c ../bootstrap/bsl.c -o $(OBJ)bsl.o
255
256 clean: objdir
257         $(call rmq,$(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S) $(TARGET))
258         $(call rmq,$(OBJECTS))
259         $(call rmq,$(COBJECTS))
260         $(call rmq,$(IMPORTS))
261         $(call rmq,$(SYMBOLS))
262
263 realclean:
264         $(call rmrq,$(OBJ))
265
266 distclean:
267         $(call rmrq,obj/)