b1e15e5eba59ff10896bf9e6c8d9ff59e536fa85
[demo.git] / vnfs / VES5.0 / evel / evel-library / bldjobs / Makefile
1 #*************************************************************************//**
2 #*
3 #* Copyright © 2017 AT&T Intellectual Property. All rights reserved.
4 #*
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
9 #*
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.
15 #*
16 #****************************************************************************/
17
18 #******************************************************************************
19 # The ECOMP Vendor Event Listener (EVEL) API client library Makefile.
20 #
21 # Make the various targets associated with housekeeping functions as part of
22 # Event Reporting library.
23 #
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 #****************************************************************************/
27
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 LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
33 OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(ARCH)
34 DOCS_ROOT=$(CODE_ROOT)/docs
35 CC=gcc
36 SCP=scp
37 SSH=ssh
38 JAVA=java
39 DOXYGEN=doxygen
40 PLANTUML=/usr/local/bin/plantuml.jar
41 PLANTFLAGS=-tsvg
42
43 #******************************************************************************
44 # Standard compiler flags.                                                    *
45 #******************************************************************************
46 CPPFLAGS=-I $(EVELLIB_ROOT)
47 CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
48 LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
49
50 #******************************************************************************
51 # The testbed is a VM instance where we can install the EVEL example under    *
52 # CentOS.                                                                     *
53 #******************************************************************************
54 VNF_TESTBED_CENTOS=172.18.152.180
55 VNF_TESTBED_CENTOS_USER=centos
56 TESTBED_CENTOS_DOWNLOAD_PATH=/home/centos/download/evel_lib
57 TESTBED_CENTOS_INSTALL_PATH=/home/centos/evel
58
59 #******************************************************************************
60 # The testbed is a VM instance where we can install the EVEL example under    *
61 # Ubuntu.                                                                     *
62 #******************************************************************************
63 VNF_TESTBED_UBUNTU=172.18.152.179
64 VNF_TESTBED_UBUNTU_USER=ubuntu
65 TESTBED_UBUNTU_DOWNLOAD_PATH=/home/ubuntu/Downloads/evel_lib
66 TESTBED_UBUNTU_INSTALL_PATH=/home/ubuntu/evel
67
68 #******************************************************************************
69 # The test-collector is where we can send events to be consumed and checked   *
70 # during tests.                                                               *
71 #******************************************************************************
72 VNF_COLLECTOR_HOST=172.18.152.185
73 VNF_COLLECTOR_PORT=30000
74
75 #******************************************************************************
76 # A documentation server used by the team where we can install documentation. *
77 #******************************************************************************
78 TEAM_DOCS_SERVER=covlx8
79 DOCS_SERVER_PATH=/var/www/html/evel
80
81 #******************************************************************************
82 # Implicit rule to make dependency files.  Recipe copied from Gnu docs at:    *
83 # https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html                                      *
84 #******************************************************************************
85 %.d: %.c
86         @echo Making dependency file $(notdir $@) for $(notdir $<)
87         @set -e; rm -f $@; \
88          $(CC) -MM -MT $(<:.c=.o) $(CPPFLAGS) $< > $@.$$$$; \
89          sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
90          rm -f $@.$$$$
91
92 #******************************************************************************
93 # Implicit rule to make object files.                                         *
94 #******************************************************************************
95 %.o: %.c
96         @echo Making $(notdir $@) from $(notdir $<)
97         @$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
98
99 #******************************************************************************
100 # Implicit rule to make diagram files using PlantUML.                         *
101 #******************************************************************************
102 %.svg : %.plantuml
103         @echo Making $(notdir $@)
104         $(JAVA) -jar $(PLANTUML) $(PLANTFLAGS) $<
105
106 all:     api_library \
107
108 clean:   api_library_clean \
109          evel_unit_clean \
110
111 install: evel_install_centos evel_install_ubuntu
112
113 test: evel_test_centos evel_test_ubuntu
114
115 docs:    docs_clean doxygen_docs
116
117
118 #******************************************************************************
119 # Build the EVEL libraries.                                                   *
120 #******************************************************************************
121 API_SOURCES=$(EVELLIB_ROOT)/evel.c \
122             $(EVELLIB_ROOT)/metadata.c \
123             $(EVELLIB_ROOT)/ring_buffer.c \
124             $(EVELLIB_ROOT)/double_list.c \
125             $(EVELLIB_ROOT)/hashtable.c \
126             $(EVELLIB_ROOT)/evel_event.c \
127             $(EVELLIB_ROOT)/evel_fault.c \
128             $(EVELLIB_ROOT)/evel_mobile_flow.c \
129             $(EVELLIB_ROOT)/evel_option.c \
130             $(EVELLIB_ROOT)/evel_jsonobject.c \
131             $(EVELLIB_ROOT)/evel_other.c \
132             $(EVELLIB_ROOT)/evel_json_buffer.c \
133             $(EVELLIB_ROOT)/evel_reporting_measurement.c \
134             $(EVELLIB_ROOT)/evel_heartbeat_fields.c \
135             $(EVELLIB_ROOT)/evel_sipsignaling.c \
136             $(EVELLIB_ROOT)/evel_scaling_measurement.c \
137             $(EVELLIB_ROOT)/evel_state_change.c \
138             $(EVELLIB_ROOT)/evel_strings.c \
139             $(EVELLIB_ROOT)/evel_syslog.c \
140             $(EVELLIB_ROOT)/evel_throttle.c \
141             $(EVELLIB_ROOT)/evel_internal_event.c \
142             $(EVELLIB_ROOT)/evel_event_mgr.c \
143             $(EVELLIB_ROOT)/evel_voicequality.c \
144             $(EVELLIB_ROOT)/evel_logging.c \
145             $(EVELLIB_ROOT)/jsmn.c
146 API_OBJECTS=$(API_SOURCES:.c=.o)
147 -include $(API_SOURCES:.c=.d)
148
149 api_library: $(LIBS_DIR)/libevel.so \
150              $(LIBS_DIR)/libevel.a
151
152 $(LIBS_DIR)/libevel.a: $(API_OBJECTS)
153         @echo   Linking API Static Library
154         @$(CC) $(LIBCFLAGS) -o $@ $+
155
156 $(LIBS_DIR)/libevel.so: $(API_OBJECTS)
157         @echo   Linking API Shared Library
158         @$(CC) $(LIBCFLAGS) -L $(QLIBCLIBSDIR) -lqlibc -o $@ $+
159
160 api_library_clean:
161         @echo   Cleaning API Library
162         @$(RM) $(LIBS_DIR)/libevel.so
163         @$(RM) $(API_OBJECTS)
164         @$(RM) $(EVELLIB_ROOT)/*.d
165
166 #******************************************************************************
167 # Build the EVEL library unit test.                                           *
168 #******************************************************************************
169 UNIT_SOURCES=$(EVELUNIT_ROOT)/evel_unit.c
170 UNIT_OBJECTS=$(UNIT_SOURCES:.c=.o)
171 -include $(UNIT_SOURCES:.c=.d)
172
173 evel_unit: api_library \
174            $(OUTPUT_DIR)/evel_unit
175
176 $(OUTPUT_DIR)/evel_unit: $(UNIT_OBJECTS)
177         @echo   Linking EVEL unit test
178         $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ \
179                           -L $(LIBS_DIR) \
180                           $(UNIT_OBJECTS) \
181                           -level \
182                           -lpthread \
183                           -lcurl
184
185 evel_unit_clean:
186         @echo   Cleaning EVEL unit test
187         @$(RM) $(OUTPUT_DIR)/evel_unit
188         @$(RM) $(API_OBJECTS)
189         @$(RM) $(UNIT_OBJECTS)
190         @$(RM) $(EVELLIB_ROOT)/*.d
191         @$(RM) $(EVELUNIT_ROOT)/*.d
192
193 #******************************************************************************
194 # Copy the EVEL demo onto the CentOS testbed as a package and build it.       *
195 #******************************************************************************
196 evel_install_centos: delivery
197         @echo Installing EVEL library on CentOS testbed...
198         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
199           rm -rf $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
200           mkdir -p $(TESTBED_CENTOS_DOWNLOAD_PATH) \; \
201           mkdir -p $(TESTBED_CENTOS_INSTALL_PATH)
202         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
203            $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS):$(TESTBED_CENTOS_DOWNLOAD_PATH)
204         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
205           tar zx --directory $(TESTBED_CENTOS_INSTALL_PATH) \
206                  --file $(TESTBED_CENTOS_DOWNLOAD_PATH)/evel-library-package.tgz
207         @echo Making EVEL library on testbed...
208         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
209            cd $(TESTBED_CENTOS_INSTALL_PATH)/bldjobs \; \
210            make clean all
211
212 #******************************************************************************
213 # Copy the EVEL demo onto the Ubuntu testbed as a package and build it.       *
214 #******************************************************************************
215 evel_install_ubuntu: delivery
216         @echo Installing EVEL library on Ubuntu testbed...
217         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
218           rm -rf $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
219           mkdir -p $(TESTBED_UBUNTU_DOWNLOAD_PATH) \; \
220           mkdir -p $(TESTBED_UBUNTU_INSTALL_PATH)
221         @$(SCP) -r $(CODE_ROOT)/output/evel-library-package.tgz \
222            $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU):$(TESTBED_UBUNTU_DOWNLOAD_PATH)
223         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
224           tar zx --directory $(TESTBED_UBUNTU_INSTALL_PATH) \
225                  --file $(TESTBED_UBUNTU_DOWNLOAD_PATH)/evel-library-package.tgz
226         @echo Making EVEL library on testbed...
227         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
228            cd $(TESTBED_UBUNTU_INSTALL_PATH)/bldjobs \; \
229            make clean all
230
231 #******************************************************************************
232 # Make sure that the Centos platform is up to date and then run the software  *
233 # against a test collector.  Validating correct operation is not presently    *
234 # automated.                                                                  *
235 #******************************************************************************
236 evel_test_centos: evel_install_centos
237         @echo Testing EVEL Demo application on CentOS...
238         @$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
239            source .bash_profile \; \
240            $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
241                                                  --fqdn $(VNF_COLLECTOR_HOST) \
242                                                  --port $(VNF_COLLECTOR_PORT) \
243                                                  --verbose
244
245 #******************************************************************************
246 # Make sure that the Ubuntu 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_ubuntu: evel_install_ubuntu
251         @echo Testing EVEL Demo application on Ubuntu...
252         @$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
253            source .profile \; \
254            $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
255                                                  --fqdn $(VNF_COLLECTOR_HOST) \
256                                                  --port $(VNF_COLLECTOR_PORT) \
257                                                  --verbose
258
259 #******************************************************************************
260 # Making a clean delivery has some very specific dependencies which are order *
261 # dependent, so we recursively make a series of targets to do a clean  build  *
262 # of all of the required deliverables and then finally zipping up.            *
263 #******************************************************************************
264 delivery:
265         @$(MAKE) -s delivery_baseline
266         @$(MAKE) -s package
267
268 delivery_baseline:      docs
269
270 #******************************************************************************
271 # Package the software for delivery.                                          *
272 #******************************************************************************
273 package: api_library_clean \
274          evel_unit_clean
275         @echo Packaging the software for delivery
276         @cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz  bldjobs \
277                                                       code \
278                                                       docs \
279                                                       libs/x86_64/README \
280                                                       output/x86_64/README \
281                                                       readme.md
282
283 package_clean:
284         @echo Clean delivery packages
285         @$(RM) $(OUTPUTDIR)/*.tgz