1 #*************************************************************************//**
3 #* Copyright © 2017 AT&T Intellectual Property. All rights reserved.
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
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.
16 #****************************************************************************/
18 #******************************************************************************
19 # The ECOMP Vendor Event Listener (EVEL) API client library Makefile.
21 # Make the various targets associated with housekeeping functions as part of
22 # Event Reporting library.
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 #****************************************************************************/
28 ARCH=$(shell getconf LONG_BIT)
29 CODE_ROOT=$(CURDIR)/..
30 EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
31 EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
32 EVELTRAINING_ROOT=$(CODE_ROOT)/code
33 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
34 OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(ARCH)
35 DOCS_ROOT=$(CODE_ROOT)/docs
41 PLANTUML=/usr/local/bin/plantuml.jar
44 #******************************************************************************
45 # Standard compiler flags. *
46 #******************************************************************************
47 CPPFLAGS=-I $(EVELLIB_ROOT)
48 CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
49 LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
51 #******************************************************************************
52 # The testbed is a VM instance where we can install the EVEL example under *
54 #******************************************************************************
55 VNF_TESTBED_CENTOS=172.18.152.180
56 VNF_TESTBED_CENTOS_USER=centos
57 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
58 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
60 #******************************************************************************
61 # The testbed is a VM instance where we can install the EVEL example under *
63 #******************************************************************************
64 VNF_TESTBED_UBUNTU=172.18.152.179
65 VNF_TESTBED_UBUNTU_USER=ubuntu
66 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
67 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
69 #******************************************************************************
70 # The test-collector is where we can send events to be consumed and checked *
72 #******************************************************************************
73 VNF_COLLECTOR_HOST=172.18.152.185
74 VNF_COLLECTOR_PORT=30000
76 #******************************************************************************
77 # A documentation server used by the team where we can install documentation. *
78 #******************************************************************************
79 TEAM_DOCS_SERVER=covlx8
80 DOCS_SERVER_PATH=/var/www/html/evel
82 #******************************************************************************
83 # Implicit rule to make dependency files. Recipe copied from Gnu docs at: *
84 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html *
85 #******************************************************************************
87 @echo Making dependency file $(notdir $@) for $(notdir $<)
89 $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
90 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
93 #******************************************************************************
94 # Implicit rule to make object files. *
95 #******************************************************************************
97 @echo Making $(notdir $@) from $(notdir $<)
98 @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
100 #******************************************************************************
101 # Implicit rule to make diagram files using PlantUML. *
102 #******************************************************************************
104 @echo Making $(notdir $@)
105 $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
110 clean: api_library_clean \
111 vnf_reporting_clean \
114 install: evel_install_centos evel_install_ubuntu
116 test: evel_test_centos evel_test_ubuntu
118 docs: docs_clean doxygen_docs
121 #******************************************************************************
122 # Build the EVEL libraries. *
123 #******************************************************************************
124 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
125 $(EVELLIB_ROOT)/metadata.c \
126 $(EVELLIB_ROOT)/ring_buffer.c \
127 $(EVELLIB_ROOT)/double_list.c \
128 $(EVELLIB_ROOT)/hashtable.c \
129 $(EVELLIB_ROOT)/evel_event.c \
130 $(EVELLIB_ROOT)/evel_fault.c \
131 $(EVELLIB_ROOT)/evel_mobile_flow.c \
132 $(EVELLIB_ROOT)/evel_option.c \
133 $(EVELLIB_ROOT)/evel_jsonobject.c \
134 $(EVELLIB_ROOT)/evel_other.c \
135 $(EVELLIB_ROOT)/evel_json_buffer.c \
136 $(EVELLIB_ROOT)/evel_reporting_measurement.c \
137 $(EVELLIB_ROOT)/evel_heartbeat_fields.c \
138 $(EVELLIB_ROOT)/evel_sipsignaling.c \
139 $(EVELLIB_ROOT)/evel_scaling_measurement.c \
140 $(EVELLIB_ROOT)/evel_state_change.c \
141 $(EVELLIB_ROOT)/evel_strings.c \
142 $(EVELLIB_ROOT)/evel_syslog.c \
143 $(EVELLIB_ROOT)/evel_throttle.c \
144 $(EVELLIB_ROOT)/evel_internal_event.c \
145 $(EVELLIB_ROOT)/evel_event_mgr.c \
146 $(EVELLIB_ROOT)/evel_threshold_cross.c \
147 $(EVELLIB_ROOT)/evel_voicequality.c \
148 $(EVELLIB_ROOT)/evel_logging.c \
149 $(EVELLIB_ROOT)/evel_batch.c \
150 $(EVELLIB_ROOT)/jsmn.c
151 API_OBJECTS=$(API_SOURCES:.c=.o)
152 -include $(API_SOURCES:.c=.d)
154 api_library: $(LIBS_DIR)/libevel.so \
155 $(LIBS_DIR)/libevel.a
157 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
158 @echo Linking API Static Library
159 @$(CC) $(LIBCFLAGS) -o $@ $+
161 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
162 @echo Linking API Shared Library
163 @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
166 @echo Cleaning API Library
167 @$(RM) $(LIBS_DIR)/libevel.so
168 @$(RM) $(API_OBJECTS)
169 @$(RM) $(EVELLIB_ROOT)/*.d
171 #******************************************************************************
172 # Build the EVEL library unit test. *
173 #******************************************************************************
174 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
175 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
176 -include $(UNIT_SOURCES:.c=.d)
178 evel_unit: api_library \
179 $(OUTPUT_DIR)/evel_unit
181 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
182 @echo Linking EVEL unit test
183 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
191 @echo Cleaning EVEL unit test
192 @$(RM) $(OUTPUT_DIR)/evel_unit
193 @$(RM) $(API_OBJECTS)
194 @$(RM) $(UNIT_OBJECTS)
195 @$(RM) $(EVELLIB_ROOT)/*.d
196 @$(RM) $(EVELUNIT_ROOT)/*.d
198 #******************************************************************************
199 # Build the VNF VES Reporting code *
200 #******************************************************************************
202 @echo Making VNF Reporting
203 @$(MAKE) -s -C $(EVELTRAINING_ROOT)/VESreporting
206 @echo Cleaning VNF Reporting
207 @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
209 #******************************************************************************
210 # Copy the EVEL demo onto the CentOS testbed as a package and build it. *
211 #******************************************************************************
212 evel_install_centos: delivery
213 @echo Installing EVEL library on CentOS testbed...
214 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
215 rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
216 mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
217 mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
218 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
219 $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
220 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
221 tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
222 --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
223 @echo Making EVEL library on testbed...
224 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
225 cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
228 #******************************************************************************
229 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it. *
230 #******************************************************************************
231 evel_install_ubuntu: delivery
232 @echo Installing EVEL library on Ubuntu testbed...
233 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
234 rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
235 mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
236 mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
237 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
238 $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
239 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
240 tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
241 --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
242 @echo Making EVEL library on testbed...
243 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
244 cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
247 #******************************************************************************
248 # Make sure that the Centos platform is up to date and then run the software *
249 # against a test collector. Validating correct operation is not presently *
251 #******************************************************************************
252 evel_test_centos: evel_install_centos
253 @echo Testing EVEL Demo application on CentOS...
254 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
255 source .bash_profile \; \
256 $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
257 --fqdn $(VNF_COLLECTOR_HOST) \
258 --port $(VNF_COLLECTOR_PORT) \
261 #******************************************************************************
262 # Make sure that the Ubuntu platform is up to date and then run the software *
263 # against a test collector. Validating correct operation is not presently *
265 #******************************************************************************
266 evel_test_ubuntu: evel_install_ubuntu
267 @echo Testing EVEL Demo application on Ubuntu...
268 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
270 $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
271 --fqdn $(VNF_COLLECTOR_HOST) \
272 --port $(VNF_COLLECTOR_PORT) \
275 #******************************************************************************
276 # Making a clean delivery has some very specific dependencies which are order *
277 # dependent, so we recursively make a series of targets to do a clean build *
278 # of all of the required deliverables and then finally zipping up. *
279 #******************************************************************************
281 @$(MAKE) -s delivery_baseline
284 delivery_baseline: docs
286 #******************************************************************************
287 # Package the software for delivery. *
288 #******************************************************************************
289 package: api_library_clean \
291 @echo Packaging the software for delivery
292 @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz bldjobs \
296 output/x86_64/README \
300 @echo Clean delivery packages
301 @$(RM) $(OUTPUTDIR)/*.tgz