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
22 # Szabo, Janos Zoltan – initial implementation
24 # Zalanyi, Balazs Andor
26 ##############################################################################
27 # Makefile for the Base Library of TTCN-3 Test Executor
29 include $(TOP
)/Makefile.cfg
31 SCHEMAS
:= TitanLoggerApi.xsd
32 # Generated from `TitanLoggerApi.xsd'.
33 GENERATED_MODULES
:= TitanLoggerApi.ttcn
35 PREGENERATOR_MODULES
:= PreGenRecordOf.ttcn
37 GENERATED_LOGGERAPI_SOURCES
:= $(GENERATED_MODULES
:.ttcn
=.
cc)
38 GENERATED_LOGGERCONTROL_SOURCES
:= TitanLoggerControl.
cc
40 PREGENERATED_SOURCES
:= $(PREGENERATOR_MODULES
:.ttcn
=.
cc)
42 ORIGINATORS
:= TitanLoggerApi.xsd TitanLoggerApi.ttcn TitanLoggerControl.ttcn gccversion.c \
43 config_process.l config_process.y
45 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
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
))
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
68 TTCN_COMPILER_FLAGS
:=
69 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
70 TTCN_COMPILER_FLAGS
+= -R
73 TTCN_COMPILER_FLAGS
+= -o
$(APIDIR
)
75 # -I. is needed because TitanLoggerApi.hh (generated) does #include <TTCN3.hh>
76 CPPFLAGS
+= -I.
-I
$(APIDIR
)
78 SOLARIS_LIBS
:= -lsocket
-lnsl
-lxml2
79 SOLARIS8_LIBS
:= -lsocket
-lnsl
-lxml2
81 FREEBSD_LIBS
:= -lxml2
83 INTERIX_LIBS
:= -lxml2
85 ifeq ($(USAGE_STATS
), yes
)
86 SOLARIS_LIBS
+= -lresolv
87 SOLARIS8_LIBS
+= -lresolv
88 LINUX_LIBS
+= -lpthread
-lrt
91 # No need for `-Wl,-export-dynamic' until we're using shared objects. All
92 # `dl*()' related stuff is disabled for now.
93 ifeq ($(DYNAMIC_LOGGER_PLUGINS
), yes
)
94 $(PLATFORM
)_LIBS
+= -ldl
97 # Note: RT2_SOURCES is set in core2/Makefile
98 STATIC_SOURCES
:= Addfunc.
cc Array.
cc ASN_Any.
cc ASN_CharacterString.
cc \
99 ASN_EmbeddedPDV.
cc ASN_External.
cc ASN_Null.
cc Basetype.
cc BER.
cc Bitstring.
cc \
100 Boolean.
cc Charstring.
cc Communication.
cc Component.
cc Default.
cc Encdec.
cc \
101 Error.
cc Float.
cc Hexstring.
cc RInt.
cc Integer.
cc Logger.
cc LoggerPlugin.
cc \
102 LoggerPluginManager.
cc LegacyLogger.
cc LoggingBits.
cc \
103 Module_list.
cc Objid.
cc Octetstring.
cc Parallel_main.
cc Port.
cc RAW.
cc \
104 Runtime.
cc Single_main.
cc Snapshot.
cc Struct_of.
cc Template.
cc TEXT.
cc \
105 Textbuf.
cc Timer.
cc Param_Types.
cc Universal_charstring.
cc \
106 Verdicttype.
cc XER.
cc XmlReader.
cc TitanLoggerControlImpl.
cc TCov.
cc JSON.
cc \
107 Profiler.
cc ProfilerTools.
cc ProfMerge_main.
cc Debugger.
cc $(RT2_SOURCES
)
109 # Keep GENERATED_SOURCES at the beginning. This may speed up parallel builds
110 # by starting early the compilation of the largest files.
111 SOURCES
:= $(GENERATED_SOURCES
) $(STATIC_SOURCES
)
114 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
116 CPPFLAGS
+= -DTITAN_RUNTIME_2
120 ifeq ($(XMLDIR
), default
)
121 # Do not change XMLDIR !
122 ACTUAL_XMLDIR
:= /usr
123 # do not add -L/usr/lib to LDFLAGS, it's redundant
125 ACTUAL_XMLDIR
:= $(XMLDIR
)
126 LDFLAGS
+= -L
$(ACTUAL_XMLDIR
)/lib
128 # This addition to CPPFLAGS is always needed
129 CPPFLAGS
+= -I
$(ACTUAL_XMLDIR
)/include/libxml2
133 ifneq ($(OPENSSL_DIR
), default
)
134 CPPFLAGS
+= -I
$(OPENSSL_DIR
)/include
135 LDFLAGS
+= -L
$(OPENSSL_DIR
)/lib
139 ifeq ($(PLATFORM
),INTERIX
)
140 # to get the "right" iconv, used by libxml2
141 CPPFLAGS
+= -I
/usr
/local
/include
145 OBJECTS
:= $(patsubst %.
cc,%.o
,$(patsubst %.c
,%.o
,$(SOURCES
)))
147 PROFMERGE_OBJECTS
:= ProfMerge_main.o ProfilerTools.profmerge.o \
148 ..
/common
/JSON_Tokenizer.o ..
/common
/memory.o
150 COMMON_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
)
156 COMMON_OBJECTS
+= ..
/common
/new.o
159 ifeq ($(LICENSING
), yes
)
160 COMMON_OBJECTS
+= ..
/common
/license.o
161 PROFMERGE_OBJECTS
+= ..
/common
/license.o
165 COMMON_OBJECTS
+= $(REGEX_DIR
)/lib
/regex.o
168 ifeq ($(USAGE_STATS
), yes
)
169 COMMON_OBJECTS
+= ..
/common
/usage_stats.o
172 LIBRARY_OBJECTS_NOMAIN
:= $(filter-out Single_main.o Parallel_main.o ProfMerge_main.o
, \
173 $(OBJECTS
)) $(COMMON_OBJECTS
)
175 TOBECLEANED
:= LoggerPlugin_static.o LoggerPlugin_dynamic.o ProfilerTools.profmerge.o
177 DEPFILES
:= $(patsubst %.
cc,%.d
,$(patsubst %.c
,%.d
,$(SOURCES
)))
181 HEADERS
:= TTCN3.hh Types.h Param_Types.hh Basetype.hh Template.hh RInt.hh \
182 Integer.hh Float.hh Boolean.hh Objid.hh Verdicttype.hh Bitstring.hh \
183 Hexstring.hh Octetstring.hh Charstring.hh Universal_charstring.hh Component.hh \
184 Logger.hh ILoggerPlugin.hh Error.hh Timer.hh Runtime.hh Snapshot.hh Default.hh \
185 Port.hh Event_Handler.hh Struct_of.hh Array.hh Optional.hh Textbuf.hh Encdec.hh \
186 Module_list.hh Parameters.h Addfunc.hh RAW.hh BER.hh TEXT.hh ASN_Null.hh \
187 ASN_Any.hh ASN_External.hh ASN_EmbeddedPDV.hh ASN_CharacterString.hh XER.hh \
188 XmlReader.hh cversion.h TitanLoggerControl.ttcn TitanLoggerApi.xsd Vector.hh \
189 JSON.hh Profiler.hh RefdIndex.hh ProfilerTools.hh Debugger.hh
190 # Copied during "make install"
193 HEADERS
+= $(REGEX_DIR
)/include/regex.h
196 # # # # Library and shared lib names
197 LIBRARY
:= libttcn3
$(RT2_SUFFIX
).a
198 PARALLEL_LIBRARY
:= libttcn3
$(RT2_SUFFIX
)-parallel.a
199 SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-dynamic.so
200 PARALLEL_SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-parallel-dynamic.so
203 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
204 PROGRAMS
:= ttcn3_profmerge
$(EXESUFFIX
)
207 TARGETS
:= $(LIBRARY
) $(PARALLEL_LIBRARY
)
209 # Determine whether to build shared libraries:
210 DYNAMIC_LINKING
:= yes
211 ifeq ($(PLATFORM
), WIN32
)
212 LDFLAGS
+= -Xlinker
--out-implib
-Xlinker
$(basename $@
).a
214 ifeq ($(PLATFORM
), INTERIX
)
215 DYNAMIC_LINKING
:= no
218 ifeq ($(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
)
226 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
227 TARGETS
+= cversion.h
230 # Only for testing the consistency of libraries:
231 TEST_PROGRAMS
:= single
$(RT2_SUFFIX
)$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)$(EXESUFFIX
)
232 ifeq ($(DYNAMIC_LINKING
), yes
)
233 TEST_PROGRAMS
+= single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
)
235 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
236 TEST_PROGRAMS
+= gccversion
$(EXESUFFIX
)
240 TOBECLEANED
+= $(TEST_PROGRAMS
) cversion.h
$(GENERATED_MODULES
)
243 CPPFLAGS
+= -I
$(REGEX_DIR
)/include
248 COMMON_DIR
:= $(SRCDIR
)/common
250 COMMON_DIR
:= ..
/common
253 CPPFLAGS
+= -I
$(COMMON_DIR
)
255 MANPAGES
:= ttcn3_profmerge
.1
257 # # # # # # # # # targets
258 all: $(TARGETS
) $(PROGRAMS
) $(TEST_PROGRAMS
)
261 # Verify that the executables are runnable.
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
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
270 install: $(TARGETS
) $(PROGRAMS
)
271 ifeq ($(DYNAMIC_LINKING
), yes
)
273 $(STRIP
) $(SHAREDLIB
) $(PARALLEL_SHAREDLIB
)
277 cp
$(TARGETS
) $(LIBDIR
)
278 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
280 cp
$(HEADERS
) $(INCDIR
)
282 cp
$(PROGRAMS
) $(BINDIR
)
283 mkdir
-p
$(MANDIR
)/man1
284 cp
$(MANPAGES
) $(MANDIR
)/man1
285 ifeq ($(DYNAMIC_LINKING
), yes
)
286 ifneq ($(OPENSSL_DIR
), default
)
287 (cd
$(OPENSSL_DIR
)/lib
&& tar -cf
- libcrypto.so
*) |\
288 (cd
$(LIBDIR
) && tar -xf
-)
290 ifneq ($(XMLDIR
), default
)
291 (cd
$(XMLDIR
)/lib
&& tar -cf
- libxml2.so
*) |\
292 (cd
$(LIBDIR
) && tar -xf
-)
296 mkdir
-p
$(INCDIR
)/$(APIDIR
)
297 cp
$(APIDIR
)/TitanLoggerApi
*.hh
$(INCDIR
)/$(APIDIR
)
298 cp
$(APIDIR
)/PreGenRecordOf.hh
$(INCDIR
)/$(APIDIR
)
301 single
$(RT2_SUFFIX
)$(EXESUFFIX
): $(LIBRARY
)
302 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
304 single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Single_main.o
$(SHAREDLIB
)
305 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
307 parallel
$(RT2_SUFFIX
)$(EXESUFFIX
): $(PARALLEL_LIBRARY
)
308 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
310 parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Parallel_main.o
$(PARALLEL_SHAREDLIB
)
311 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
313 ttcn3_profmerge
$(EXESUFFIX
): $(PROFMERGE_OBJECTS
)
314 $(CXX
) $(LDFLAGS
) -o
$@
$^
$(LICENSE_LIBS
) $($(PLATFORM
)_LIBS
)
316 # # # # static link libraries
317 $(LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Single_main.o
320 $(PARALLEL_LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Parallel_main.o
323 # # # # dynamic link libraries
325 $(SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Single_main.o
326 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
328 $(PARALLEL_SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Parallel_main.o
329 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
331 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
332 # core2 -> core dependency, core2 does not run flex and bison
333 # core must be made before core2
335 %.
lex.
cc %.
lex.hh
: %.l
336 $(FLEX
) $(FLEXFLAGS
) -P
$(subst .l
,_
,$<) --header-file
=$(subst .l
,.
lex.hh
,$<) \
337 -o
$(subst .l
,.
lex.
cc,$<) $<
339 %.tab.
cc %.tab.hh
: %.y
%.
lex.hh
340 $(BISON
) $(BISONFLAGS
) -o
$(subst .y
,.tab.
cc,$<) -p
$(subst .y
,_
,$<) $<
342 cversion.h
: gccversion
$(EXESUFFIX
)
344 if
[ -f
$@
] ; then \
345 if diff
$@.tmp
$@
>/dev
/null
; then \
354 gccversion
$(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
$@
361 #LegacyLogger.d: cversion.h
362 $(DEPFILES
): cversion.h
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)
368 TitanLoggerControlImpl.d
: $(GENERATED_LOGGERCONTROL_SOURCES
)
371 $(GENERATED_LOGGERAPI_SOURCES
): $(GENERATED_LOGGERAPI_SOURCES
).compiled
372 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
374 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
375 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
377 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: $(GENERATED_MODULES
)
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
)
385 $(GENERATED_LOGGERCONTROL_SOURCES
): $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
386 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
388 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
389 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
391 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: TitanLoggerControl.ttcn
393 ..
/compiler2
/compiler
$(EXESUFFIX
) $(TTCN_COMPILER_FLAGS
) $^
- $?
396 $(PREGENERATED_SOURCES
): $(PREGENERATED_SOURCES
).compiled
397 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
399 $(PREGENERATED_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
400 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
402 $(PREGENERATED_SOURCES
).compiled
:: $(PREGENERATOR_MODULES
)
404 ..
/compiler2
/compiler
$(EXESUFFIX
) -F
$(TTCN_COMPILER_FLAGS
) $^
- $?
407 include ..
/Makefile.genrules
409 # These are not in STATIC_SOURCES, so vpath is not created for them
410 vpath LoggerPlugin_dynamic.
cc $(ABS_SRC
)
411 vpath LoggerPlugin_static.
cc $(ABS_SRC
)