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
-lcurses
79 SOLARIS8_LIBS
:= -lsocket
-lnsl
-lxml2
-lcurses
80 LINUX_LIBS
:= -lxml2
-lncurses
81 FREEBSD_LIBS
:= -lxml2
-lncurses
82 WIN32_LIBS
:= -lxml2
-lncurses
83 INTERIX_LIBS
:= -lxml2
-lncurses
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 DebuggerUI.
cc \
110 # Keep GENERATED_SOURCES at the beginning. This may speed up parallel builds
111 # by starting early the compilation of the largest files.
112 SOURCES
:= $(GENERATED_SOURCES
) $(STATIC_SOURCES
)
115 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
117 CPPFLAGS
+= -DTITAN_RUNTIME_2
121 ifeq ($(XMLDIR
), default
)
122 # Do not change XMLDIR !
123 ACTUAL_XMLDIR
:= /usr
124 # do not add -L/usr/lib to LDFLAGS, it's redundant
126 ACTUAL_XMLDIR
:= $(XMLDIR
)
127 LDFLAGS
+= -L
$(ACTUAL_XMLDIR
)/lib
129 # This addition to CPPFLAGS is always needed
130 CPPFLAGS
+= -I
$(ACTUAL_XMLDIR
)/include/libxml2
134 ifneq ($(OPENSSL_DIR
), default
)
135 CPPFLAGS
+= -I
$(OPENSSL_DIR
)/include
136 LDFLAGS
+= -L
$(OPENSSL_DIR
)/lib
140 ifeq ($(PLATFORM
),INTERIX
)
141 # to get the "right" iconv, used by libxml2
142 CPPFLAGS
+= -I
/usr
/local
/include
146 OBJECTS
:= $(patsubst %.
cc,%.o
,$(patsubst %.c
,%.o
,$(SOURCES
)))
148 PROFMERGE_OBJECTS
:= ProfMerge_main.o ProfilerTools.profmerge.o \
149 ..
/common
/JSON_Tokenizer.o ..
/common
/memory.o
151 COMMON_OBJECTS
:= $(addprefix ..
/common
/, memory.o pattern_la.o pattern_p.o \
152 config_preproc.o config_preproc_la.o config_preproc_p.tab.o \
153 path.o pattern_uni.o Quadruple.o NetworkHandler.o Path2.o \
154 ModuleVersion.o JSON_Tokenizer.o
)
157 COMMON_OBJECTS
+= ..
/common
/new.o
160 ifeq ($(LICENSING
), yes
)
161 COMMON_OBJECTS
+= ..
/common
/license.o
162 PROFMERGE_OBJECTS
+= ..
/common
/license.o
166 COMMON_OBJECTS
+= $(REGEX_DIR
)/lib
/regex.o
169 ifeq ($(USAGE_STATS
), yes
)
170 COMMON_OBJECTS
+= ..
/common
/usage_stats.o
173 EDITLINE_OBJECTS
:= $(addprefix ..
/mctr2
/editline
/build
/src
/.libs
/, chared.o common.o \
174 emacs.o fgetln.o help.o history.o map.o prompt.o read.o search.o strlcat.o term.o tty.o \
175 vi.o wcsdup.o chartype.o el.o fcns.o filecomplete.o hist.o key.o parse.o readline.o \
176 refresh.o sig.o strlcpy.o tokenizer.o unvis.o vis.o
)
178 LIBRARY_OBJECTS_NOMAIN
:= $(filter-out Single_main.o Parallel_main.o ProfMerge_main.o
, \
179 $(OBJECTS
)) $(COMMON_OBJECTS
) $(EDITLINE_OBJECTS
)
181 TOBECLEANED
:= LoggerPlugin_static.o LoggerPlugin_dynamic.o ProfilerTools.profmerge.o
183 DEPFILES
:= $(patsubst %.
cc,%.d
,$(patsubst %.c
,%.d
,$(SOURCES
)))
187 HEADERS
:= TTCN3.hh Types.h Param_Types.hh Basetype.hh Template.hh RInt.hh \
188 Integer.hh Float.hh Boolean.hh Objid.hh Verdicttype.hh Bitstring.hh \
189 Hexstring.hh Octetstring.hh Charstring.hh Universal_charstring.hh Component.hh \
190 Logger.hh ILoggerPlugin.hh Error.hh Timer.hh Runtime.hh Snapshot.hh Default.hh \
191 Port.hh Event_Handler.hh Struct_of.hh Array.hh Optional.hh Textbuf.hh Encdec.hh \
192 Module_list.hh Parameters.h Addfunc.hh RAW.hh BER.hh TEXT.hh ASN_Null.hh \
193 ASN_Any.hh ASN_External.hh ASN_EmbeddedPDV.hh ASN_CharacterString.hh XER.hh \
194 XmlReader.hh cversion.h TitanLoggerControl.ttcn TitanLoggerApi.xsd Vector.hh \
195 JSON.hh Profiler.hh RefdIndex.hh ProfilerTools.hh Debugger.hh DebugCommands.hh \
197 # Copied during "make install"
200 HEADERS
+= $(REGEX_DIR
)/include/regex.h
203 # # # # Library and shared lib names
204 LIBRARY
:= libttcn3
$(RT2_SUFFIX
).a
205 PARALLEL_LIBRARY
:= libttcn3
$(RT2_SUFFIX
)-parallel.a
206 SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-dynamic.so
207 PARALLEL_SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-parallel-dynamic.so
210 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
211 PROGRAMS
:= ttcn3_profmerge
$(EXESUFFIX
)
214 TARGETS
:= $(LIBRARY
) $(PARALLEL_LIBRARY
)
216 # Determine whether to build shared libraries:
217 DYNAMIC_LINKING
:= yes
218 ifeq ($(PLATFORM
), WIN32
)
219 LDFLAGS
+= -Xlinker
--out-implib
-Xlinker
$(basename $@
).a
221 ifeq ($(PLATFORM
), INTERIX
)
222 DYNAMIC_LINKING
:= no
225 ifeq ($(DYNAMIC_LINKING
), yes
)
226 TARGETS
+= $(SHAREDLIB
) $(PARALLEL_SHAREDLIB
)
227 ifeq ($(PLATFORM
), WIN32
)
228 # import libraries are generated as a side-effect; need to be cleaned
229 TOBECLEANED
+= $(SHAREDLIB
:.so
=.a
) $(PARALLEL_SHAREDLIB
:.so
=.a
)
233 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
234 TARGETS
+= cversion.h
237 # Only for testing the consistency of libraries:
238 TEST_PROGRAMS
:= single
$(RT2_SUFFIX
)$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)$(EXESUFFIX
)
239 ifeq ($(DYNAMIC_LINKING
), yes
)
240 TEST_PROGRAMS
+= single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
)
242 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
243 TEST_PROGRAMS
+= gccversion
$(EXESUFFIX
)
247 TOBECLEANED
+= $(TEST_PROGRAMS
) cversion.h
$(GENERATED_MODULES
)
250 CPPFLAGS
+= -I
$(REGEX_DIR
)/include
255 COMMON_DIR
:= $(SRCDIR
)/common
257 COMMON_DIR
:= ..
/common
260 CPPFLAGS
+= -I
$(COMMON_DIR
)
262 MANPAGES
:= ttcn3_profmerge
.1
264 # # # # # # # # # targets
265 all: $(TARGETS
) $(PROGRAMS
) $(TEST_PROGRAMS
)
268 # Verify that the executables are runnable.
269 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
272 $(GENERATED_MODULES
): $(SCHEMAS
) ..
/xsdconvert
/xsd2ttcn
$(EXESUFFIX
)
273 ..
/xsdconvert
/xsd2ttcn
$(EXESUFFIX
) -p
$<
274 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_
275 mv TitanLoggerApi.ttcn_ TitanLoggerApi.ttcn
277 install: $(TARGETS
) $(PROGRAMS
)
278 ifeq ($(DYNAMIC_LINKING
), yes
)
280 $(STRIP
) $(SHAREDLIB
) $(PARALLEL_SHAREDLIB
)
284 cp
$(TARGETS
) $(LIBDIR
)
285 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
287 cp
$(HEADERS
) $(INCDIR
)
289 cp
$(PROGRAMS
) $(BINDIR
)
290 mkdir
-p
$(MANDIR
)/man1
291 cp
$(MANPAGES
) $(MANDIR
)/man1
292 ifeq ($(DYNAMIC_LINKING
), yes
)
293 ifneq ($(OPENSSL_DIR
), default
)
294 (cd
$(OPENSSL_DIR
)/lib
&& tar -cf
- libcrypto.so
*) |\
295 (cd
$(LIBDIR
) && tar -xf
-)
297 ifneq ($(XMLDIR
), default
)
298 (cd
$(XMLDIR
)/lib
&& tar -cf
- libxml2.so
*) |\
299 (cd
$(LIBDIR
) && tar -xf
-)
303 mkdir
-p
$(INCDIR
)/$(APIDIR
)
304 cp
$(APIDIR
)/TitanLoggerApi
*.hh
$(INCDIR
)/$(APIDIR
)
305 cp
$(APIDIR
)/PreGenRecordOf.hh
$(INCDIR
)/$(APIDIR
)
308 single
$(RT2_SUFFIX
)$(EXESUFFIX
): $(LIBRARY
)
309 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
311 single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Single_main.o
$(SHAREDLIB
)
312 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
314 parallel
$(RT2_SUFFIX
)$(EXESUFFIX
): $(PARALLEL_LIBRARY
)
315 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
317 parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Parallel_main.o
$(PARALLEL_SHAREDLIB
)
318 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
320 ttcn3_profmerge
$(EXESUFFIX
): $(PROFMERGE_OBJECTS
)
321 $(CXX
) $(LDFLAGS
) -o
$@
$^
$(LICENSE_LIBS
) $($(PLATFORM
)_LIBS
)
323 # # # # static link libraries
324 $(LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Single_main.o
327 $(PARALLEL_LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Parallel_main.o
330 # # # # dynamic link libraries
332 $(SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Single_main.o
333 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
335 $(PARALLEL_SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Parallel_main.o
336 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
338 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
339 # core2 -> core dependency, core2 does not run flex and bison
340 # core must be made before core2
342 %.
lex.
cc %.
lex.hh
: %.l
343 $(FLEX
) $(FLEXFLAGS
) -P
$(subst .l
,_
,$<) --header-file
=$(subst .l
,.
lex.hh
,$<) \
344 -o
$(subst .l
,.
lex.
cc,$<) $<
346 %.tab.
cc %.tab.hh
: %.y
%.
lex.hh
347 $(BISON
) $(BISONFLAGS
) -o
$(subst .y
,.tab.
cc,$<) -p
$(subst .y
,_
,$<) $<
349 cversion.h
: gccversion
$(EXESUFFIX
)
351 if
[ -f
$@
] ; then \
352 if diff
$@.tmp
$@
>/dev
/null
; then \
361 gccversion
$(EXESUFFIX
): gccversion.c ..
/Makefile.cfg
362 # The line before the backslash is $(LINK.c), except it uses CCFLAGS
363 # instead of CFLAGS. TARGET_ARCH is not used by Titan.
364 $(CC
) $(CCFLAGS
) $(CPPFLAGS
) $(LDFLAGS
) $(TARGET_ARCH
) \
365 $< $(LOADLIBES
) $(LDLIBS
) -o
$@
368 #LegacyLogger.d: cversion.h
369 $(DEPFILES
): cversion.h
371 #TitanLoggerControlImpl.d Single_main.d Runtime.d Port.d LegacyLogger.d \
372 #LoggerPlugin.d LoggerPluginManager.d Error.d Default.d Communication.d \
373 #Addfunc.d: $(GENERATED_LOGGERAPI_SOURCES:.cc=.cc)
375 TitanLoggerControlImpl.d
: $(GENERATED_LOGGERCONTROL_SOURCES
)
378 $(GENERATED_LOGGERAPI_SOURCES
): $(GENERATED_LOGGERAPI_SOURCES
).compiled
379 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
381 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
382 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
384 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: $(GENERATED_MODULES
)
386 # The input (TitanLoggerApi.ttcn) is a generated file and might get corrupted
387 # by parallel execution of xsd2ttcn. Get it out of the way but save it for later.
388 if ..
/compiler2
/compiler
$(EXESUFFIX
) $(TTCN_COMPILER_FLAGS
) $^
- $?
; then
:; else mv
$?
$?.
$$$$.bad
; exit
1; fi
389 perl
$(ABS_SRC
)/..
/core
/simplify.pl
$(GENERATED_LOGGERAPI_SOURCES
:.
cc=.hh
) > $(GENERATED_LOGGERAPI_SOURCES
:.
cc=Simple.hh
)
392 $(GENERATED_LOGGERCONTROL_SOURCES
): $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
393 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
395 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
396 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
398 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: TitanLoggerControl.ttcn
400 ..
/compiler2
/compiler
$(EXESUFFIX
) $(TTCN_COMPILER_FLAGS
) $^
- $?
403 $(PREGENERATED_SOURCES
): $(PREGENERATED_SOURCES
).compiled
404 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
406 $(PREGENERATED_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
407 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
409 $(PREGENERATED_SOURCES
).compiled
:: $(PREGENERATOR_MODULES
)
411 ..
/compiler2
/compiler
$(EXESUFFIX
) -F
$(TTCN_COMPILER_FLAGS
) $^
- $?
414 include ..
/Makefile.genrules
416 # These are not in STATIC_SOURCES, so vpath is not created for them
417 vpath LoggerPlugin_dynamic.
cc $(ABS_SRC
)
418 vpath LoggerPlugin_static.
cc $(ABS_SRC
)