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
10 include $(TOP
)/Makefile.cfg
12 SCHEMAS
:= TitanLoggerApi.xsd
13 # Generated from `TitanLoggerApi.xsd'.
14 GENERATED_MODULES
:= TitanLoggerApi.ttcn
16 GENERATED_LOGGERAPI_SOURCES
:= $(GENERATED_MODULES
:.ttcn
=.
cc)
17 GENERATED_LOGGERCONTROL_SOURCES
:= TitanLoggerControl.
cc
19 ORIGINATORS
:= TitanLoggerApi.xsd TitanLoggerApi.ttcn TitanLoggerControl.ttcn gccversion.c \
20 config_process.l config_process.y
22 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
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)
34 GENERATED_LOGGERAPI_SOURCES
:= $(addprefix $(APIDIR
)/,$(GENERATED_LOGGERAPI_SOURCES
))
35 GENERATED_LOGGERCONTROL_SOURCES
:= $(addprefix $(APIDIR
)/,$(GENERATED_LOGGERCONTROL_SOURCES
))
37 GENERATED_SOURCES
:= $(GENERATED_LOGGERAPI_SOURCES
) $(GENERATED_LOGGERCONTROL_SOURCES
) config_process.
lex.
cc config_process.tab.
cc
38 GENERATED_HEADERS
:= $(GENERATED_LOGGERAPI_SOURCES
:.
cc=.hh
) $(GENERATED_LOGGERCONTROL_SOURCES
:.
cc=.hh
) config_process.tab.hh config_process.
lex.hh
39 GENERATED_HEADERS
+= $(GENERATED_LOGGERAPI_SOURCES
:.
cc=Simple.hh
)
40 GENERATED_OTHERS
:= $(GENERATED_LOGGERAPI_SOURCES
).compiled
$(GENERATED_LOGGERCONTROL_SOURCES
).compiled
41 GENERATED_OTHERS
+= config_process.output
lex.backup
43 TTCN_COMPILER_FLAGS
:=
44 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
45 TTCN_COMPILER_FLAGS
+= -R
48 TTCN_COMPILER_FLAGS
+= -o
$(APIDIR
)
50 # -I. is needed because TitanLoggerApi.hh (generated) does #include <TTCN3.hh>
51 CPPFLAGS
+= -I.
-I
$(APIDIR
)
53 SOLARIS_LIBS
:= -lsocket
-lnsl
-lxml2
54 SOLARIS8_LIBS
:= -lsocket
-lnsl
-lxml2
56 FREEBSD_LIBS
:= -lxml2
58 INTERIX_LIBS
:= -lxml2
60 ifeq ($(USAGE_STATS
), yes
)
61 SOLARIS_LIBS
+= -lresolv
62 SOLARIS8_LIBS
+= -lresolv
63 LINUX_LIBS
+= -lpthread
-lrt
66 # No need for `-Wl,-export-dynamic' until we're using shared objects. All
67 # `dl*()' related stuff is disabled for now.
68 ifeq ($(DYNAMIC_LOGGER_PLUGINS
), yes
)
69 $(PLATFORM
)_LIBS
+= -ldl
72 # Note: RT2_SOURCES is set in core2/Makefile
73 STATIC_SOURCES
:= Addfunc.
cc Array.
cc ASN_Any.
cc ASN_CharacterString.
cc \
74 ASN_EmbeddedPDV.
cc ASN_External.
cc ASN_Null.
cc Basetype.
cc BER.
cc Bitstring.
cc \
75 Boolean.
cc Charstring.
cc Communication.
cc Component.
cc Default.
cc Encdec.
cc \
76 Error.
cc Float.
cc Hexstring.
cc RInt.
cc Integer.
cc Logger.
cc LoggerPlugin.
cc \
77 LoggerPluginManager.
cc LegacyLogger.
cc LoggingBits.
cc \
78 Module_list.
cc Objid.
cc Octetstring.
cc Parallel_main.
cc Port.
cc RAW.
cc \
79 Runtime.
cc Single_main.
cc Snapshot.
cc Struct_of.
cc Template.
cc TEXT.
cc \
80 Textbuf.
cc Timer.
cc Param_Types.
cc Universal_charstring.
cc \
81 Verdicttype.
cc XER.
cc XmlReader.
cc TitanLoggerControlImpl.
cc TCov.
cc JSON.
cc \
82 Profiler.
cc $(RT2_SOURCES
)
84 # Keep GENERATED_SOURCES at the beginning. This may speed up parallel builds
85 # by starting early the compilation of the largest files.
86 SOURCES
:= $(GENERATED_SOURCES
) $(STATIC_SOURCES
)
89 ifeq ($(FUNCTION_TEST_RUNTIME
), yes
)
91 CPPFLAGS
+= -DTITAN_RUNTIME_2
95 ifeq ($(XMLDIR
), default
)
96 # Do not change XMLDIR !
98 # do not add -L/usr/lib to LDFLAGS, it's redundant
100 ACTUAL_XMLDIR
:= $(XMLDIR
)
101 LDFLAGS
+= -L
$(ACTUAL_XMLDIR
)/lib
103 # This addition to CPPFLAGS is always needed
104 CPPFLAGS
+= -I
$(ACTUAL_XMLDIR
)/include/libxml2
108 ifneq ($(OPENSSL_DIR
), default
)
109 CPPFLAGS
+= -I
$(OPENSSL_DIR
)/include
110 LDFLAGS
+= -L
$(OPENSSL_DIR
)/lib
114 ifeq ($(PLATFORM
),INTERIX
)
115 # to get the "right" iconv, used by libxml2
116 CPPFLAGS
+= -I
/usr
/local
/include
120 OBJECTS
:= $(patsubst %.
cc,%.o
,$(patsubst %.c
,%.o
,$(SOURCES
)))
122 COMMON_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
)
128 COMMON_OBJECTS
+= ..
/common
/new.o
131 ifeq ($(LICENSING
), yes
)
132 COMMON_OBJECTS
+= ..
/common
/license.o
136 COMMON_OBJECTS
+= $(REGEX_DIR
)/lib
/regex.o
139 ifeq ($(USAGE_STATS
), yes
)
140 COMMON_OBJECTS
+= ..
/common
/usage_stats.o
143 LIBRARY_OBJECTS_NOMAIN
:= $(filter-out Single_main.o Parallel_main.o
, \
144 $(OBJECTS
)) $(COMMON_OBJECTS
)
146 TOBECLEANED
:= LoggerPlugin_static.o LoggerPlugin_dynamic.o
148 DEPFILES
:= $(patsubst %.
cc,%.d
,$(patsubst %.c
,%.d
,$(SOURCES
)))
152 HEADERS
:= TTCN3.hh Types.h Param_Types.hh Basetype.hh Template.hh RInt.hh \
153 Integer.hh Float.hh Boolean.hh Objid.hh Verdicttype.hh Bitstring.hh \
154 Hexstring.hh Octetstring.hh Charstring.hh Universal_charstring.hh Component.hh \
155 Logger.hh ILoggerPlugin.hh Error.hh Timer.hh Runtime.hh Snapshot.hh Default.hh \
156 Port.hh Event_Handler.hh Struct_of.hh Array.hh Optional.hh Textbuf.hh Encdec.hh \
157 Module_list.hh Parameters.h Addfunc.hh RAW.hh BER.hh TEXT.hh ASN_Null.hh \
158 ASN_Any.hh ASN_External.hh ASN_EmbeddedPDV.hh ASN_CharacterString.hh XER.hh \
159 XmlReader.hh cversion.h TitanLoggerControl.ttcn TitanLoggerApi.xsd Vector.hh \
161 # Copied during "make install"
164 HEADERS
+= $(REGEX_DIR
)/include/regex.h
167 # # # # Library and shared lib names
168 LIBRARY
:= libttcn3
$(RT2_SUFFIX
).a
169 PARALLEL_LIBRARY
:= libttcn3
$(RT2_SUFFIX
)-parallel.a
170 SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-dynamic.so
171 PARALLEL_SHAREDLIB
:= libttcn3
$(RT2_SUFFIX
)-parallel-dynamic.so
173 TARGETS
:= $(LIBRARY
) $(PARALLEL_LIBRARY
)
175 # Determine whether to build shared libraries:
176 DYNAMIC_LINKING
:= yes
177 ifeq ($(PLATFORM
), WIN32
)
178 LDFLAGS
+= -Xlinker
--out-implib
-Xlinker
$(basename $@
).a
180 ifeq ($(PLATFORM
), INTERIX
)
181 DYNAMIC_LINKING
:= no
184 ifeq ($(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
)
192 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
193 TARGETS
+= cversion.h
196 # Only for testing the consistency of libraries:
199 PROGRAMS
:= single
$(RT2_SUFFIX
)$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)$(EXESUFFIX
)
200 ifeq ($(DYNAMIC_LINKING
), yes
)
201 PROGRAMS
+= single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
) parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
)
203 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
204 PROGRAMS
+= gccversion
$(EXESUFFIX
)
208 TOBECLEANED
+= $(PROGRAMS
) cversion.h
$(GENERATED_MODULES
)
211 CPPFLAGS
+= -I
$(REGEX_DIR
)/include
216 COMMON_DIR
:= $(SRCDIR
)/common
218 COMMON_DIR
:= ..
/common
221 CPPFLAGS
+= -I
$(COMMON_DIR
)
223 # # # # # # # # # targets
224 all: $(TARGETS
) $(PROGRAMS
)
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
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
237 ifeq ($(DYNAMIC_LINKING
), yes
)
239 $(STRIP
) $(SHAREDLIB
) $(PARALLEL_SHAREDLIB
)
243 cp
$(TARGETS
) $(LIBDIR
)
244 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
246 cp
$(HEADERS
) $(INCDIR
)
247 ifeq ($(DYNAMIC_LINKING
), yes
)
248 ifneq ($(OPENSSL_DIR
), default
)
249 (cd
$(OPENSSL_DIR
)/lib
&& tar -cf
- libcrypto.so
*) |\
250 (cd
$(LIBDIR
) && tar -xf
-)
252 ifneq ($(XMLDIR
), default
)
253 (cd
$(XMLDIR
)/lib
&& tar -cf
- libxml2.so
*) |\
254 (cd
$(LIBDIR
) && tar -xf
-)
258 mkdir
-p
$(INCDIR
)/$(APIDIR
)
259 cp
$(APIDIR
)/TitanLoggerApi
*.hh
$(INCDIR
)/$(APIDIR
)
262 single
$(RT2_SUFFIX
)$(EXESUFFIX
): $(LIBRARY
)
263 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
265 single
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Single_main.o
$(SHAREDLIB
)
266 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
268 parallel
$(RT2_SUFFIX
)$(EXESUFFIX
): $(PARALLEL_LIBRARY
)
269 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
271 parallel
$(RT2_SUFFIX
)-dynamic
$(EXESUFFIX
): Parallel_main.o
$(PARALLEL_SHAREDLIB
)
272 $(CXX
) $(LDFLAGS
) -o
$@
$^
-lcrypto
$($(PLATFORM
)_LIBS
)
274 # # # # static link libraries
275 $(LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Single_main.o
278 $(PARALLEL_LIBRARY
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_static.o Parallel_main.o
281 # # # # dynamic link libraries
283 $(SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Single_main.o
284 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
286 $(PARALLEL_SHAREDLIB
): $(LIBRARY_OBJECTS_NOMAIN
) LoggerPlugin_dynamic.o Parallel_main.o
287 $(LD
) $(LDFLAGS
) -o
$@
$^
-L
$(OPENSSL_DIR
)/lib
-lcrypto
$($(PLATFORM
)_LIBS
)
289 ifneq ($(FUNCTION_TEST_RUNTIME
), yes
)
290 # core2 -> core dependency, core2 does not run flex and bison
291 # core must be made before core2
293 %.
lex.
cc %.
lex.hh
: %.l
294 $(FLEX
) $(FLEXFLAGS
) -P
$(subst .l
,_
,$<) --header-file
=$(subst .l
,.
lex.hh
,$<) \
295 -o
$(subst .l
,.
lex.
cc,$<) $<
297 %.tab.
cc %.tab.hh
: %.y
%.
lex.hh
298 $(BISON
) $(BISONFLAGS
) -o
$(subst .y
,.tab.
cc,$<) -p
$(subst .y
,_
,$<) $<
300 cversion.h
: gccversion
$(EXESUFFIX
)
302 if
[ -f
$@
] ; then \
303 if diff
$@.tmp
$@
>/dev
/null
; then \
312 gccversion
$(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
$@
319 #LegacyLogger.d: cversion.h
320 $(DEPFILES
): cversion.h
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)
326 TitanLoggerControlImpl.d
: $(GENERATED_LOGGERCONTROL_SOURCES
)
329 $(GENERATED_LOGGERAPI_SOURCES
): $(GENERATED_LOGGERAPI_SOURCES
).compiled
330 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
332 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
333 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
335 $(GENERATED_LOGGERAPI_SOURCES
).compiled
:: $(GENERATED_MODULES
)
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
)
343 $(GENERATED_LOGGERCONTROL_SOURCES
): $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
344 @if
[ ! -f
$@
]; then
$(RM
) $<; $(MAKE
) $<; fi
346 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: ..
/compiler2
/compiler
$(EXESUFFIX
)
347 @if
[ -f
$@
]; then
$(RM
) $@
; $(MAKE
) $@
; fi
349 $(GENERATED_LOGGERCONTROL_SOURCES
).compiled
:: TitanLoggerControl.ttcn
351 ..
/compiler2
/compiler
$(EXESUFFIX
) $(TTCN_COMPILER_FLAGS
) $^
- $?
354 include ..
/Makefile.genrules
356 # These are not in STATIC_SOURCES, so vpath is not created for them
357 vpath LoggerPlugin_dynamic.
cc $(ABS_SRC
)
358 vpath LoggerPlugin_static.
cc $(ABS_SRC
)