Merge "implemented decmatch (artf724241)"
[deliverable/titan.core.git] / core / Makefile
1 ##############################################################################
2 # Copyright (c) 2000-2016 Ericsson Telecom AB
3 # All rights reserved. This program and the accompanying materials
4 # are made available under the terms of the Eclipse Public License v1.0
5 # which accompanies this distribution, and is available at
6 # http://www.eclipse.org/legal/epl-v10.html
7 #
8 # Contributors:
9 #
10 # Baji, Laszlo
11 # Balasko, Jeno
12 # Baranyi, Botond
13 # Beres, Szabolcs
14 # Delic, Adam
15 # Feher, Csaba
16 # Forstner, Matyas
17 # Horvath, Gabriella
18 # Koppany, Csaba
19 # Kovacs, Ferenc
20 # Raduly, Csaba
21 # Szabados, Kristof
22 # Szabo, Janos Zoltan – initial implementation
23 # Szalai, Gabor
24 # Zalanyi, Balazs Andor
25 #
26 ##############################################################################
27 # Makefile for the Base Library of TTCN-3 Test Executor
28 TOP := ..
29 include $(TOP)/Makefile.cfg
30
31 SCHEMAS := TitanLoggerApi.xsd
32 # Generated from `TitanLoggerApi.xsd'.
33 GENERATED_MODULES := TitanLoggerApi.ttcn
34
35 PREGENERATOR_MODULES := PreGenRecordOf.ttcn
36
37 GENERATED_LOGGERAPI_SOURCES := $(GENERATED_MODULES:.ttcn=.cc)
38 GENERATED_LOGGERCONTROL_SOURCES := TitanLoggerControl.cc
39
40 PREGENERATED_SOURCES := $(PREGENERATOR_MODULES:.ttcn=.cc)
41
42 ORIGINATORS := TitanLoggerApi.xsd TitanLoggerApi.ttcn TitanLoggerControl.ttcn gccversion.c \
43 config_process.l config_process.y
44
45 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
46 APIDIR := RT1
47 else
48 APIDIR := RT2
49 endif
50
51 # RT1 (load test) generates cc/hh files into the RT1/ directory,
52 # RT2 (function test) into the RT2/ directory. This has two purposes:
53 # * To prevent the vpath directive in core2/Makefile from finding files in RT1.
54 # This way, RT2 has to generate these files for itself (with RT2 settings).
55 # * To allow TTCN3.hh to include the right kind of TitanLoggerApi.hh
56 # These directories (RT1/RT2) are replicated inside $(INCDIR)
57 GENERATED_LOGGERAPI_SOURCES := $(addprefix $(APIDIR)/,$(GENERATED_LOGGERAPI_SOURCES))
58 GENERATED_LOGGERCONTROL_SOURCES := $(addprefix $(APIDIR)/,$(GENERATED_LOGGERCONTROL_SOURCES))
59 PREGENERATED_SOURCES := $(addprefix $(APIDIR)/,$(PREGENERATED_SOURCES))
60
61 GENERATED_SOURCES := $(GENERATED_LOGGERAPI_SOURCES) $(GENERATED_LOGGERCONTROL_SOURCES) config_process.lex.cc config_process.tab.cc
62 GENERATED_SOURCES += $(PREGENERATED_SOURCES)
63 GENERATED_HEADERS := $(GENERATED_LOGGERAPI_SOURCES:.cc=.hh) $(GENERATED_LOGGERCONTROL_SOURCES:.cc=.hh) config_process.tab.hh config_process.lex.hh
64 GENERATED_HEADERS += $(GENERATED_LOGGERAPI_SOURCES:.cc=Simple.hh) $(PREGENERATED_SOURCES:.cc=.hh)
65 GENERATED_OTHERS := $(GENERATED_LOGGERAPI_SOURCES).compiled $(GENERATED_LOGGERCONTROL_SOURCES).compiled
66 GENERATED_OTHERS += $(PREGENERATED_SOURCES).compiled config_process.output lex.backup
67
68 TTCN_COMPILER_FLAGS :=
69 ifeq ($(FUNCTION_TEST_RUNTIME), yes)
70 TTCN_COMPILER_FLAGS += -R
71 endif
72
73 TTCN_COMPILER_FLAGS += -o $(APIDIR)
74
75 # -I. is needed because TitanLoggerApi.hh (generated) does #include <TTCN3.hh>
76 CPPFLAGS += -I. -I$(APIDIR)
77
78 SOLARIS_LIBS := -lsocket -lnsl -lxml2
79 SOLARIS8_LIBS := -lsocket -lnsl -lxml2
80 LINUX_LIBS := -lxml2
81 FREEBSD_LIBS := -lxml2
82 WIN32_LIBS := -lxml2
83 INTERIX_LIBS := -lxml2
84
85 ifeq ($(ADVANCED_DEBUGGER_UI), yes)
86 SOLARIS_LIBS += -lcurses
87 SOLARIS8_LIBS += -lcurses
88 LINUX_LIBS += -lncurses
89 FREEBSD_LIBS += -lncurses
90 WIN32_LIBS += -lncurses
91 INTERIX_LIBS += -lncurses
92 endif
93
94 ifeq ($(USAGE_STATS), yes)
95 SOLARIS_LIBS += -lresolv
96 SOLARIS8_LIBS += -lresolv
97 LINUX_LIBS += -lpthread -lrt
98 endif
99
100 # No need for `-Wl,-export-dynamic' until we're using shared objects. All
101 # `dl*()' related stuff is disabled for now.
102 ifeq ($(DYNAMIC_LOGGER_PLUGINS), yes)
103 $(PLATFORM)_LIBS += -ldl
104 endif
105
106 # Note: RT2_SOURCES is set in core2/Makefile
107 STATIC_SOURCES := Addfunc.cc Array.cc ASN_Any.cc ASN_CharacterString.cc \
108 ASN_EmbeddedPDV.cc ASN_External.cc ASN_Null.cc Basetype.cc BER.cc Bitstring.cc \
109 Boolean.cc Charstring.cc Communication.cc Component.cc Default.cc Encdec.cc \
110 Error.cc Float.cc Hexstring.cc RInt.cc Integer.cc Logger.cc LoggerPlugin.cc \
111 LoggerPluginManager.cc LegacyLogger.cc LoggingBits.cc \
112 Module_list.cc Objid.cc Octetstring.cc Parallel_main.cc Port.cc RAW.cc \
113 Runtime.cc Single_main.cc Snapshot.cc Struct_of.cc Template.cc TEXT.cc \
114 Textbuf.cc Timer.cc Param_Types.cc Universal_charstring.cc \
115 Verdicttype.cc XER.cc XmlReader.cc TitanLoggerControlImpl.cc TCov.cc JSON.cc \
116 Profiler.cc ProfilerTools.cc ProfMerge_main.cc Debugger.cc DebuggerUI.cc \
117 $(RT2_SOURCES)
118
119 # Keep GENERATED_SOURCES at the beginning. This may speed up parallel builds
120 # by starting early the compilation of the largest files.
121 SOURCES := $(GENERATED_SOURCES) $(STATIC_SOURCES)
122
123
124 ifeq ($(FUNCTION_TEST_RUNTIME), yes)
125 RT2_SUFFIX := -rt2
126 CPPFLAGS += -DTITAN_RUNTIME_2
127 endif
128
129 ifdef XMLDIR
130 ifeq ($(XMLDIR), default)
131 # Do not change XMLDIR !
132 ACTUAL_XMLDIR := /usr
133 # do not add -L/usr/lib to LDFLAGS, it's redundant
134 else
135 ACTUAL_XMLDIR := $(XMLDIR)
136 LDFLAGS += -L$(ACTUAL_XMLDIR)/lib
137 endif
138 # This addition to CPPFLAGS is always needed
139 CPPFLAGS += -I$(ACTUAL_XMLDIR)/include/libxml2
140 endif
141
142 ifdef OPENSSL_DIR
143 ifneq ($(OPENSSL_DIR), default)
144 CPPFLAGS += -I$(OPENSSL_DIR)/include
145 LDFLAGS += -L$(OPENSSL_DIR)/lib
146 endif
147 endif
148
149 ifeq ($(PLATFORM),INTERIX)
150 # to get the "right" iconv, used by libxml2
151 CPPFLAGS += -I/usr/local/include
152 endif
153
154
155 OBJECTS := $(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(SOURCES)))
156
157 PROFMERGE_OBJECTS := ProfMerge_main.o ProfilerTools.profmerge.o \
158 ../common/JSON_Tokenizer.o ../common/memory.o
159
160 COMMON_OBJECTS := $(addprefix ../common/, memory.o pattern_la.o pattern_p.o \
161 config_preproc.o config_preproc_la.o config_preproc_p.tab.o \
162 path.o pattern_uni.o Quadruple.o NetworkHandler.o Path2.o \
163 ModuleVersion.o JSON_Tokenizer.o)
164
165 ifeq ($(DEBUG), yes)
166 COMMON_OBJECTS += ../common/new.o
167 endif
168
169 ifeq ($(LICENSING), yes)
170 COMMON_OBJECTS += ../common/license.o
171 PROFMERGE_OBJECTS += ../common/license.o
172 endif
173
174 ifdef REGEX_DIR
175 COMMON_OBJECTS += $(REGEX_DIR)/lib/regex.o
176 endif
177
178 ifeq ($(USAGE_STATS), yes)
179 COMMON_OBJECTS += ../common/usage_stats.o
180 endif
181
182 ifeq ($(ADVANCED_DEBUGGER_UI), yes)
183 EDITLINE_OBJECTS := $(addprefix ../mctr2/editline/build/src/.libs/, chared.o common.o \
184 emacs.o fgetln.o help.o history.o map.o prompt.o read.o search.o strlcat.o term.o tty.o \
185 vi.o wcsdup.o chartype.o el.o fcns.o filecomplete.o hist.o key.o parse.o readline.o \
186 refresh.o sig.o strlcpy.o tokenizer.o unvis.o vis.o)
187 endif
188
189 LIBRARY_OBJECTS_NOMAIN := $(filter-out Single_main.o Parallel_main.o ProfMerge_main.o, \
190 $(OBJECTS)) $(COMMON_OBJECTS) $(EDITLINE_OBJECTS)
191
192 TOBECLEANED := LoggerPlugin_static.o LoggerPlugin_dynamic.o ProfilerTools.profmerge.o
193
194 DEPFILES := $(patsubst %.cc,%.d,$(patsubst %.c,%.d,$(SOURCES)))
195
196 SUBDIRS :=
197
198 HEADERS := TTCN3.hh Types.h Param_Types.hh Basetype.hh Template.hh RInt.hh \
199 Integer.hh Float.hh Boolean.hh Objid.hh Verdicttype.hh Bitstring.hh \
200 Hexstring.hh Octetstring.hh Charstring.hh Universal_charstring.hh Component.hh \
201 Logger.hh ILoggerPlugin.hh Error.hh Timer.hh Runtime.hh Snapshot.hh Default.hh \
202 Port.hh Event_Handler.hh Struct_of.hh Array.hh Optional.hh Textbuf.hh Encdec.hh \
203 Module_list.hh Parameters.h Addfunc.hh RAW.hh BER.hh TEXT.hh ASN_Null.hh \
204 ASN_Any.hh ASN_External.hh ASN_EmbeddedPDV.hh ASN_CharacterString.hh XER.hh \
205 XmlReader.hh cversion.h TitanLoggerControl.ttcn TitanLoggerApi.xsd Vector.hh \
206 JSON.hh Profiler.hh RefdIndex.hh ProfilerTools.hh Debugger.hh DebugCommands.hh \
207 DebuggerUI.hh
208 # Copied during "make install"
209
210 ifdef REGEX_DIR
211 HEADERS += $(REGEX_DIR)/include/regex.h
212 endif
213
214 # # # # Library and shared lib names
215 LIBRARY := libttcn3$(RT2_SUFFIX).a
216 PARALLEL_LIBRARY := libttcn3$(RT2_SUFFIX)-parallel.a
217 SHAREDLIB := libttcn3$(RT2_SUFFIX)-dynamic.so
218 PARALLEL_SHAREDLIB := libttcn3$(RT2_SUFFIX)-parallel-dynamic.so
219
220 # Executables
221 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
222 PROGRAMS := ttcn3_profmerge$(EXESUFFIX)
223 endif
224
225 TARGETS := $(LIBRARY) $(PARALLEL_LIBRARY)
226
227 # Determine whether to build shared libraries:
228 DYNAMIC_LINKING := yes
229 ifeq ($(PLATFORM), WIN32)
230 LDFLAGS += -Xlinker --out-implib -Xlinker $(basename $@).a
231 endif
232 ifeq ($(PLATFORM), INTERIX)
233 DYNAMIC_LINKING := no
234 endif
235
236 ifeq ($(DYNAMIC_LINKING), yes)
237 TARGETS += $(SHAREDLIB) $(PARALLEL_SHAREDLIB)
238 ifeq ($(PLATFORM), WIN32)
239 # import libraries are generated as a side-effect; need to be cleaned
240 TOBECLEANED += $(SHAREDLIB:.so=.a) $(PARALLEL_SHAREDLIB:.so=.a)
241 endif
242 endif
243
244 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
245 TARGETS += cversion.h
246 endif
247
248 # Only for testing the consistency of libraries:
249 TEST_PROGRAMS := single$(RT2_SUFFIX)$(EXESUFFIX) parallel$(RT2_SUFFIX)$(EXESUFFIX)
250 ifeq ($(DYNAMIC_LINKING), yes)
251 TEST_PROGRAMS += single$(RT2_SUFFIX)-dynamic$(EXESUFFIX) parallel$(RT2_SUFFIX)-dynamic$(EXESUFFIX)
252 endif
253 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
254 TEST_PROGRAMS += gccversion$(EXESUFFIX)
255 endif
256
257
258 TOBECLEANED += $(TEST_PROGRAMS) cversion.h $(GENERATED_MODULES)
259
260 ifdef REGEX_DIR
261 CPPFLAGS += -I$(REGEX_DIR)/include
262 endif
263
264
265 ifdef SRCDIR
266 COMMON_DIR := $(SRCDIR)/common
267 else
268 COMMON_DIR := ../common
269 endif
270
271 CPPFLAGS += -I$(COMMON_DIR)
272
273 MANPAGES := ttcn3_profmerge.1
274
275 # # # # # # # # # targets
276 all: $(TARGETS) $(PROGRAMS) $(TEST_PROGRAMS)
277
278 run: all
279 # Verify that the executables are runnable.
280 for p in $(filter-out gccversion%,$(TEST_PROGRAMS)); do echo $$p; LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH ./$$p -l; if [ $$? -ne 0 ] ; then exit $$?; fi done
281
282 # xsd -> ttcn
283 $(GENERATED_MODULES): $(SCHEMAS) ../xsdconvert/xsd2ttcn$(EXESUFFIX)
284 ../xsdconvert/xsd2ttcn$(EXESUFFIX) -p $<
285 sed -e 's/XSD.String/charstring/g;s/XSD.AnySimpleType/charstring/g;s/XSD.Integer/integer/g;s/XSD.Float/float/g;s/XSD.Double/float/g;s/XSD.Boolean/boolean/g;s/import from XSD all;//g' TitanLoggerApi.ttcn >TitanLoggerApi.ttcn_
286 mv TitanLoggerApi.ttcn_ TitanLoggerApi.ttcn
287
288 install: $(TARGETS) $(PROGRAMS)
289 ifeq ($(DYNAMIC_LINKING), yes)
290 ifeq ($(DEBUG), no)
291 $(STRIP) $(SHAREDLIB) $(PARALLEL_SHAREDLIB)
292 endif
293 endif
294 mkdir -p $(LIBDIR)
295 cp $(TARGETS) $(LIBDIR)
296 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
297 mkdir -p $(INCDIR)
298 cp $(HEADERS) $(INCDIR)
299 mkdir -p $(BINDIR)
300 cp $(PROGRAMS) $(BINDIR)
301 mkdir -p $(MANDIR)/man1
302 cp $(MANPAGES) $(MANDIR)/man1
303 ifeq ($(DYNAMIC_LINKING), yes)
304 ifneq ($(OPENSSL_DIR), default)
305 (cd $(OPENSSL_DIR)/lib && tar -cf - libcrypto.so*) |\
306 (cd $(LIBDIR) && tar -xf -)
307 endif
308 ifneq ($(XMLDIR), default)
309 (cd $(XMLDIR)/lib && tar -cf - libxml2.so*) |\
310 (cd $(LIBDIR) && tar -xf -)
311 endif
312 endif
313 endif
314 mkdir -p $(INCDIR)/$(APIDIR)
315 cp $(APIDIR)/TitanLoggerApi*.hh $(INCDIR)/$(APIDIR)
316 cp $(APIDIR)/PreGenRecordOf.hh $(INCDIR)/$(APIDIR)
317
318 # # # # executables
319 single$(RT2_SUFFIX)$(EXESUFFIX): $(LIBRARY)
320 $(CXX) $(LDFLAGS) -o $@ $^ -lcrypto $($(PLATFORM)_LIBS)
321
322 single$(RT2_SUFFIX)-dynamic$(EXESUFFIX): Single_main.o $(SHAREDLIB)
323 $(CXX) $(LDFLAGS) -o $@ $^ -lcrypto $($(PLATFORM)_LIBS)
324
325 parallel$(RT2_SUFFIX)$(EXESUFFIX): $(PARALLEL_LIBRARY)
326 $(CXX) $(LDFLAGS) -o $@ $^ -lcrypto $($(PLATFORM)_LIBS)
327
328 parallel$(RT2_SUFFIX)-dynamic$(EXESUFFIX): Parallel_main.o $(PARALLEL_SHAREDLIB)
329 $(CXX) $(LDFLAGS) -o $@ $^ -lcrypto $($(PLATFORM)_LIBS)
330
331 ttcn3_profmerge$(EXESUFFIX): $(PROFMERGE_OBJECTS)
332 $(CXX) $(LDFLAGS) -o $@ $^ $(LICENSE_LIBS) $($(PLATFORM)_LIBS)
333
334 # # # # static link libraries
335 $(LIBRARY): $(LIBRARY_OBJECTS_NOMAIN) LoggerPlugin_static.o Single_main.o
336 $(AR) -r $@ $?
337
338 $(PARALLEL_LIBRARY): $(LIBRARY_OBJECTS_NOMAIN) LoggerPlugin_static.o Parallel_main.o
339 $(AR) -r $@ $?
340
341 # # # # dynamic link libraries
342
343 $(SHAREDLIB): $(LIBRARY_OBJECTS_NOMAIN) LoggerPlugin_dynamic.o Single_main.o
344 $(LD) $(LDFLAGS) -o $@ $^ -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS)
345
346 $(PARALLEL_SHAREDLIB): $(LIBRARY_OBJECTS_NOMAIN) LoggerPlugin_dynamic.o Parallel_main.o
347 $(LD) $(LDFLAGS) -o $@ $^ -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS)
348
349 ifneq ($(FUNCTION_TEST_RUNTIME), yes)
350 # core2 -> core dependency, core2 does not run flex and bison
351 # core must be made before core2
352
353 %.lex.cc %.lex.hh: %.l
354 $(FLEX) $(FLEXFLAGS) -P$(subst .l,_,$<) --header-file=$(subst .l,.lex.hh,$<) \
355 -o$(subst .l,.lex.cc,$<) $<
356
357 %.tab.cc %.tab.hh: %.y %.lex.hh
358 $(BISON) $(BISONFLAGS) -o $(subst .y,.tab.cc,$<) -p $(subst .y,_,$<) $<
359
360 cversion.h: gccversion$(EXESUFFIX)
361 ./$< > $@.tmp
362 if [ -f $@ ] ; then \
363 if diff $@.tmp $@ >/dev/null ; then \
364 rm $@.tmp ; \
365 else \
366 mv $@.tmp $@ ; \
367 fi \
368 else \
369 mv $@.tmp $@ ; \
370 fi
371
372 gccversion$(EXESUFFIX): gccversion.c ../Makefile.cfg
373 # The line before the backslash is $(LINK.c), except it uses CCFLAGS
374 # instead of CFLAGS. TARGET_ARCH is not used by Titan.
375 $(CC) $(CCFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) \
376 $< $(LOADLIBES) $(LDLIBS) -o $@
377 endif
378
379 #LegacyLogger.d: cversion.h
380 $(DEPFILES): cversion.h
381
382 #TitanLoggerControlImpl.d Single_main.d Runtime.d Port.d LegacyLogger.d \
383 #LoggerPlugin.d LoggerPluginManager.d Error.d Default.d Communication.d \
384 #Addfunc.d: $(GENERATED_LOGGERAPI_SOURCES:.cc=.cc)
385
386 TitanLoggerControlImpl.d: $(GENERATED_LOGGERCONTROL_SOURCES)
387
388
389 $(GENERATED_LOGGERAPI_SOURCES): $(GENERATED_LOGGERAPI_SOURCES).compiled
390 @if [ ! -f $@ ]; then $(RM) $<; $(MAKE) $<; fi
391
392 $(GENERATED_LOGGERAPI_SOURCES).compiled:: ../compiler2/compiler$(EXESUFFIX)
393 @if [ -f $@ ]; then $(RM) $@; $(MAKE) $@; fi
394
395 $(GENERATED_LOGGERAPI_SOURCES).compiled:: $(GENERATED_MODULES)
396 mkdir -p $(APIDIR)
397 # The input (TitanLoggerApi.ttcn) is a generated file and might get corrupted
398 # by parallel execution of xsd2ttcn. Get it out of the way but save it for later.
399 if ../compiler2/compiler$(EXESUFFIX) $(TTCN_COMPILER_FLAGS) $^ - $?; then :; else mv $? $?.$$$$.bad; exit 1; fi
400 perl $(ABS_SRC)/../core/simplify.pl $(GENERATED_LOGGERAPI_SOURCES:.cc=.hh) > $(GENERATED_LOGGERAPI_SOURCES:.cc=Simple.hh)
401 touch $@
402
403 $(GENERATED_LOGGERCONTROL_SOURCES): $(GENERATED_LOGGERCONTROL_SOURCES).compiled
404 @if [ ! -f $@ ]; then $(RM) $<; $(MAKE) $<; fi
405
406 $(GENERATED_LOGGERCONTROL_SOURCES).compiled:: ../compiler2/compiler$(EXESUFFIX)
407 @if [ -f $@ ]; then $(RM) $@; $(MAKE) $@; fi
408
409 $(GENERATED_LOGGERCONTROL_SOURCES).compiled:: TitanLoggerControl.ttcn
410 mkdir -p $(APIDIR)
411 ../compiler2/compiler$(EXESUFFIX) $(TTCN_COMPILER_FLAGS) $^ - $?
412 touch $@
413
414 $(PREGENERATED_SOURCES): $(PREGENERATED_SOURCES).compiled
415 @if [ ! -f $@ ]; then $(RM) $<; $(MAKE) $<; fi
416
417 $(PREGENERATED_SOURCES).compiled:: ../compiler2/compiler$(EXESUFFIX)
418 @if [ -f $@ ]; then $(RM) $@; $(MAKE) $@; fi
419
420 $(PREGENERATED_SOURCES).compiled:: $(PREGENERATOR_MODULES)
421 mkdir -p $(APIDIR)
422 ../compiler2/compiler$(EXESUFFIX) -F $(TTCN_COMPILER_FLAGS) $^ - $?
423 touch $@
424
425 include ../Makefile.genrules
426
427 # These are not in STATIC_SOURCES, so vpath is not created for them
428 vpath LoggerPlugin_dynamic.cc $(ABS_SRC)
429 vpath LoggerPlugin_static.cc $(ABS_SRC)
This page took 0.04585 seconds and 5 git commands to generate.