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