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