blob: 920a381742b5f85f4fe6dca020dbdb3e9be6b5f1 [file] [log] [blame]
Shad Ansari01b0e652018-04-05 21:02:53 +00001# Copyright (C) 2018 Open Networking Foundation
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation, either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16########################################################################
17##
18##
Luca Pretee75aaa52018-04-13 12:19:12 -070019## Config
Shad Ansari01b0e652018-04-05 21:02:53 +000020##
21##
Jason Huangaf7f6472019-05-04 03:19:07 +080022TOP_DIR=`pwd`
Shad Ansari9acc9732018-10-30 18:01:44 +000023OPENOLTDEVICE ?= generic
Craig Lutgen88a22ad2018-10-04 12:30:46 -050024
Shad Ansari01b0e652018-04-05 21:02:53 +000025#
26# Three vendor proprietary source files are required to build BAL.
27# SW-BCM68620_<VER>.zip - Broadcom BAL source and Maple SDK.
28# sdk-all-<SDK_VER>.tar.gz - Broadcom Qumran SDK.
Craig Lutgenf040dba2018-09-27 11:21:43 -050029# ACCTON_BAL_<BAL_VER>-<DEV_VER>.patch - Accton/Edgecore's patch.
Jason Huangd33b4d82019-05-15 18:22:57 +080030BAL_MAJOR_VER = 3
31BAL_MINOR_VER = 0
32BAL_REV_A_VER = 3
33BAL_REV_B_VER = 3
34BAL_API_VER = $(BAL_MAJOR_VER).$(BAL_MINOR_VER)
35BAL_VER = $(BAL_MAJOR_VER).$(BAL_MINOR_VER).$(BAL_REV_A_VER).$(BAL_REV_B_VER)
Jason Huangaf7f6472019-05-04 03:19:07 +080036SDK_VER = 6.5.13
37DEV_VER ?= 201904171432
Shad Ansari01b0e652018-04-05 21:02:53 +000038#
39# Version of Open Network Linux (ONL).
Jason Huangaf7f6472019-05-04 03:19:07 +080040ONL_KERN_VER_MAJOR = 4.14
Shad Ansari01b0e652018-04-05 21:02:53 +000041#
42# Build directory
43BUILD_DIR = build
Luca Pretee75aaa52018-04-13 12:19:12 -070044#
45# GRPC installation
46GRPC_ADDR = https://github.com/grpc/grpc
47GRPC_DST = /tmp/grpc
48GRPC_VER = v1.10.x
Shad Ansari2cddc552018-06-26 20:34:27 +000049
50USER := $(shell echo $(USER))
Luca Pretee75aaa52018-04-13 12:19:12 -070051#
Shad Ansari01b0e652018-04-05 21:02:53 +000052########################################################################
53##
54##
Luca Prete08e6f802018-04-17 11:49:45 -070055## Install prerequisites
Shad Ansari01b0e652018-04-05 21:02:53 +000056##
57##
58HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
59SYSTEM ?= $(HOST_SYSTEM)
Luca Pretee75aaa52018-04-13 12:19:12 -070060
Craig Lutgenf040dba2018-09-27 11:21:43 -050061LIBGRPC_PATH=$(shell pkg-config --libs-only-L grpc | sed s/-L// | sed s/\ //g)
62LIBPROTOBUF_PATH=$(shell PKG_CONFIG_ALLOW_SYSTEM_LIBS=true pkg-config --libs-only-L protobuf | sed s/-L// | sed s/\ //g)
63
64CXX = @CXX@
65CXXFLAGS += @CXXFLAGS@
66CXXFLAGS += $(shell pkg-config --cflags-only-I grpc++)
Shad Ansari01b0e652018-04-05 21:02:53 +000067CPPFLAGS += `pkg-config --cflags protobuf grpc`
Craig Lutgen7ebee132018-11-16 15:31:11 -060068CXXFLAGS += -std=c++11 -fpermissive -Wno-literal-suffix
Craig Lutgenf040dba2018-09-27 11:21:43 -050069LDFLAGS += @LDFLAGS@
70LDFLAGS += `pkg-config --libs protobuf grpc++ grpc` -ldl -lgpr
Shad Ansari9acc9732018-10-30 18:01:44 +000071CXXFLAGSDEVICE = -I./device -I./device/$(OPENOLTDEVICE) -I./device/generic
Craig Lutgenf040dba2018-09-27 11:21:43 -050072
73export CXX CXXFLAGS
Luca Pretee75aaa52018-04-13 12:19:12 -070074
Luca Prete08e6f802018-04-17 11:49:45 -070075prereq:
nick6fa80732018-05-22 14:47:10 -040076 sudo apt-get -q -y install git pkg-config build-essential autoconf libtool libgflags-dev libgtest-dev clang libc++-dev unzip docker.io
77 sudo apt-get install -y build-essential autoconf libssl-dev gawk debhelper dh-systemd init-system-helpers
Luca Pretee75aaa52018-04-13 12:19:12 -070078
Shad Ansari563ea822018-06-28 14:56:27 +000079 # Install GRPC, libprotobuf and protoc
Luca Pretee75aaa52018-04-13 12:19:12 -070080 rm -rf $(GRPC_DST)
81 git clone -b $(GRPC_VER) $(GRPC_ADDR) $(GRPC_DST)
82 cd $(GRPC_DST) && git submodule update --init
Shad Ansari563ea822018-06-28 14:56:27 +000083 cd $(GRPC_DST)/third_party/protobuf && ./autogen.sh && ./configure
Luca Prete08e6f802018-04-17 11:49:45 -070084 make -C $(GRPC_DST)/third_party/protobuf
85 sudo make -C $(GRPC_DST)/third_party/protobuf install
86 sudo ldconfig
Shad Ansari563ea822018-06-28 14:56:27 +000087 make -C $(GRPC_DST)
88 sudo make -C $(GRPC_DST) install
89 sudo ldconfig
Shad Ansaricb004c52018-05-30 18:07:23 +000090
Shad Ansari2cddc552018-06-26 20:34:27 +000091docker:
92 echo $(USER)
93 sudo groupadd -f docker
94ifneq "$(USER)" ""
95 sudo usermod -aG docker $(USER)
96endif
97
Shad Ansari01b0e652018-04-05 21:02:53 +000098########################################################################
99##
100##
Luca Pretee75aaa52018-04-13 12:19:12 -0700101## ONL
Shad Ansari01b0e652018-04-05 21:02:53 +0000102##
103##
Shad Ansari9acc9732018-10-30 18:01:44 +0000104ONL_REPO = $(OPENOLTDEVICE)-onl
Shad Ansari01b0e652018-04-05 21:02:53 +0000105ONL_DIR = $(BUILD_DIR)/$(ONL_REPO)
Shad Ansari01b0e652018-04-05 21:02:53 +0000106onl:
107 if [ ! -d "$(ONL_DIR)/OpenNetworkLinux" ]; then \
108 mkdir -p $(ONL_DIR); \
Jason Huangaf7f6472019-05-04 03:19:07 +0800109 git clone https://github.com/opencomputeproject/OpenNetworkLinux.git $(ONL_DIR)/OpenNetworkLinux; \
110 cp download/Makefile.onl $(ONL_DIR)/Makefile; \
Jason Huangd33b4d82019-05-15 18:22:57 +0800111 install -m 755 download/build-$(OPENOLTDEVICE).sh $(ONL_DIR)/OpenNetworkLinux; \
Shad Ansari9acc9732018-10-30 18:01:44 +0000112 make -C $(ONL_DIR) $(OPENOLTDEVICE)-$(ONL_KERN_VER_MAJOR); \
Shad Ansari01b0e652018-04-05 21:02:53 +0000113 fi;
114onl-force:
Shad Ansari9acc9732018-10-30 18:01:44 +0000115 make -C $(ONL_DIR) $(OPENOLTDEVICE)-$(ONL_KERN_VER_MAJOR)
Shad Ansari01b0e652018-04-05 21:02:53 +0000116distclean-onl:
117 sudo rm -rf $(ONL_DIR)
118
119########################################################################
120##
121##
Jason Huangd33b4d82019-05-15 18:22:57 +0800122## Broadcom LIBRARY APIs
123##
124##
125BAL_API_DIR = $(BUILD_DIR)/bal-api-$(BAL_API_VER)
126
127bal-api-$(BAL_API_VER):
128 if [ ! -d "$(BAL_API_DIR)" ]; then \
129 mkdir -p $(BAL_API_DIR); \
130 git clone https://github.com/balapi/bal-api-3.0.git $(BAL_API_DIR); \
131 fi;
132bal-api-clean:
133 rm $(BAL_API_DIR)
134
135########################################################################
136##
137##
Luca Pretee75aaa52018-04-13 12:19:12 -0700138## BAL
Shad Ansari01b0e652018-04-05 21:02:53 +0000139##
140##
Jason Huangaf7f6472019-05-04 03:19:07 +0800141BAL_ZIP = SW-BCM68620_$(subst .,_,$(BAL_VER)).tgz
Shad Ansari01b0e652018-04-05 21:02:53 +0000142SDK_ZIP = sdk-all-$(SDK_VER).tar.gz
Craig Lutgenf040dba2018-09-27 11:21:43 -0500143ACCTON_PATCH = ACCTON_BAL_$(BAL_VER)-V$(DEV_VER).patch
Shad Ansari9acc9732018-10-30 18:01:44 +0000144BAL_DIR = $(BUILD_DIR)/$(OPENOLTDEVICE)-bal
Jason Huangd33b4d82019-05-15 18:22:57 +0800145BCM_SDK = $(BAL_DIR)/switch_sdk/$(SDK_VER)
146BALLIBDIR = $(BAL_DIR)/build/host_reference/host_api
147BALLIBNAME = bal_host_api
148BAL_INC = -I$(BAL_DIR)/host_driver/bal/bal_include \
149 -I$(BAL_DIR)/host_driver/topology \
150 -I$(BAL_DIR)/host_driver/utils \
151 -I$(BAL_DIR)/host_driver/api \
152 -I$(BAL_DIR)/host_customized/os_abstraction \
153 -I$(BAL_DIR)/host_customized/os_abstraction/posix \
154 -I$(BAL_DIR)/host_customized/config \
155 -I$(BAL_DIR)/host_driver/api_conn_mgr \
156 -I$(BAL_DIR)/host_driver/conn_mgr \
157 -I$(BAL_DIR)/host_driver/api/host/topology \
158 -I$(BAL_DIR)/host_reference/cli \
159 -I$(BAL_DIR)/host_reference/api_cli \
160 -I$(BAL_API_DIR)/include \
161 -I$(BAL_API_DIR)/include/object_model
Shad Ansari01b0e652018-04-05 21:02:53 +0000162CXXFLAGS += $(BAL_INC) -I $(BAL_DIR)/lib/cmdline
Jason Huangd33b4d82019-05-15 18:22:57 +0800163CXXFLAGS += -DBCMOS_MSG_QUEUE_DOMAIN_SOCKET -DBCMOS_MSG_QUEUE_UDP_SOCKET -DBCMOS_MEM_CHECK -DBCMOS_SYS_UNITTEST -DENABLE_LOG -DENABLE_CLI
Shad Ansaricb004c52018-05-30 18:07:23 +0000164
Jason Huangd33b4d82019-05-15 18:22:57 +0800165sdk: onl bal-api-$(BAL_API_VER)
Shad Ansari01b0e652018-04-05 21:02:53 +0000166ifeq ("$(wildcard $(BAL_DIR))","")
167 mkdir $(BAL_DIR)
Jason Huangaf7f6472019-05-04 03:19:07 +0800168 tar zxvf download/$(BAL_ZIP) --strip 1 -C $(BAL_DIR)
Shad Ansari01b0e652018-04-05 21:02:53 +0000169 cp download/$(SDK_ZIP) $(BCM_SDK)
170 chmod -R 744 $(BAL_DIR)
171 cat download/$(ACCTON_PATCH) | patch -p1 -d $(BAL_DIR)
Jason Huangd33b4d82019-05-15 18:22:57 +0800172 make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) ONL_DIR=$(TOP_DIR)/$(ONL_DIR)/OpenNetworkLinux SW_UTIL_SHELL=y OPEN_SOURCE=y
Jason Huangaf7f6472019-05-04 03:19:07 +0800173 make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) release_board
Shad Ansari01b0e652018-04-05 21:02:53 +0000174endif
Shad Ansaricb004c52018-05-30 18:07:23 +0000175
Jason Huangaf7f6472019-05-04 03:19:07 +0800176bal-release: sdk
Jason Huangaf7f6472019-05-04 03:19:07 +0800177 make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) release_board
Shad Ansaricb004c52018-05-30 18:07:23 +0000178
179bal-clean:
Jason Huangaf7f6472019-05-04 03:19:07 +0800180 make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) clean
Shad Ansari01b0e652018-04-05 21:02:53 +0000181
182########################################################################
183##
184##
Luca Pretee75aaa52018-04-13 12:19:12 -0700185## OpenOLT API
Shad Ansari01b0e652018-04-05 21:02:53 +0000186##
187##
Shad Ansari56c8ea42018-10-30 19:34:35 +0000188OPENOLT_PROTOS_DIR = ../protos
Shad Ansari19249582018-04-30 04:31:00 +0000189OPENOLT_API_LIB = $(OPENOLT_PROTOS_DIR)/libopenoltapi.a
Shad Ansari627b5782018-08-13 22:49:32 +0000190CXXFLAGS += -I$(OPENOLT_PROTOS_DIR) -I$(OPENOLT_PROTOS_DIR)/googleapis/gens
Shad Ansari19249582018-04-30 04:31:00 +0000191protos:
192 make -C $(OPENOLT_PROTOS_DIR) all
Shad Ansaricc01de12018-05-21 22:54:45 +0000193protos-clean:
Shad Ansari19249582018-04-30 04:31:00 +0000194 -make -C $(OPENOLT_PROTOS_DIR) clean
Shad Ansari01b0e652018-04-05 21:02:53 +0000195
196########################################################################
197##
198##
Shad Ansari627b5782018-08-13 22:49:32 +0000199## common
Shad Ansari7193ae22018-08-08 22:23:18 +0000200##
201##
Shad Ansari627b5782018-08-13 22:49:32 +0000202common/%.o: common/%.cc
203 $(CXX) $(CXXFLAGS) -I./common -c $< -o $@
Shad Ansari7193ae22018-08-08 22:23:18 +0000204
205########################################################################
206##
207##
Craig Lutgen88a22ad2018-10-04 12:30:46 -0500208## device
209##
210##
Shad Ansari9acc9732018-10-30 18:01:44 +0000211device/$(OPENOLTDEVICE)/%.o: device/$(OPENOLTDEVICE)/%.cc
Craig Lutgen88a22ad2018-10-04 12:30:46 -0500212 $(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) -c $< -o $@
213
214device/generic/%.o: device/generic/%.cc
215 $(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) -c $< -o $@
216
217########################################################################
218##
219##
Shad Ansari627b5782018-08-13 22:49:32 +0000220## sim
Shad Ansari01b0e652018-04-05 21:02:53 +0000221##
222##
Shad Ansari627b5782018-08-13 22:49:32 +0000223SIM_SRCS = $(wildcard sim/*.cc) $(wildcard common/*.cc)
224SIM_OBJS = $(SIM_SRCS:.cc=.o)
225SIM_DEPS = $(SIM_SRCS:.cc=.d)
226sim: sim/openoltsim
227sim/openoltsim: protos $(SIM_OBJS)
228 $(CXX) -pthread -L/usr/local/lib $(SIM_OBJS) $(OPENOLT_API_LIB) /usr/local/lib/libprotobuf.a -o $@ -lgrpc++ -lgrpc -lpthread -ldl
229sim/%.o: sim/%.cc
230 $(CXX) -std=c++11 -fpermissive -Wno-literal-suffix -I./common -I$(OPENOLT_PROTOS_DIR) -I$(OPENOLT_PROTOS_DIR)/googleapis/gens -c $< -o $@
231clean-sim:
232 rm -f sim/openoltsim $(SIM_OBJS) $(SIM_DEPS)
233
234########################################################################
235##
236##
237## openolt
238##
239##
Shad Ansari9acc9732018-10-30 18:01:44 +0000240SRCS = $(wildcard src/*.cc) $(wildcard common/*.cc) $(wildcard device/$(OPENOLTDEVICE)/*.cc)
Shad Ansari01b0e652018-04-05 21:02:53 +0000241OBJS = $(SRCS:.cc=.o)
242DEPS = $(SRCS:.cc=.d)
243.DEFAULT_GOAL := all
Jason Huangd33b4d82019-05-15 18:22:57 +0800244all: $(BUILD_DIR)/openolt
Shad Ansaricb004c52018-05-30 18:07:23 +0000245$(BUILD_DIR)/openolt: sdk protos $(OBJS)
Shad Ansari06a13322018-09-29 01:55:33 +0000246 $(CXX) $(LDFLAGS) -L$(BALLIBDIR) $(OBJS) $(OPENOLT_API_LIB) $(LIBPROTOBUF_PATH)/libprotobuf.a -o $@ -l$(BALLIBNAME) $(shell pkg-config --libs protobuf grpc++ grpc)
Jason Huangd33b4d82019-05-15 18:22:57 +0800247 ln -sf $(TOP_DIR)/$(BAL_DIR)/build/fs/$(OPENOLTDEVICE)/release/release_$(OPENOLTDEVICE)_V$(BAL_MAJOR_VER).$(BAL_MINOR_VER).$(BAL_REV_A_VER).$(DEV_VER).tar.gz $(BUILD_DIR)/.
248 ln -sf $(TOP_DIR)/$(BAL_DIR)/build/host_reference/host_api/strip/libbal_host_api.so $(BUILD_DIR)/.
249 ln -sf $(TOP_DIR)/$(BAL_DIR)/build/host_driver/dev_mgmt_daemon/dev_mgmt_daemon $(BUILD_DIR)/.
Craig Lutgenf040dba2018-09-27 11:21:43 -0500250 ln -sf $(LIBGRPC_PATH)/libgrpc.so.6 $(BUILD_DIR)/libgrpc.so.6
251 ln -sf $(LIBGRPC_PATH)/libgrpc++.so.1 $(BUILD_DIR)/libgrpc++.so.1
Jason Huangd33b4d82019-05-15 18:22:57 +0800252 ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $(BUILD_DIR)/libstdc++.so.6
Jason Huangfd78f662019-06-05 20:25:01 +0800253 strip $(BUILD_DIR)/openolt
Shad Ansari627b5782018-08-13 22:49:32 +0000254src/%.o: src/%.cc
Craig Lutgen88a22ad2018-10-04 12:30:46 -0500255 $(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) -I./common -c $< -o $@
Shad Ansari01b0e652018-04-05 21:02:53 +0000256
Shad Ansari6cd46a62018-05-13 23:20:51 +0000257deb:
Jason Huangfd78f662019-06-05 20:25:01 +0800258 cp $(BUILD_DIR)/release_$(OPENOLTDEVICE)_V$(BAL_MAJOR_VER).$(BAL_MINOR_VER).$(BAL_REV_A_VER).$(DEV_VER).tar.gz mkdebian/debian
Shad Ansari9fb007d2018-05-14 18:31:38 +0000259 cp $(BUILD_DIR)/openolt mkdebian/debian
260 cp $(BUILD_DIR)/libgrpc.so.6 mkdebian/debian
261 cp $(BUILD_DIR)/libgrpc++.so.1 mkdebian/debian
Jason Huangfd78f662019-06-05 20:25:01 +0800262 cp $(BUILD_DIR)/libstdc++.so.6 mkdebian/debian
263 cp $(BUILD_DIR)/libbal_host_api.so mkdebian/debian
Shad Ansarid0eaf752018-08-16 00:26:12 +0000264 cp -a scripts/init.d mkdebian/debian
Shad Ansari9acc9732018-10-30 18:01:44 +0000265 cd mkdebian && ./build_$(OPENOLTDEVICE)_deb.sh
Shad Ansari6cd46a62018-05-13 23:20:51 +0000266 mv *.deb $(BUILD_DIR)/openolt.deb
Shad Ansaricb004c52018-05-30 18:07:23 +0000267 make deb-cleanup
Shad Ansari6cd46a62018-05-13 23:20:51 +0000268
Shad Ansari01b0e652018-04-05 21:02:53 +0000269src/%.o: %.cpp
270 $(CXX) -MMD -c $< -o $@
271
Shad Ansaricb004c52018-05-30 18:07:23 +0000272deb-cleanup:
Shad Ansari9acc9732018-10-30 18:01:44 +0000273 rm -f mkdebian/debian/$(OPENOLTDEVICE).debhelper.log
274 rm -f mkdebian/debian/$(OPENOLTDEVICE).postinst.debhelper
275 rm -f mkdebian/debian/$(OPENOLTDEVICE).postrm.debhelper
276 rm -f mkdebian/debian/$(OPENOLTDEVICE).substvars
277 rm -rf mkdebian/debian/$(OPENOLTDEVICE)/
Shad Ansaricc01de12018-05-21 22:54:45 +0000278 rm -f mkdebian/debian/libgrpc++.so.1
Shad Ansaricc01de12018-05-21 22:54:45 +0000279 rm -f mkdebian/debian/libgrpc.so.6
280 rm -f mkdebian/debian/openolt
Shad Ansari9acc9732018-10-30 18:01:44 +0000281 rm -f mkdebian/debian/release_$(OPENOLTDEVICE)_V$(BAL_MAJOR_VER).$(DEV_VER).tar.gz
Shad Ansaricc01de12018-05-21 22:54:45 +0000282 rm -rf mkdebian/debian/tmp/
Shad Ansari9acc9732018-10-30 18:01:44 +0000283 rm -f $(OPENOLTDEVICE)_$(BAL_VER)+edgecore-V$(DEV_VER)_amd64.changes
Shad Ansaricc01de12018-05-21 22:54:45 +0000284
Shad Ansaricb004c52018-05-30 18:07:23 +0000285clean: protos-clean deb-cleanup
Shad Ansari19249582018-04-30 04:31:00 +0000286 rm -f $(OBJS) $(DEPS)
Craig Lutgen19512312018-11-02 10:14:46 -0500287 rm -rf $(OPENOLT_PROTOS_DIR)/googleapis
Shad Ansari563ea822018-06-28 14:56:27 +0000288 rm -f $(BUILD_DIR)/libgrpc.so.6 $(BUILD_DIR)/libgrpc++.so.1
Shad Ansaricb004c52018-05-30 18:07:23 +0000289 rm -f $(BUILD_DIR)/libbal_api_dist.so
290 rm -f $(BUILD_DIR)/openolt
291 rm -f $(BUILD_DIR)/bal_core_dist
Shad Ansari9acc9732018-10-30 18:01:44 +0000292 rm -f $(BUILD_DIR)/release_$(OPENOLTDEVICE)_V$(BAL_MAJOR_VER).$(DEV_VER).tar.gz
Shad Ansaricb004c52018-05-30 18:07:23 +0000293 rm -f $(BUILD_DIR)/openolt.deb
Shad Ansari19249582018-04-30 04:31:00 +0000294
295distclean:
Shad Ansari01b0e652018-04-05 21:02:53 +0000296 rm -rf $(BUILD_DIR)
Shad Ansaricb004c52018-05-30 18:07:23 +0000297
Shad Ansari627b5782018-08-13 22:49:32 +0000298.PHONY: onl sdk bal protos prereq sim