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