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(c) <2016>, AT&T Intellectual Property. All other rights reserved.
15 # Redistribution and use in source and binary forms, with or without
16 # modification, are permitted provided that the following conditions are met:
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.
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 #******************************************************************************
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
56 PLANTUML=/usr/local/bin/plantuml.jar
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
66 #******************************************************************************
67 # The testbed is a VM instance where we can install the EVEL example under *
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
75 #******************************************************************************
76 # The testbed is a VM instance where we can install the EVEL example under *
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
84 #******************************************************************************
85 # The test-collector is where we can send events to be consumed and checked *
87 #******************************************************************************
88 VNF_COLLECTOR_HOST=172.18.152.185
89 VNF_COLLECTOR_PORT=30000
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
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 #******************************************************************************
102 @echo Making dependency file $(notdir $@) for $(notdir $<)
104 $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
105 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
108 #******************************************************************************
109 # Implicit rule to make object files. *
110 #******************************************************************************
112 @echo Making $(notdir $@) from $(notdir $<)
113 @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
115 #******************************************************************************
116 # Implicit rule to make diagram files using PlantUML. *
117 #******************************************************************************
119 @echo Making $(notdir $@)
120 $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
123 evel_library_training
125 clean: api_library_clean \
127 evel_library_training_clean \
130 install: evel_install_centos evel_install_ubuntu
132 test: evel_test_centos evel_test_ubuntu
134 docs: docs_clean doxygen_docs
137 #******************************************************************************
138 # Build the EVEL libraries. *
139 #******************************************************************************
140 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
141 $(EVELLIB_ROOT)/metadata.c \
142 $(EVELLIB_ROOT)/ring_buffer.c \
143 $(EVELLIB_ROOT)/double_list.c \
144 $(EVELLIB_ROOT)/evel_event.c \
145 $(EVELLIB_ROOT)/evel_fault.c \
146 $(EVELLIB_ROOT)/evel_mobile_flow.c \
147 $(EVELLIB_ROOT)/evel_option.c \
148 $(EVELLIB_ROOT)/evel_other.c \
149 $(EVELLIB_ROOT)/evel_json_buffer.c \
150 $(EVELLIB_ROOT)/evel_reporting_measurement.c \
151 $(EVELLIB_ROOT)/evel_scaling_measurement.c \
152 $(EVELLIB_ROOT)/evel_state_change.c \
153 $(EVELLIB_ROOT)/evel_strings.c \
154 $(EVELLIB_ROOT)/evel_syslog.c \
155 $(EVELLIB_ROOT)/evel_throttle.c \
156 $(EVELLIB_ROOT)/evel_internal_event.c \
157 $(EVELLIB_ROOT)/evel_event_mgr.c \
158 $(EVELLIB_ROOT)/evel_logging.c \
159 $(EVELLIB_ROOT)/jsmn.c \
160 $(EVELLIB_ROOT)/evel_service.c \
161 $(EVELLIB_ROOT)/evel_signaling.c
163 API_OBJECTS=$(API_SOURCES:.c=.o)
164 -include $(API_SOURCES:.c=.d)
166 api_library: $(LIBS_DIR)/libevel.so \
167 $(LIBS_DIR)/libevel.a
169 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
170 @echo Linking API Static Library
171 @$(CC) $(LIBCFLAGS) -o $@ $+
173 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
174 @echo Linking API Shared Library
175 @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
178 @echo Cleaning API Library
179 @$(RM) $(LIBS_DIR)/libevel.so
180 @$(RM) $(API_OBJECTS)
181 @$(RM) $(EVELLIB_ROOT)/*.d
183 #******************************************************************************
184 # Build the EVEL library unit test. *
185 #******************************************************************************
186 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
187 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
188 -include $(UNIT_SOURCES:.c=.d)
190 evel_unit: api_library \
191 $(OUTPUT_DIR)/evel_unit
193 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
194 @echo Linking EVEL unit test
195 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
203 @echo Cleaning EVEL unit test
204 @$(RM) $(OUTPUT_DIR)/evel_unit
205 @$(RM) $(API_OBJECTS)
206 @$(RM) $(UNIT_OBJECTS)
207 @$(RM) $(EVELLIB_ROOT)/*.d
208 @$(RM) $(EVELUNIT_ROOT)/*.d
210 #******************************************************************************
211 # Build the EVEL library training files. *
212 #******************************************************************************
213 evel_library_training:
214 @echo Making EVEL training
215 @$(MAKE) -s -C $(EVELTRAINING_ROOT)/VESreporting
217 evel_library_training_clean:
218 @echo Cleaning EVEL training
219 @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
221 #******************************************************************************
222 # Copy the EVEL demo onto the CentOS testbed as a package and build it. *
223 #******************************************************************************
224 evel_install_centos: delivery
225 @echo Installing EVEL library on CentOS testbed...
226 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
227 rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
228 mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
229 mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
230 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
231 $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
232 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
233 tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
234 --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
235 @echo Making EVEL library on testbed...
236 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
237 cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
240 #******************************************************************************
241 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it. *
242 #******************************************************************************
243 evel_install_ubuntu: delivery
244 @echo Installing EVEL library on Ubuntu testbed...
245 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
246 rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
247 mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
248 mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
249 @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
250 $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
251 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
252 tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
253 --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
254 @echo Making EVEL library on testbed...
255 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
256 cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
259 #******************************************************************************
260 # Make sure that the Centos platform is up to date and then run the software *
261 # against a test collector. Validating correct operation is not presently *
263 #******************************************************************************
264 evel_test_centos: evel_install_centos
265 @echo Testing EVEL Demo application on CentOS...
266 @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
267 source .bash_profile \; \
268 $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
269 --fqdn $(VNF_COLLECTOR_HOST) \
270 --port $(VNF_COLLECTOR_PORT) \
273 #******************************************************************************
274 # Make sure that the Ubuntu platform is up to date and then run the software *
275 # against a test collector. Validating correct operation is not presently *
277 #******************************************************************************
278 evel_test_ubuntu: evel_install_ubuntu
279 @echo Testing EVEL Demo application on Ubuntu...
280 @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
282 $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
283 --fqdn $(VNF_COLLECTOR_HOST) \
284 --port $(VNF_COLLECTOR_PORT) \
287 #******************************************************************************
288 # Making a clean delivery has some very specific dependencies which are order *
289 # dependent, so we recursively make a series of targets to do a clean build *
290 # of all of the required deliverables and then finally zipping up. *
291 #******************************************************************************
293 @$(MAKE) -s delivery_baseline
296 delivery_baseline: docs
298 #******************************************************************************
299 # Package the software for delivery. *
300 #******************************************************************************
301 package: api_library_clean \
303 evel_library_demo_clean \
304 evel_library_training_clean \
306 @echo Packaging the software for delivery
307 @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz bldjobs \
311 output/x86_64/README \
315 @echo Clean delivery packages
316 @$(RM) $(OUTPUTDIR)/*.tgz
318 #******************************************************************************
319 # Create project documentation. *
320 #******************************************************************************
322 @echo Making Doxygen documentation
325 pdf_docs: doxygen_docs # This target is slightly broken. Run manually.
327 @$(MAKE) -C $(DOCS_ROOT)/source/evel/latex
330 @echo Cleaning docs...
331 @$(RM) $(DOCS_ROOT)/*.svg
332 @$(RM) -r $(DOCS_ROOT)/source/evel/html \
333 $(DOCS_ROOT)/source/evel/latex
336 @echo Copying docs to team web-server...
337 @$(SCP) -r $(DOCS_ROOT)/source/evel/html/* \
338 root@$(TEAM_DOCS_SERVER):$(DOCS_SERVER_PATH)