1 #******************************************************************************
2 # The ECOMP Vendor Event Listener (EVEL) API client library Makefile.
4 # Make the various targets associated with housekeeping functions as part of
5 # Event Reporting library.
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.
13 # Copyright © 2017 AT&T Intellectual Property. All rights reserved.
15 # Licensed under the Apache License, Version 2.0 (the "License");
16 # you may not use this file except in compliance with the License.
17 # You may obtain a copy of the License at
18 # http://www.apache.org/licenses/LICENSE-2.0
20 # Unless required by applicable law or agreed to in writing, software
21 # distributed under the License is distributed on an "AS IS" BASIS,
22 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 # See the License for the specific language governing permissions and
24 # limitations under the License.
26 #******************************************************************************
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 EVELDEMO_ROOT=$(CODE_ROOT)/code/evel_demo
33 EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
34 EVELTRAINING_ROOT=$(CODE_ROOT)/code/evel_training
35 LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
36 OUTPUT_DIR=$(CODE_ROOT)/output/$(MACHINE_ARCH)
37 DOCS_ROOT=$(CODE_ROOT)/docs
43 PLANTUML=/usr/local/bin/plantuml.jar
46 #******************************************************************************
47 # Standard compiler flags. *
48 #******************************************************************************
49 CPPFLAGS=-I $(EVELLIB_ROOT)
50 ifeq ($(MACHINE_ARCH), aarch64)
51 CFLAGS=-Wall -Wextra -march=native -g -fPIC
52 LIBCFLAGS=-Wall -Wextra -march=native -g -shared -fPIC
54 CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
55 LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
58 #******************************************************************************
59 # The testbed is a VM instance where we can install the EVEL example under *
61 #******************************************************************************
62 VNF_TESTBED_CENTOS=172.18.152.180
63 VNF_TESTBED_CENTOS_USER=centos
64 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
65 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
67 #******************************************************************************
68 # The testbed is a VM instance where we can install the EVEL example under *
70 #******************************************************************************
71 VNF_TESTBED_UBUNTU=172.18.152.179
72 VNF_TESTBED_UBUNTU_USER=ubuntu
73 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
74 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
76 #******************************************************************************
77 # The test-collector is where we can send events to be consumed and checked *
79 #******************************************************************************
80 VNF_COLLECTOR_HOST=172.18.152.185
81 VNF_COLLECTOR_PORT=30000
83 #******************************************************************************
84 # A documentation server used by the team where we can install documentation. *
85 #******************************************************************************
86 TEAM_DOCS_SERVER=covlx8
87 DOCS_SERVER_PATH=/var/www/html/evel
89 #******************************************************************************
90 # Implicit rule to make dependency files. Recipe copied from Gnu docs at: *
91 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html*
92 #******************************************************************************
94 @echo Making dependency file $(notdir $@) for $(notdir $<)
96 $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
97 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
100 #******************************************************************************
101 # Implicit rule to make object files. *
102 #******************************************************************************
104 @echo Making $(notdir $@) from $(notdir $<)
105 @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
107 #******************************************************************************
108 # Implicit rule to make diagram files using PlantUML. *
109 #******************************************************************************
111 @echo Making $(notdir $@)
112 $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
115 evel_library_training
117 clean: api_library_clean \
119 evel_library_training_clean \
122 install: evel_install_centos evel_install_ubuntu
124 test: evel_test_centos evel_test_ubuntu
126 docs: docs_clean doxygen_docs
129 #******************************************************************************
130 # Build the EVEL libraries. *
131 #******************************************************************************
132 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
133 $(EVELLIB_ROOT)/metadata.c \
134 $(EVELLIB_ROOT)/ring_buffer.c \
135 $(EVELLIB_ROOT)/double_list.c \
136 $(EVELLIB_ROOT)/evel_event.c \
137 $(EVELLIB_ROOT)/evel_fault.c \
138 $(EVELLIB_ROOT)/evel_mobile_flow.c \
139 $(EVELLIB_ROOT)/evel_option.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_scaling_measurement.c \
144 $(EVELLIB_ROOT)/evel_state_change.c \
145 $(EVELLIB_ROOT)/evel_strings.c \
146 $(EVELLIB_ROOT)/evel_syslog.c \
147 $(EVELLIB_ROOT)/evel_throttle.c \
148 $(EVELLIB_ROOT)/evel_internal_event.c \
149 $(EVELLIB_ROOT)/evel_event_mgr.c \
150 $(EVELLIB_ROOT)/evel_logging.c \
151 $(EVELLIB_ROOT)/jsmn.c \
152 $(EVELLIB_ROOT)/evel_service.c \
153 $(EVELLIB_ROOT)/evel_signaling.c
155 API_OBJECTS=$(API_SOURCES:.c=.o)
156 -include $(API_SOURCES:.c=.d)
158 api_library: $(LIBS_DIR)/libevel.so \
159 $(LIBS_DIR)/libevel.a
161 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
162 @echo Linking API Static Library
163 @$(CC) $(LIBCFLAGS) -o $@ $+
165 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
166 @echo Linking API Shared Library
167 @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
170 @echo Cleaning API Library
171 @$(RM) $(LIBS_DIR)/libevel.so
172 @$(RM) $(API_OBJECTS)
173 @$(RM) $(EVELLIB_ROOT)/*.d
175 #******************************************************************************
176 # Build the EVEL library unit test. *
177 #******************************************************************************
178 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
179 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
180 -include $(UNIT_SOURCES:.c=.d)
182 evel_unit: api_library \
183 $(OUTPUT_DIR)/evel_unit
185 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
186 @echo Linking EVEL unit test
187 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
195 @echo Cleaning EVEL unit test
196 @$(RM) $(OUTPUT_DIR)/evel_unit
197 @$(RM) $(API_OBJECTS)
198 @$(RM) $(UNIT_OBJECTS)
199 @$(RM) $(EVELLIB_ROOT)/*.d
200 @$(RM) $(EVELUNIT_ROOT)/*.d
202 #******************************************************************************
203 # Build the EVEL library training files. *
204 #******************************************************************************
205 evel_library_training:
206 @echo Making EVEL training
207 @$(MAKE) -s -C $(EVELTRAINING_ROOT)/VESreporting
209 evel_library_training_clean:
210 @echo Cleaning EVEL training
211 @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
213 #******************************************************************************
214 # Copy the EVEL demo onto the CentOS testbed as a package and build it. *
215 #******************************************************************************
216 evel_install_centos: delivery
217 @echo Installing EVEL library on CentOS testbed...
218 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
219 rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
220 mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
221 mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
222 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
223 $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
224 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
225 tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
226 --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
227 @echo Making EVEL library on testbed...
228 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
229 cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
232 #******************************************************************************
233 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it. *
234 #******************************************************************************
235 evel_install_ubuntu: delivery
236 @echo Installing EVEL library on Ubuntu testbed...
237 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
238 rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
239 mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
240 mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
241 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
242 $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
243 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
244 tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
245 --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
246 @echo Making EVEL library on testbed...
247 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
248 cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
251 #******************************************************************************
252 # Make sure that the Centos platform is up to date and then run the software *
253 # against a test collector. Validating correct operation is not presently *
255 #******************************************************************************
256 evel_test_centos: evel_install_centos
257 @echo Testing EVEL Demo application on CentOS...
258 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
259 source .bash_profile \; \
260 $(TESTBED_CENTOS_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
261 --fqdn $(VNF_COLLECTOR_HOST) \
262 --port $(VNF_COLLECTOR_PORT) \
265 #******************************************************************************
266 # Make sure that the Ubuntu platform is up to date and then run the software *
267 # against a test collector. Validating correct operation is not presently *
269 #******************************************************************************
270 evel_test_ubuntu: evel_install_ubuntu
271 @echo Testing EVEL Demo application on Ubuntu...
272 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
274 $(TESTBED_UBUNTU_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
275 --fqdn $(VNF_COLLECTOR_HOST) \
276 --port $(VNF_COLLECTOR_PORT) \
279 #******************************************************************************
280 # Making a clean delivery has some very specific dependencies which are order *
281 # dependent, so we recursively make a series of targets to do a clean build *
282 # of all of the required deliverables and then finally zipping up. *
283 #******************************************************************************
285 @$(MAKE) -s delivery_baseline
288 delivery_baseline: docs
290 #******************************************************************************
291 # Package the software for delivery. *
292 #******************************************************************************
293 package: api_library_clean \
295 evel_library_demo_clean \
296 evel_library_training_clean \
298 @echo Packaging the software for delivery
299 @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz bldjobs \
302 libs/$(MACHINE_ARCH)/README \
303 output/$(MACHINE_ARCH)/README \
307 @echo Clean delivery packages
308 @$(RM) $(OUTPUTDIR)/*.tgz
310 #******************************************************************************
311 # Create project documentation. *
312 #******************************************************************************
314 @echo Making Doxygen documentation
317 pdf_docs: doxygen_docs # This target is slightly broken. Run manually.
319 @$(MAKE) -C $(DOCS_ROOT)/source/evel/latex
322 @echo Cleaning docs...
323 @$(RM) $(DOCS_ROOT)/*.svg
324 @$(RM) -r $(DOCS_ROOT)/source/evel/html \
325 $(DOCS_ROOT)/source/evel/latex
328 @echo Copying docs to team web-server...
329 @$(SCP) -r $(DOCS_ROOT)/source/evel/html/* \
330 root@$(TEAM_DOCS_SERVER):$(DOCS_SERVER_PATH)