Upgrade vFW and vLB to VES 5.x
[demo.git] / vnfs / VES / 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 © 2017 AT&T Intellectual Property. All rights reserved.
14
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
19
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.
25 #
26 #******************************************************************************
27
28 ARCH=$(shell getconf LONG_BIT)
29 CODE_ROOT=$(CURDIR)/..
30 EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
31 EVELDEMO_ROOT=$(CODE_ROOT)/code/evel_demo
32 EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
33 EVELTRAINING_ROOT=$(CODE_ROOT)/code/evel_training
34 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
35 OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(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 CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
50 LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
51
52 #******************************************************************************
53 # The testbed is a VM instance where we can install the EVEL example under    *
54 # CentOS.                                                                     *
55 #******************************************************************************
56 VNF_TESTBED_CENTOS=172.18.152.180
57 VNF_TESTBED_CENTOS_USER=centos
58 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
59 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
60
61 #******************************************************************************
62 # The testbed is a VM instance where we can install the EVEL example under    *
63 # Ubuntu.                                                                     *
64 #******************************************************************************
65 VNF_TESTBED_UBUNTU=172.18.152.179
66 VNF_TESTBED_UBUNTU_USER=ubuntu
67 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
68 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
69
70 #******************************************************************************
71 # The test-collector is where we can send events to be consumed and checked   *
72 # during tests.                                                               *
73 #******************************************************************************
74 VNF_COLLECTOR_HOST=172.18.152.185
75 VNF_COLLECTOR_PORT=30000
76
77 #******************************************************************************
78 # A documentation server used by the team where we can install documentation. *
79 #******************************************************************************
80 TEAM_DOCS_SERVER=covlx8
81 DOCS_SERVER_PATH=/var/www/html/evel
82
83 #******************************************************************************
84 # Implicit rule to make dependency files.  Recipe copied from Gnu docs at:    *
85 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html*
86 #******************************************************************************
87 %.d: %.c
88         @echo Making dependency file $(notdir $@) for $(notdir $<)
89         @set -e; rm -f $@; \
90          $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
91          sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
92          rm -f $@.$$$$
93
94 #******************************************************************************
95 # Implicit rule to make object files.                                         *
96 #******************************************************************************
97 %.o: %.c
98         @echo Making $(notdir $@) from $(notdir $<)
99         @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
100
101 #******************************************************************************
102 # Implicit rule to make diagram files using PlantUML.                         *
103 #******************************************************************************
104 %.svg : %.plantuml
105         @echo Making $(notdir $@)
106         $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
107
108 all:     api_library \
109          evel_library_training
110
111 clean:   api_library_clean \
112          evel_unit_clean \
113          evel_library_training_clean \
114          docs_clean
115
116 install: evel_install_centos evel_install_ubuntu
117
118 test: evel_test_centos evel_test_ubuntu
119
120 docs:    docs_clean doxygen_docs
121
122
123 #******************************************************************************
124 # Build the EVEL libraries.                                                   *
125 #******************************************************************************
126 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
127             $(EVELLIB_ROOT)/metadata.c \
128             $(EVELLIB_ROOT)/ring_buffer.c \
129             $(EVELLIB_ROOT)/double_list.c \
130             $(EVELLIB_ROOT)/evel_event.c \
131             $(EVELLIB_ROOT)/evel_fault.c \
132             $(EVELLIB_ROOT)/evel_mobile_flow.c \
133             $(EVELLIB_ROOT)/evel_option.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_scaling_measurement.c \
138             $(EVELLIB_ROOT)/evel_state_change.c \
139             $(EVELLIB_ROOT)/evel_strings.c \
140             $(EVELLIB_ROOT)/evel_syslog.c \
141             $(EVELLIB_ROOT)/evel_throttle.c \
142             $(EVELLIB_ROOT)/evel_internal_event.c \
143             $(EVELLIB_ROOT)/evel_event_mgr.c \
144             $(EVELLIB_ROOT)/evel_logging.c \
145             $(EVELLIB_ROOT)/jsmn.c \
146             $(EVELLIB_ROOT)/evel_service.c \
147             $(EVELLIB_ROOT)/evel_signaling.c
148
149 API_OBJECTS=$(API_SOURCES:.c=.o)
150 -include $(API_SOURCES:.c=.d)
151
152 api_library: $(LIBS_DIR)/libevel.so \
153              $(LIBS_DIR)/libevel.a
154
155 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
156         @echo   Linking API Static Library
157         @$(CC) $(LIBCFLAGS) -o $@ $+
158
159 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
160         @echo   Linking API Shared Library
161         @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
162
163 api_library_clean:
164         @echo   Cleaning API Library
165         @$(RM) $(LIBS_DIR)/libevel.so
166         @$(RM) $(API_OBJECTS)
167         @$(RM) $(EVELLIB_ROOT)/*.d
168
169 #******************************************************************************
170 # Build the EVEL library unit test.                                           *
171 #******************************************************************************
172 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
173 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
174 -include $(UNIT_SOURCES:.c=.d)
175
176 evel_unit: api_library \
177            $(OUTPUT_DIR)/evel_unit
178
179 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
180         @echo   Linking EVEL unit test
181         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
182                           -L $(LIBS_DIR) \
183                           $(UNIT_OBJECTS) \
184                           -level \
185                           -lpthread \
186                           -lcurl
187
188 evel_unit_clean:
189         @echo   Cleaning EVEL unit test
190         @$(RM) $(OUTPUT_DIR)/evel_unit
191         @$(RM) $(API_OBJECTS)
192         @$(RM) $(UNIT_OBJECTS)
193         @$(RM) $(EVELLIB_ROOT)/*.d
194         @$(RM) $(EVELUNIT_ROOT)/*.d
195
196 #******************************************************************************
197 # Build the EVEL library training files.                                      *
198 #******************************************************************************
199 evel_library_training:
200         @echo   Making EVEL training
201         @$(MAKE) -s -C $(EVELTRAINING_ROOT)/VESreporting
202
203 evel_library_training_clean:
204         @echo   Cleaning EVEL training
205         @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
206
207 #******************************************************************************
208 # Copy the EVEL demo onto the CentOS testbed as a package and build it.       *
209 #******************************************************************************
210 evel_install_centos: delivery
211         @echo Installing EVEL library on CentOS testbed...
212         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
213           rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
214           mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
215           mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
216         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
217            $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
218         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
219           tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
220                  --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
221         @echo Making EVEL library on testbed...
222         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
223            cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
224            make clean all
225
226 #******************************************************************************
227 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it.       *
228 #******************************************************************************
229 evel_install_ubuntu: delivery
230         @echo Installing EVEL library on Ubuntu testbed...
231         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
232           rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
233           mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
234           mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
235         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
236            $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
237         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
238           tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
239                  --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
240         @echo Making EVEL library on testbed...
241         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
242            cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
243            make clean all
244
245 #******************************************************************************
246 # Make sure that the Centos platform is up to date and then run the software  *
247 # against a test collector.  Validating correct operation is not presently    *
248 # automated.                                                                  *
249 #******************************************************************************
250 evel_test_centos: evel_install_centos
251         @echo Testing EVEL Demo application on CentOS...
252         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
253            source .bash_profile \; \
254            $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
255                                                  --fqdn $(VNF_COLLECTOR_HOST) \
256                                                  --port $(VNF_COLLECTOR_PORT) \
257                                                  --verbose
258
259 #******************************************************************************
260 # Make sure that the Ubuntu platform is up to date and then run the software  *
261 # against a test collector.  Validating correct operation is not presently    *
262 # automated.                                                                  *
263 #******************************************************************************
264 evel_test_ubuntu: evel_install_ubuntu
265         @echo Testing EVEL Demo application on Ubuntu...
266         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
267            source .profile \; \
268            $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
269                                                  --fqdn $(VNF_COLLECTOR_HOST) \
270                                                  --port $(VNF_COLLECTOR_PORT) \
271                                                  --verbose
272
273 #******************************************************************************
274 # Making a clean delivery has some very specific dependencies which are order *
275 # dependent, so we recursively make a series of targets to do a clean  build  *
276 # of all of the required deliverables and then finally zipping up.            *
277 #******************************************************************************
278 delivery:
279         @$(MAKE) -s delivery_baseline
280         @$(MAKE) -s package
281
282 delivery_baseline:      docs
283
284 #******************************************************************************
285 # Package the software for delivery.                                          *
286 #******************************************************************************
287 package: api_library_clean \
288          evel_unit_clean \
289          evel_library_demo_clean \
290          evel_library_training_clean \
291          docs
292         @echo Packaging the software for delivery
293         @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz  bldjobs \
294                                                       code \
295                                                       docs \
296                                                       libs/x86_64/README \
297                                                       output/x86_64/README \
298                                                       readme.md
299
300 package_clean:
301         @echo Clean delivery packages
302         @$(RM) $(OUTPUTDIR)/*.tgz
303
304 #******************************************************************************
305 # Create project documentation.                                               *
306 #******************************************************************************
307 doxygen_docs:
308         @echo Making Doxygen documentation
309         @$(DOXYGEN) Doxyfile
310
311 pdf_docs: doxygen_docs  # This target is slightly broken.  Run manually.
312         @echo   Making PDF...
313         @$(MAKE) -C $(DOCS_ROOT)/source/evel/latex
314
315 docs_clean:
316         @echo Cleaning docs...
317         @$(RM) $(DOCS_ROOT)/*.svg
318         @$(RM) -r $(DOCS_ROOT)/source/evel/html \
319                   $(DOCS_ROOT)/source/evel/latex
320
321 docs_install: docs
322         @echo Copying docs to team web-server...
323         @$(SCP) -r $(DOCS_ROOT)/source/evel/html/* \
324                   root@$(TEAM_DOCS_SERVER):$(DOCS_SERVER_PATH)