1 .PHONY: all objdir clean realclean distclean
9 TARGET_TYPE = sharedlib
11 OBJ = obj/$(CONFIG).$(PLATFORM)/
15 # CROSS-PLATFORM MAGIC
17 include ../../include.mk
20 TARGET = obj/$(CONFIG).$(PLATFORM)/$(LP)ec$(SO).0.44
21 SONAME = -Wl,-soname,libec.so.0
23 TARGET = obj/$(CONFIG).$(PLATFORM)/$(LP)ec$(SO)
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)
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
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
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
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
53 PRECOMPILED_SOURCES = precompiled/expression.c precompiled/grammar.c precompiled/type.c
61 export LD_LIBRARY_PATH = ../../obj/$(PLATFORM)/lib/
62 export DYLD_LIBRARY_PATH = ../../obj/$(PLATFORM)/lib/
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)
71 CFLAGS = -fmessage-length=0 -O2 -ffast-math -m32 $(FPIC) -w -I../bootstrap/include \
75 BSL_CFLAGS = -fmessage-length=0 -O2 -ffast-math -m32 $(FPIC) -w
79 ECFLAGS = -nolinenumbers
82 -L../../obj/$(PLATFORM)/bin \
83 -L../../obj/$(PLATFORM)/lib
85 LIBS = -lecere $(SHAREDLIB) $(EXECUTABLE) $(LINKOPT)
89 # HARD CODED PLATFORM-SPECIFIC OPTIONS
91 OFLAGS += -Wl,--no-undefined
99 ifneq "$(wildcard $(OBJ))" "$(OBJ)"
100 $(call mkdirq,$(OBJ))
102 ifeq "$(wildcard precompiled)" "precompiled"
103 $(call cpq,$(PRECOMPILED_SOURCES),$(OBJ))
106 $(OBJ)$(MODULE).main.ec: $(SYMBOLS) $(COBJECTS)
107 $(ECS) $(ECSLIBOPT) $(SYMBOLS) $(IMPORTS) -symbols obj/$(CONFIG).$(PLATFORM) -o $(OBJ)$(MODULE).main.ec
109 $(OBJ)$(MODULE).main.c: $(OBJ)$(MODULE).main.ec
110 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.sym -symbols $(OBJ)
111 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.ec -o $(OBJ)$(MODULE).main.c -symbols $(OBJ)
115 $(TARGET): $(SOURCES) $(RESOURCES) $(SYMBOLS) $(OBJECTS) | objdir
116 $(CC) $(OFLAGS) $(OBJECTS) $(LIBS) -o $(TARGET) $(INSTALLNAME)
117 $(STRIP) $(STRIPOPT) $(TARGET)
118 $(call cpq,$(TARGET),../../$(SODESTDIR))
120 ln -sf $(LP)$(MODULE)$(SO).0.44 ../../$(SODESTDIR)$(LP)$(MODULE)$(SO).0
121 ln -sf $(LP)$(MODULE)$(SO).0.44 ../../$(SODESTDIR)$(LP)$(MODULE)$(SO)
124 $(call cpq,$(TARGET),../../compiler/bootstrap/obj/bin.$(PLATFORM)/)
129 $(OBJ)ast.sym: src/ast.ec
130 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/ast.ec -o $(OBJ)ast.sym
132 $(OBJ)copy.sym: src/copy.ec
133 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/copy.ec -o $(OBJ)copy.sym
135 $(OBJ)dbpass.sym: src/dbpass.ec
136 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/dbpass.ec -o $(OBJ)dbpass.sym
138 $(OBJ)ecdefs.sym: src/ecdefs.ec
139 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/ecdefs.ec -o $(OBJ)ecdefs.sym
141 $(OBJ)expression.sym: src/expression.ec
142 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/expression.ec -o $(OBJ)expression.sym
144 $(OBJ)firstPass.sym: src/firstPass.ec
145 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/firstPass.ec -o $(OBJ)firstPass.sym
147 $(OBJ)freeAst.sym: src/freeAst.ec
148 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/freeAst.ec -o $(OBJ)freeAst.sym
150 $(OBJ)grammar.sym: src/grammar.ec
151 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/grammar.ec -o $(OBJ)grammar.sym
153 $(OBJ)lexer.sym: src/lexer.ec
154 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/lexer.ec -o $(OBJ)lexer.sym
156 $(OBJ)loadSymbols.sym: src/loadSymbols.ec
157 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/loadSymbols.ec -o $(OBJ)loadSymbols.sym
159 $(OBJ)output.sym: src/output.ec
160 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/output.ec -o $(OBJ)output.sym
162 $(OBJ)pass0.sym: src/pass0.ec
163 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass0.ec -o $(OBJ)pass0.sym
165 $(OBJ)pass1.sym: src/pass1.ec
166 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass1.ec -o $(OBJ)pass1.sym
168 $(OBJ)pass15.sym: src/pass15.ec
169 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass15.ec -o $(OBJ)pass15.sym
171 $(OBJ)pass16.sym: src/pass16.ec
172 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass16.ec -o $(OBJ)pass16.sym
174 $(OBJ)pass2.sym: src/pass2.ec
175 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass2.ec -o $(OBJ)pass2.sym
177 $(OBJ)pass3.sym: src/pass3.ec
178 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/pass3.ec -o $(OBJ)pass3.sym
180 $(OBJ)shortcuts.sym: src/shortcuts.ec
181 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/shortcuts.ec -o $(OBJ)shortcuts.sym
183 $(OBJ)type.sym: src/type.ec
184 $(ECP) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) -c src/type.ec -o $(OBJ)type.sym
188 $(OBJ)ast.c: src/ast.ec $(OBJ)ast.sym | $(SYMBOLS)
189 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/ast.ec -o $(OBJ)ast.c -symbols $(OBJ)
191 $(OBJ)copy.c: src/copy.ec $(OBJ)copy.sym | $(SYMBOLS)
192 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/copy.ec -o $(OBJ)copy.c -symbols $(OBJ)
194 $(OBJ)dbpass.c: src/dbpass.ec $(OBJ)dbpass.sym | $(SYMBOLS)
195 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/dbpass.ec -o $(OBJ)dbpass.c -symbols $(OBJ)
197 $(OBJ)ecdefs.c: src/ecdefs.ec $(OBJ)ecdefs.sym | $(SYMBOLS)
198 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/ecdefs.ec -o $(OBJ)ecdefs.c -symbols $(OBJ)
200 $(OBJ)expression.c: src/expression.ec | $(SYMBOLS)
201 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/expression.ec -o $(OBJ)expression.c -symbols $(OBJ)
203 $(OBJ)firstPass.c: src/firstPass.ec $(OBJ)firstPass.sym | $(SYMBOLS)
204 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/firstPass.ec -o $(OBJ)firstPass.c -symbols $(OBJ)
206 $(OBJ)freeAst.c: src/freeAst.ec $(OBJ)freeAst.sym | $(SYMBOLS)
207 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/freeAst.ec -o $(OBJ)freeAst.c -symbols $(OBJ)
209 $(OBJ)grammar.c: src/grammar.ec | $(SYMBOLS)
210 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/grammar.ec -o $(OBJ)grammar.c -symbols $(OBJ)
212 $(OBJ)lexer.c: src/lexer.ec $(OBJ)lexer.sym | $(SYMBOLS)
213 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/lexer.ec -o $(OBJ)lexer.c -symbols $(OBJ)
215 $(OBJ)loadSymbols.c: src/loadSymbols.ec $(OBJ)loadSymbols.sym | $(SYMBOLS)
216 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/loadSymbols.ec -o $(OBJ)loadSymbols.c -symbols $(OBJ)
218 $(OBJ)output.c: src/output.ec $(OBJ)output.sym | $(SYMBOLS)
219 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/output.ec -o $(OBJ)output.c -symbols $(OBJ)
221 $(OBJ)pass0.c: src/pass0.ec $(OBJ)pass0.sym | $(SYMBOLS)
222 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass0.ec -o $(OBJ)pass0.c -symbols $(OBJ)
224 $(OBJ)pass1.c: src/pass1.ec $(OBJ)pass1.sym | $(SYMBOLS)
225 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass1.ec -o $(OBJ)pass1.c -symbols $(OBJ)
227 $(OBJ)pass15.c: src/pass15.ec $(OBJ)pass15.sym | $(SYMBOLS)
228 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass15.ec -o $(OBJ)pass15.c -symbols $(OBJ)
230 $(OBJ)pass16.c: src/pass16.ec $(OBJ)pass16.sym | $(SYMBOLS)
231 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass16.ec -o $(OBJ)pass16.c -symbols $(OBJ)
233 $(OBJ)pass2.c: src/pass2.ec $(OBJ)pass2.sym | $(SYMBOLS)
234 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass2.ec -o $(OBJ)pass2.c -symbols $(OBJ)
236 $(OBJ)pass3.c: src/pass3.ec $(OBJ)pass3.sym | $(SYMBOLS)
237 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/pass3.ec -o $(OBJ)pass3.c -symbols $(OBJ)
239 $(OBJ)shortcuts.c: src/shortcuts.ec $(OBJ)shortcuts.sym | $(SYMBOLS)
240 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/shortcuts.ec -o $(OBJ)shortcuts.c -symbols $(OBJ)
242 $(OBJ)type.c: src/type.ec | $(SYMBOLS)
243 $(ECC) $(CECFLAGS) $(ECFLAGS) $(CFLAGS) $(FVISIBILITY) -c src/type.ec -o $(OBJ)type.c -symbols $(OBJ)
245 # IMPLICIT OBJECT RULE
247 $(OBJ)%$(O) : $(OBJ)%.c
248 $(CC) $(CFLAGS) $(FVISIBILITY) -c $< -o $@
252 $(OBJ)$(MODULE).main$(O): $(OBJ)$(MODULE).main.c
253 $(CC) $(CFLAGS) $(FVISIBILITY) -c $(OBJ)$(MODULE).main.c -o $(OBJ)$(MODULE).main$(O)
255 $(OBJ)bsl.o: ../bootstrap/bsl.c
256 $(CC) $(BSL_CFLAGS) $(FVISIBILITY) -c ../bootstrap/bsl.c -o $(OBJ)bsl.o
259 $(call rmq,$(OBJ)$(MODULE).main.c $(OBJ)$(MODULE).main.ec $(OBJ)$(MODULE).main$(I) $(OBJ)$(MODULE).main$(S) $(TARGET))
260 $(call rmq,$(OBJECTS))
261 $(call rmq,$(COBJECTS))
262 $(call rmq,$(IMPORTS))
263 $(call rmq,$(SYMBOLS))