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 ($(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
94 ifeq ($(USAGE_STATS
), yes
)
95 SOLARIS_LIBS
+= -lresolv
96 SOLARIS8_LIBS
+= -lresolv
97 LINUX_LIBS
+= -lpthread
-lrt
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
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 \
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
)
124 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
126 CPPFLAGS
+= -DTITAN_RUNTIME_2
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
135 ACTUAL_XMLDIR
:= $(XMLDIR
)
136 LDFLAGS
+= -L
$(ACTUAL_XMLDIR
)/lib
138 # This addition to CPPFLAGS is always needed
139 CPPFLAGS
+= -I
$(ACTUAL_XMLDIR
)/include/libxml2
143 ifneq ($(OPENSSL_DIR
), default
)
144 CPPFLAGS
+= -I
$(OPENSSL_DIR
)/include
145 LDFLAGS
+= -L
$(OPENSSL_DIR
)/lib
149 ifeq ($(PLATFORM
),INTERIX
)
150 # to get the "right" iconv, used by libxml2
151 CPPFLAGS
+= -I
/usr
/local
/include
155 OBJECTS
:= $(patsubst %.
cc,%.o
,$(patsubst %.c
,%.o
,$(SOURCES
)))
157 PROFMERGE_OBJECTS
:= ProfMerge_main.o ProfilerTools.profmerge.o \
158 ..
/common
/JSON_Tokenizer.o ..
/common
/memory.o
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
)
166 COMMON_OBJECTS
+= ..
/common
/new.o
169 ifeq ($(LICENSING
), yes
)
170 COMMON_OBJECTS
+= ..
/common
/license.o
171 PROFMERGE_OBJECTS
+= ..
/common
/license.o
175 COMMON_OBJECTS
+= $(REGEX_DIR
)/lib
/regex.o
178 ifeq ($(USAGE_STATS
), yes
)
179 COMMON_OBJECTS
+= ..
/common
/usage_stats.o
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
)
189 LIBRARY_OBJECTS_NOMAIN
:= $(filter-out Single_main.o Parallel_main.o ProfMerge_main.o
, \
190 $(OBJECTS
)) $(COMMON_OBJECTS
) $(EDITLINE_OBJECTS
)
192 TOBECLEANED
:= LoggerPlugin_static.o LoggerPlugin_dynamic.o ProfilerTools.profmerge.o
194 DEPFILES
:= $(patsubst %.
cc,%.d
,$(patsubst %.c
,%.d
,$(SOURCES
)))
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 \
208 # Copied during "make install"
211 HEADERS
+= $(REGEX_DIR
)/include/regex.h
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
221 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
222 PROGRAMS
:= ttcn3_profmerge
$(EXESUFFIX
)
225 TARGETS
:= $(LIBRARY
) $(PARALLEL_LIBRARY
)
227 # Determine whether to build shared libraries:
228 DYNAMIC_LINKING
:= yes
229 ifeq ($(PLATFORM
), WIN32
)
230 LDFLAGS
+= -Xlinker
--out-implib
-Xlinker
$(basename $@
).a
232 ifeq ($(PLATFORM
), INTERIX
)
233 DYNAMIC_LINKING
:= no
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
)
244 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
245 TARGETS
+= cversion.h
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
)
253 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
254 TEST_PROGRAMS
+= gccversion
$(EXESUFFIX
)
258 TOBECLEANED
+= $(TEST_PROGRAMS
) cversion.h
$(GENERATED_MODULES
)
261 CPPFLAGS
+= -I
$(REGEX_DIR
)/include
266 COMMON_DIR
:= $(SRCDIR
)/common
268 COMMON_DIR
:= ..
/common
271 CPPFLAGS
+= -I
$(COMMON_DIR
)
273 MANPAGES
:= ttcn3_profmerge
.1
275 # # # # # # # # # targets
276 all: $(TARGETS
) $(PROGRAMS
) $(TEST_PROGRAMS
)
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
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
288 install: $(TARGETS
) $(PROGRAMS
)
289 ifeq ($(DYNAMIC_LINKING
), yes
)
291 $(STRIP
) $(SHAREDLIB
) $(PARALLEL_SHAREDLIB
)
295 cp
$(TARGETS
) $(LIBDIR
)
296 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
298 cp
$(HEADERS
) $(INCDIR
)
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
-)
308 ifneq ($(XMLDIR
), default
)
309 (cd
$(XMLDIR
)/lib
&& tar -cf
- libxml2.so
*) |\
310 (cd
$(LIBDIR
) && tar -xf
-)
314 mkdir
-p
$(INCDIR
)/$(APIDIR
)
315 cp
$(APIDIR
)/TitanLoggerApi
*.hh
$(INCDIR
)/$(APIDIR
)
316 cp
$(APIDIR
)/PreGenRecordOf.hh
$(INCDIR
)/$(APIDIR
)
319 single
$(RT2_SUFFIX
)$(EXESUFFIX
): $(LIBRARY
)
320 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
322 single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Single_main.o
$(SHAREDLIB
)
323 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
325 parallel
$(RT2_SUFFIX
)$(EXESUFFIX
): $(PARALLEL_LIBRARY
)
326 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
328 parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Parallel_main.o
$(PARALLEL_SHAREDLIB
)
329 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
331 ttcn3_profmerge
$(EXESUFFIX
): $(PROFMERGE_OBJECTS
)
332 $(CXX
) $(LDFLAGS
) -o
$@
$^
$(LICENSE_LIBS
) $($(PLATFORM
)_LIBS
)
334 # # # # static link libraries
335 $(LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Single_main.o
338 $(PARALLEL_LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Parallel_main.o
341 # # # # dynamic link libraries
343 $(SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Single_main.o
344 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
346 $(PARALLEL_SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Parallel_main.o
347 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
349 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
350 # core2 -> core dependency, core2 does not run flex and bison
351 # core must be made before core2
353 %.
lex.
cc %.
lex.hh
: %.l
354 $(FLEX
) $(FLEXFLAGS
) -P
$(subst .l
,_
,$<) --header-file
=$(subst .l
,.
lex.hh
,$<) \
355 -o
$(subst .l
,.
lex.
cc,$<) $<
357 %.tab.
cc %.tab.hh
: %.y
%.
lex.hh
358 $(BISON
) $(BISONFLAGS
) -o
$(subst .y
,.tab.
cc,$<) -p
$(subst .y
,_
,$<) $<
360 cversion.h
: gccversion
$(EXESUFFIX
)
362 if
[ -f
$@
] ; then \
363 if diff
$@.tmp
$@
>/dev
/null
; then \
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
$@
379 #LegacyLogger.d: cversion.h
380 $(DEPFILES
): cversion.h
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)
386 TitanLoggerControlImpl.d
: $(GENERATED_LOGGERCONTROL_SOURCES
)
389 $(GENERATED_LOGGERAPI_SOURCES
): $(GENERATED_LOGGERAPI_SOURCES
).compiled
390 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
392 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
393 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
395 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: $(GENERATED_MODULES
)
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
)
403 $(GENERATED_LOGGERCONTROL_SOURCES
): $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
404 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
406 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
407 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
409 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: TitanLoggerControl.ttcn
411 ..
/compiler2
/compiler
$(EXESUFFIX
) $(TTCN_COMPILER_FLAGS
) $^
- $?
414 $(PREGENERATED_SOURCES
): $(PREGENERATED_SOURCES
).compiled
415 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
417 $(PREGENERATED_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
418 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
420 $(PREGENERATED_SOURCES
).compiled
:: $(PREGENERATOR_MODULES
)
422 ..
/compiler2
/compiler
$(EXESUFFIX
) -F
$(TTCN_COMPILER_FLAGS
) $^
- $?
425 include ..
/Makefile.genrules
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
)