vfirewall usecase for arm64
[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 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
38 CC=gcc
39 SCP=scp
40 SSH=ssh
41 JAVA=java
42 DOXYGEN=doxygen
43 PLANTUML=/usr/local/bin/plantuml.jar
44 PLANTFLAGS=-tsvg
45
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
53 else
54         CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
55         LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
56 endif
57
58 #******************************************************************************
59 # The testbed is a VM instance where we can install the EVEL example under    *
60 # CentOS.                                                                     *
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
66
67 #******************************************************************************
68 # The testbed is a VM instance where we can install the EVEL example under    *
69 # Ubuntu.                                                                     *
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
75
76 #******************************************************************************
77 # The test-collector is where we can send events to be consumed and checked   *
78 # during tests.                                                               *
79 #******************************************************************************
80 VNF_COLLECTOR_HOST=172.18.152.185
81 VNF_COLLECTOR_PORT=30000
82
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
88
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 #******************************************************************************
93 %.d: %.c
94         @echo Making dependency file $(notdir $@) for $(notdir $<)
95         @set -e; rm -f $@; \
96          $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
97          sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
98          rm -f $@.$$$$
99
100 #******************************************************************************
101 # Implicit rule to make object files.                                         *
102 #******************************************************************************
103 %.o: %.c
104         @echo Making $(notdir $@) from $(notdir $<)
105         @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
106
107 #******************************************************************************
108 # Implicit rule to make diagram files using PlantUML.                         *
109 #******************************************************************************
110 %.svg : %.plantuml
111         @echo Making $(notdir $@)
112         $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
113
114 all:     api_library \
115          evel_library_training
116
117 clean:   api_library_clean \
118          evel_unit_clean \
119          evel_library_training_clean \
120          docs_clean
121
122 install: evel_install_centos evel_install_ubuntu
123
124 test: evel_test_centos evel_test_ubuntu
125
126 docs:    docs_clean doxygen_docs
127
128
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
154
155 API_OBJECTS=$(API_SOURCES:.c=.o)
156 -include $(API_SOURCES:.c=.d)
157
158 api_library: $(LIBS_DIR)/libevel.so \
159              $(LIBS_DIR)/libevel.a
160
161 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
162         @echo   Linking API Static Library
163         @$(CC) $(LIBCFLAGS) -o $@ $+
164
165 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
166         @echo   Linking API Shared Library
167         @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
168
169 api_library_clean:
170         @echo   Cleaning API Library
171         @$(RM) $(LIBS_DIR)/libevel.so
172         @$(RM) $(API_OBJECTS)
173         @$(RM) $(EVELLIB_ROOT)/*.d
174
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)
181
182 evel_unit: api_library \
183            $(OUTPUT_DIR)/evel_unit
184
185 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
186         @echo   Linking EVEL unit test
187         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
188                           -L $(LIBS_DIR) \
189                           $(UNIT_OBJECTS) \
190                           -level \
191                           -lpthread \
192                           -lcurl
193
194 evel_unit_clean:
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
201
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
208
209 evel_library_training_clean:
210         @echo   Cleaning EVEL training
211         @$(RM) $(EVELTRAINING_ROOT)/VESreporting/vpp_measurement_reporter
212
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 \; \
230            make clean all
231
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 \; \
249            make clean all
250
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    *
254 # automated.                                                                  *
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) \
263                                                  --verbose
264
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    *
268 # automated.                                                                  *
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) \
273            source .profile \; \
274            $(TESTBED_UBUNTU_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
275                                                  --fqdn $(VNF_COLLECTOR_HOST) \
276                                                  --port $(VNF_COLLECTOR_PORT) \
277                                                  --verbose
278
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 #******************************************************************************
284 delivery:
285         @$(MAKE) -s delivery_baseline
286         @$(MAKE) -s package
287
288 delivery_baseline:      docs
289
290 #******************************************************************************
291 # Package the software for delivery.                                          *
292 #******************************************************************************
293 package: api_library_clean \
294          evel_unit_clean \
295          evel_library_demo_clean \
296          evel_library_training_clean \
297          docs
298         @echo Packaging the software for delivery
299         @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz  bldjobs \
300                                                       code \
301                                                       docs \
302                                                       libs/$(MACHINE_ARCH)/README \
303                                                       output/$(MACHINE_ARCH)/README \
304                                                       readme.md
305
306 package_clean:
307         @echo Clean delivery packages
308         @$(RM) $(OUTPUTDIR)/*.tgz
309
310 #******************************************************************************
311 # Create project documentation.                                               *
312 #******************************************************************************
313 doxygen_docs:
314         @echo Making Doxygen documentation
315         @$(DOXYGEN) Doxyfile
316
317 pdf_docs: doxygen_docs  # This target is slightly broken.  Run manually.
318         @echo   Making PDF...
319         @$(MAKE) -C $(DOCS_ROOT)/source/evel/latex
320
321 docs_clean:
322         @echo Cleaning docs...
323         @$(RM) $(DOCS_ROOT)/*.svg
324         @$(RM) -r $(DOCS_ROOT)/source/evel/html \
325                   $(DOCS_ROOT)/source/evel/latex
326
327 docs_install: docs
328         @echo Copying docs to team web-server...
329         @$(SCP) -r $(DOCS_ROOT)/source/evel/html/* \
330                   root@$(TEAM_DOCS_SERVER):$(DOCS_SERVER_PATH)