ea30acca2e985df3419120a4d58f13be225d38ff
[demo.git] / vnfs / VES5.0 / evel / evel-library / bldjobs / Makefile
1 #******************************************************************************
2 # The ECOMP Vendor Event Listener (EVEL) API client library Makefile.
3 #
4 # Make the various targets associated with housekeeping functions as part of
5 # Event Reporting library.
6 #
7 # NOTE: because Makefiles assign special meaning to the TAB character you
8 #       will need to set tabstops to 2 characters for the layout to look OK.
9 #
10 # License
11 # -------
12 #
13 # Copyright(c) <2016>, AT&T Intellectual Property.  All other rights reserved.
14 #
15 # Redistribution and use in source and binary forms, with or without
16 # modification, are permitted provided that the following conditions are met:
17 #
18 # 1. Redistributions of source code must retain the above copyright notice,
19 #    this list of conditions and the following disclaimer.
20 # 2. Redistributions in binary form must reproduce the above copyright notice,
21 #    this list of conditions and the following disclaimer in the documentation
22 #    and/or other materials provided with the distribution.
23 # 3. All advertising materials mentioning features or use of this software
24 #    must display the following acknowledgement:  This product includes
25 #    software developed by the AT&T.
26 # 4. Neither the name of AT&T nor the names of its contributors may be used to
27 #    endorse or promote products derived from this software without specific
28 #    prior written permission.
29 #
30 # THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
31 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33 # DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
34 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
39 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 #******************************************************************************
41
42 ARCH=$(shell getconf LONG_BIT)
43 CODE_ROOT=$(CURDIR)/..
44 EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
45 EVELDEMO_ROOT=$(CODE_ROOT)/code/evel_demo
46 EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
47 EVELTRAINING_ROOT=$(CODE_ROOT)/code/evel_training
48 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
49 OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(ARCH)
50 DOCS_ROOT=$(CODE_ROOT)/docs
51 CC=gcc
52 SCP=scp
53 SSH=ssh
54 JAVA=java
55 DOXYGEN=doxygen
56 PLANTUML=/usr/local/bin/plantuml.jar
57 PLANTFLAGS=-tsvg
58
59 #******************************************************************************
60 # Standard compiler flags.                                                    *
61 #******************************************************************************
62 CPPFLAGS=-I $(EVELLIB_ROOT)
63 CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
64 LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
65
66 #******************************************************************************
67 # The testbed is a VM instance where we can install the EVEL example under    *
68 # CentOS.                                                                     *
69 #******************************************************************************
70 VNF_TESTBED_CENTOS=172.18.152.180
71 VNF_TESTBED_CENTOS_USER=centos
72 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
73 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
74
75 #******************************************************************************
76 # The testbed is a VM instance where we can install the EVEL example under    *
77 # Ubuntu.                                                                     *
78 #******************************************************************************
79 VNF_TESTBED_UBUNTU=172.18.152.179
80 VNF_TESTBED_UBUNTU_USER=ubuntu
81 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
82 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
83
84 #******************************************************************************
85 # The test-collector is where we can send events to be consumed and checked   *
86 # during tests.                                                               *
87 #******************************************************************************
88 VNF_COLLECTOR_HOST=172.18.152.185
89 VNF_COLLECTOR_PORT=30000
90
91 #******************************************************************************
92 # A documentation server used by the team where we can install documentation. *
93 #******************************************************************************
94 TEAM_DOCS_SERVER=covlx8
95 DOCS_SERVER_PATH=/var/www/html/evel
96
97 #******************************************************************************
98 # Implicit rule to make dependency files.  Recipe copied from Gnu docs at:    *
99 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html                                      *
100 #******************************************************************************
101 %.d: %.c
102         @echo Making dependency file $(notdir $@) for $(notdir $<)
103         @set -e; rm -f $@; \
104          $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
105          sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
106          rm -f $@.$$$$
107
108 #******************************************************************************
109 # Implicit rule to make object files.                                         *
110 #******************************************************************************
111 %.o: %.c
112         @echo Making $(notdir $@) from $(notdir $<)
113         @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
114
115 #******************************************************************************
116 # Implicit rule to make diagram files using PlantUML.                         *
117 #******************************************************************************
118 %.svg : %.plantuml
119         @echo Making $(notdir $@)
120         $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
121
122 all:     api_library \
123          evel_library_demo \
124          evel_library_training
125
126 clean:   api_library_clean \
127          evel_unit_clean \
128          evel_library_demo_clean \
129          evel_library_training_clean \
130          docs_clean
131
132 install: evel_install_centos evel_install_ubuntu
133
134 test: evel_test_centos evel_test_ubuntu
135
136 docs:    docs_clean doxygen_docs
137
138
139 #******************************************************************************
140 # Build the EVEL libraries.                                                   *
141 #******************************************************************************
142 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
143             $(EVELLIB_ROOT)/metadata.c \
144             $(EVELLIB_ROOT)/ring_buffer.c \
145             $(EVELLIB_ROOT)/double_list.c \
146             $(EVELLIB_ROOT)/hashtable.c \
147             $(EVELLIB_ROOT)/evel_event.c \
148             $(EVELLIB_ROOT)/evel_fault.c \
149             $(EVELLIB_ROOT)/evel_mobile_flow.c \
150             $(EVELLIB_ROOT)/evel_option.c \
151             $(EVELLIB_ROOT)/evel_jsonobject.c \
152             $(EVELLIB_ROOT)/evel_other.c \
153             $(EVELLIB_ROOT)/evel_json_buffer.c \
154             $(EVELLIB_ROOT)/evel_reporting_measurement.c \
155             $(EVELLIB_ROOT)/evel_heartbeat_fields.c \
156             $(EVELLIB_ROOT)/evel_sipsignaling.c \
157             $(EVELLIB_ROOT)/evel_scaling_measurement.c \
158             $(EVELLIB_ROOT)/evel_state_change.c \
159             $(EVELLIB_ROOT)/evel_strings.c \
160             $(EVELLIB_ROOT)/evel_syslog.c \
161             $(EVELLIB_ROOT)/evel_throttle.c \
162             $(EVELLIB_ROOT)/evel_internal_event.c \
163             $(EVELLIB_ROOT)/evel_event_mgr.c \
164             $(EVELLIB_ROOT)/evel_voicequality.c \
165             $(EVELLIB_ROOT)/evel_logging.c \
166             $(EVELLIB_ROOT)/jsmn.c
167 API_OBJECTS=$(API_SOURCES:.c=.o)
168 -include $(API_SOURCES:.c=.d)
169
170 api_library: $(LIBS_DIR)/libevel.so \
171              $(LIBS_DIR)/libevel.a
172
173 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
174         @echo   Linking API Static Library
175         @$(CC) $(LIBCFLAGS) -o $@ $+
176
177 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
178         @echo   Linking API Shared Library
179         @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
180
181 api_library_clean:
182         @echo   Cleaning API Library
183         @$(RM) $(LIBS_DIR)/libevel.so
184         @$(RM) $(API_OBJECTS)
185         @$(RM) $(EVELLIB_ROOT)/*.d
186
187 #******************************************************************************
188 # Build the EVEL library demo.                                                *
189 #******************************************************************************
190 DEMO_SOURCES=$(EVELDEMO_ROOT)/evel_demo.c $(EVELDEMO_ROOT)/evel_test_control.c
191 DEMO_OBJECTS=$(DEMO_SOURCES:.c=.o)
192 -include $(DEMO_SOURCES:.c=.d)
193
194 evel_library_demo: api_library \
195                    $(OUTPUT_DIR)/evel_demo
196
197 $(OUTPUT_DIR)/evel_demo: $(DEMO_OBJECTS)
198         @echo   Linking EVEL demo
199         @$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
200                           -L $(LIBS_DIR) \
201                           $(DEMO_OBJECTS) \
202                           -level \
203                           -lpthread \
204                           -lcurl
205
206 evel_library_demo_clean:
207         @echo   Cleaning EVEL demo
208         @$(RM) $(OUTPUT_DIR)/evel_demo
209         @$(RM) $(API_OBJECTS)
210         @$(RM) $(DEMO_OBJECTS)
211         @$(RM) $(EVELLIB_ROOT)/*.d
212         @$(RM) $(EVELDEMO_ROOT)/*.d
213
214 #******************************************************************************
215 # Build the EVEL library unit test.                                           *
216 #******************************************************************************
217 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
218 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
219 -include $(UNIT_SOURCES:.c=.d)
220
221 evel_unit: api_library \
222            $(OUTPUT_DIR)/evel_unit
223
224 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
225         @echo   Linking EVEL unit test
226         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
227                           -L $(LIBS_DIR) \
228                           $(UNIT_OBJECTS) \
229                           -level \
230                           -lpthread \
231                           -lcurl
232
233 evel_unit_clean:
234         @echo   Cleaning EVEL unit test
235         @$(RM) $(OUTPUT_DIR)/evel_unit
236         @$(RM) $(API_OBJECTS)
237         @$(RM) $(UNIT_OBJECTS)
238         @$(RM) $(EVELLIB_ROOT)/*.d
239         @$(RM) $(EVELUNIT_ROOT)/*.d
240
241 #******************************************************************************
242 # Build the EVEL library training files.                                      *
243 #******************************************************************************
244 evel_library_training:
245         @echo   Making EVEL training
246         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/01-hello-world
247         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/02-library-link
248         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/03-include-header
249         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/04-basic-lifecycle
250         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/05-raise-event
251         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/06-username-password
252         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/07-raise-measurement
253         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/08-raise-mobile-flow
254         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/09-raise-state-change
255         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/10-raise-syslog
256         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/11-raise-other
257         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/12-suppress-fault-fields
258         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/13-suppress-fault-pairs
259         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/14-measurement-interval
260         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/15-raise-signaling
261         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/16-raise-service
262
263 evel_library_training_clean:
264         @echo   Cleaning EVEL training
265         @$(RM) $(EVELTRAINING_ROOT)/*/hello_evel_world
266
267 #******************************************************************************
268 # Copy the EVEL demo onto the CentOS testbed as a package and build it.       *
269 #******************************************************************************
270 evel_install_centos: delivery
271         @echo Installing EVEL library on CentOS testbed...
272         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
273           rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
274           mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
275           mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
276         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
277            $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
278         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
279           tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
280                  --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
281         @echo Making EVEL library on testbed...
282         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
283            cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
284            make clean all
285
286 #******************************************************************************
287 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it.       *
288 #******************************************************************************
289 evel_install_ubuntu: delivery
290         @echo Installing EVEL library on Ubuntu testbed...
291         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
292           rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
293           mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
294           mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
295         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
296            $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
297         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
298           tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
299                  --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
300         @echo Making EVEL library on testbed...
301         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
302            cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
303            make clean all
304
305 #******************************************************************************
306 # Make sure that the Centos platform is up to date and then run the software  *
307 # against a test collector.  Validating correct operation is not presently    *
308 # automated.                                                                  *
309 #******************************************************************************
310 evel_test_centos: evel_install_centos
311         @echo Testing EVEL Demo application on CentOS...
312         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
313            source .bash_profile \; \
314            $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
315                                                  --fqdn $(VNF_COLLECTOR_HOST) \
316                                                  --port $(VNF_COLLECTOR_PORT) \
317                                                  --verbose
318
319 #******************************************************************************
320 # Make sure that the Ubuntu platform is up to date and then run the software  *
321 # against a test collector.  Validating correct operation is not presently    *
322 # automated.                                                                  *
323 #******************************************************************************
324 evel_test_ubuntu: evel_install_ubuntu
325         @echo Testing EVEL Demo application on Ubuntu...
326         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
327            source .profile \; \
328            $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
329                                                  --fqdn $(VNF_COLLECTOR_HOST) \
330                                                  --port $(VNF_COLLECTOR_PORT) \
331                                                  --verbose
332
333 #******************************************************************************
334 # Making a clean delivery has some very specific dependencies which are order *
335 # dependent, so we recursively make a series of targets to do a clean  build  *
336 # of all of the required deliverables and then finally zipping up.            *
337 #******************************************************************************
338 delivery:
339         @$(MAKE) -s delivery_baseline
340         @$(MAKE) -s package
341
342 delivery_baseline:      docs
343
344 #******************************************************************************
345 # Package the software for delivery.                                          *
346 #******************************************************************************
347 package: api_library_clean \
348          evel_unit_clean \
349          evel_library_demo_clean \
350          evel_library_training_clean \
351          docs
352         @echo Packaging the software for delivery
353         @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz  bldjobs \
354                                                       code \
355                                                       docs \
356                                                       libs/x86_64/README \
357                                                       output/x86_64/README \
358                                                       readme.md
359
360 package_clean:
361         @echo Clean delivery packages
362         @$(RM) $(OUTPUTDIR)/*.tgz
363
364 #******************************************************************************
365 # Create project documentation.                                               *
366 #******************************************************************************
367 doxygen_docs:
368         @echo Making Doxygen documentation
369         @$(DOXYGEN) Doxyfile
370
371 pdf_docs: doxygen_docs  # This target is slightly broken.  Run manually.
372         @echo   Making PDF...
373         @$(MAKE) -C $(DOCS_ROOT)/source/evel/latex
374
375 docs_clean:
376         @echo Cleaning docs...
377         @$(RM) $(DOCS_ROOT)/*.svg
378         @$(RM) -r $(DOCS_ROOT)/source/evel/html \
379                   $(DOCS_ROOT)/source/evel/latex
380
381 docs_install: docs
382         @echo Copying docs to team web-server...
383         @$(SCP) -r $(DOCS_ROOT)/source/evel/html/* \
384                   root@$(TEAM_DOCS_SERVER):$(DOCS_SERVER_PATH)