vfirewall usecase for arm64
[demo.git] / vnfs / VES5.0 / evel / evel-library / bldjobs / Makefile
1 #*************************************************************************//**
2 #*
3 #* Copyright © 2017 AT&T Intellectual Property. All rights reserved.
4 #*
5 #* Licensed under the Apache License, Version 2.0 (the "License");
6 #* you may not use this file except in compliance with the License.
7 #* You may obtain a copy of the License at
8 #*        http://www.apache.org/licenses/LICENSE-2.0
9 #*
10 #* Unless required by applicable law or agreed to in writing, software
11 #* distributed under the License is distributed on an "AS IS" BASIS,
12 #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 #* See the License for the specific language governing permissions and 
14 #* limitations under the License.
15 #*
16 #****************************************************************************/
17
18 #******************************************************************************
19 # The ECOMP Vendor Event Listener (EVEL) API client library Makefile.
20 #
21 # Make the various targets associated with housekeeping functions as part of
22 # Event Reporting library.
23 #
24 # NOTE: because Makefiles assign special meaning to the TAB character you
25 #       will need to set tabstops to 2 characters for the layout to look OK.
26 #****************************************************************************/
27
28 ARCH=$(shell getconf LONG_BIT)
29 MACHINE_ARCH=$(shell uname -m)
30 CODE_ROOT=$(CURDIR)/..
31 EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
32 EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
33 EVELTRAINING_ROOT=$(CODE_ROOT)/code
34 LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
35 OUTPUT_DIR=$(CODE_ROOT)/output/$(MACHINE_ARCH)
36 DOCS_ROOT=$(CODE_ROOT)/docs
37 CC=gcc
38 SCP=scp
39 SSH=ssh
40 JAVA=java
41 DOXYGEN=doxygen
42 PLANTUML=/usr/local/bin/plantuml.jar
43 PLANTFLAGS=-tsvg
44
45 #******************************************************************************
46 # Standard compiler flags.                                                    *
47 #******************************************************************************
48 CPPFLAGS=-I $(EVELLIB_ROOT)
49 ifeq ($(MACHINE_ARCH), aarch64)
50         CFLAGS=-Wall -Wextra -march=native -g -fPIC
51         LIBCFLAGS=-Wall -Wextra -march=native -g -shared -fPIC
52 else
53         CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
54         LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
55 endif
56
57 #******************************************************************************
58 # The testbed is a VM instance where we can install the EVEL example under    *
59 # CentOS.                                                                     *
60 #******************************************************************************
61 VNF_TESTBED_CENTOS=172.18.152.180
62 VNF_TESTBED_CENTOS_USER=centos
63 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
64 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
65
66 #******************************************************************************
67 # The testbed is a VM instance where we can install the EVEL example under    *
68 # Ubuntu.                                                                     *
69 #******************************************************************************
70 VNF_TESTBED_UBUNTU=172.18.152.179
71 VNF_TESTBED_UBUNTU_USER=ubuntu
72 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
73 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
74
75 #******************************************************************************
76 # The test-collector is where we can send events to be consumed and checked   *
77 # during tests.                                                               *
78 #******************************************************************************
79 VNF_COLLECTOR_HOST=172.18.152.185
80 VNF_COLLECTOR_PORT=30000
81
82 #******************************************************************************
83 # A documentation server used by the team where we can install documentation. *
84 #******************************************************************************
85 TEAM_DOCS_SERVER=covlx8
86 DOCS_SERVER_PATH=/var/www/html/evel
87
88 #******************************************************************************
89 # Implicit rule to make dependency files.  Recipe copied from Gnu docs at:    *
90 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html *
91 #******************************************************************************
92 %.d: %.c
93         @echo Making dependency file $(notdir $@) for $(notdir $<)
94         @set -e; rm -f $@; \
95          $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
96          sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
97          rm -f $@.$$$$
98
99 #******************************************************************************
100 # Implicit rule to make object files.                                         *
101 #******************************************************************************
102 %.o: %.c
103         @echo Making $(notdir $@) from $(notdir $<)
104         @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
105
106 #******************************************************************************
107 # Implicit rule to make diagram files using PlantUML.                         *
108 #******************************************************************************
109 %.svg : %.plantuml
110         @echo Making $(notdir $@)
111         $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
112
113 all:     api_library \
114          vnf_reporting
115
116 clean:   api_library_clean \
117          vnf_reporting_clean \
118          evel_unit_clean
119
120 install: evel_install_centos evel_install_ubuntu
121
122 test: evel_test_centos evel_test_ubuntu
123
124 docs:    docs_clean doxygen_docs
125
126
127 #******************************************************************************
128 # Build the EVEL libraries.                                                   *
129 #******************************************************************************
130 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
131             $(EVELLIB_ROOT)/metadata.c \
132             $(EVELLIB_ROOT)/ring_buffer.c \
133             $(EVELLIB_ROOT)/double_list.c \
134             $(EVELLIB_ROOT)/hashtable.c \
135             $(EVELLIB_ROOT)/evel_event.c \
136             $(EVELLIB_ROOT)/evel_fault.c \
137             $(EVELLIB_ROOT)/evel_mobile_flow.c \
138             $(EVELLIB_ROOT)/evel_option.c \
139             $(EVELLIB_ROOT)/evel_jsonobject.c \
140             $(EVELLIB_ROOT)/evel_other.c \
141             $(EVELLIB_ROOT)/evel_json_buffer.c \
142             $(EVELLIB_ROOT)/evel_reporting_measurement.c \
143             $(EVELLIB_ROOT)/evel_heartbeat_fields.c \
144             $(EVELLIB_ROOT)/evel_sipsignaling.c \
145             $(EVELLIB_ROOT)/evel_scaling_measurement.c \
146             $(EVELLIB_ROOT)/evel_state_change.c \
147             $(EVELLIB_ROOT)/evel_strings.c \
148             $(EVELLIB_ROOT)/evel_syslog.c \
149             $(EVELLIB_ROOT)/evel_throttle.c \
150             $(EVELLIB_ROOT)/evel_internal_event.c \
151             $(EVELLIB_ROOT)/evel_event_mgr.c \
152             $(EVELLIB_ROOT)/evel_threshold_cross.c \
153             $(EVELLIB_ROOT)/evel_voicequality.c \
154             $(EVELLIB_ROOT)/evel_logging.c \
155             $(EVELLIB_ROOT)/evel_batch.c \
156             $(EVELLIB_ROOT)/jsmn.c
157 API_OBJECTS=$(API_SOURCES:.c=.o)
158 -include $(API_SOURCES:.c=.d)
159
160 api_library: $(LIBS_DIR)/libevel.so \
161              $(LIBS_DIR)/libevel.a
162
163 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
164         @echo   Linking API Static Library
165         @$(CC) $(LIBCFLAGS) -o $@ $+
166
167 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
168         @echo   Linking API Shared Library
169         @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
170
171 api_library_clean:
172         @echo   Cleaning API Library
173         @$(RM) $(LIBS_DIR)/libevel.so
174         @$(RM) $(API_OBJECTS)
175         @$(RM) $(EVELLIB_ROOT)/*.d
176
177 #******************************************************************************
178 # Build the EVEL library unit test.                                           *
179 #******************************************************************************
180 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
181 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
182 -include $(UNIT_SOURCES:.c=.d)
183
184 evel_unit: api_library \
185            $(OUTPUT_DIR)/evel_unit
186
187 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
188         @echo   Linking EVEL unit test
189         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
190                           -L $(LIBS_DIR) \
191                           $(UNIT_OBJECTS) \
192                           -level \
193                           -lpthread \
194                           -lcurl
195
196 evel_unit_clean:
197         @echo   Cleaning EVEL unit test
198         @$(RM) $(OUTPUT_DIR)/evel_unit
199         @$(RM) $(API_OBJECTS)
200         @$(RM) $(UNIT_OBJECTS)
201         @$(RM) $(EVELLIB_ROOT)/*.d
202         @$(RM) $(EVELUNIT_ROOT)/*.d
203
204 #******************************************************************************
205 # Build the VNF VES Reporting code                                            *
206 #******************************************************************************
207 vnf_reporting:
208         @echo   Making VNF Reporting
209         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/VESreporting
210
211 vnf_reporting_clean:
212         @echo   Cleaning VNF Reporting
213         @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
214
215 #******************************************************************************
216 # Copy the EVEL demo onto the CentOS testbed as a package and build it.       *
217 #******************************************************************************
218 evel_install_centos: delivery
219         @echo Installing EVEL library on CentOS testbed...
220         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
221           rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
222           mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
223           mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
224         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
225            $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
226         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
227           tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
228                  --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
229         @echo Making EVEL library on testbed...
230         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
231            cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
232            make clean all
233
234 #******************************************************************************
235 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it.       *
236 #******************************************************************************
237 evel_install_ubuntu: delivery
238         @echo Installing EVEL library on Ubuntu testbed...
239         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
240           rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
241           mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
242           mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
243         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
244            $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
245         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
246           tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
247                  --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
248         @echo Making EVEL library on testbed...
249         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
250            cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
251            make clean all
252
253 #******************************************************************************
254 # Make sure that the Centos platform is up to date and then run the software  *
255 # against a test collector.  Validating correct operation is not presently    *
256 # automated.                                                                  *
257 #******************************************************************************
258 evel_test_centos: evel_install_centos
259         @echo Testing EVEL Demo application on CentOS...
260         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
261            source .bash_profile \; \
262            $(TESTBED_CENTOS_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
263                                                  --fqdn $(VNF_COLLECTOR_HOST) \
264                                                  --port $(VNF_COLLECTOR_PORT) \
265                                                  --verbose
266
267 #******************************************************************************
268 # Make sure that the Ubuntu platform is up to date and then run the software  *
269 # against a test collector.  Validating correct operation is not presently    *
270 # automated.                                                                  *
271 #******************************************************************************
272 evel_test_ubuntu: evel_install_ubuntu
273         @echo Testing EVEL Demo application on Ubuntu...
274         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
275            source .profile \; \
276            $(TESTBED_UBUNTU_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
277                                                  --fqdn $(VNF_COLLECTOR_HOST) \
278                                                  --port $(VNF_COLLECTOR_PORT) \
279                                                  --verbose
280
281 #******************************************************************************
282 # Making a clean delivery has some very specific dependencies which are order *
283 # dependent, so we recursively make a series of targets to do a clean  build  *
284 # of all of the required deliverables and then finally zipping up.            *
285 #******************************************************************************
286 delivery:
287         @$(MAKE) -s delivery_baseline
288         @$(MAKE) -s package
289
290 delivery_baseline:      docs
291
292 #******************************************************************************
293 # Package the software for delivery.                                          *
294 #******************************************************************************
295 package: api_library_clean \
296          evel_unit_clean
297         @echo Packaging the software for delivery
298         @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz  bldjobs \
299                                                       code \
300                                                       docs \
301                                                       libs/$(MACHINE_ARCH)/README \
302                                                       output/$(MACHINE_ARCH)/README \
303                                                       readme.md
304
305 package_clean:
306         @echo Clean delivery packages
307         @$(RM) $(OUTPUTDIR)/*.tgz