#Copyright 2018-present Open Networking Foundation
#
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#
#http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#limitations under the License.

########################################################################
##
##
##        Config
##
##
TOP_DIR=`pwd`
OPENOLTDEVICE ?= generic

#
# Three vendor proprietary source files are required to build BAL.
# SW-BCM68620_<VER>.zip - Broadcom BAL source and Maple SDK.
# sdk-all-<SDK_VER>.tar.gz - Broadcom Qumran SDK.
# ACCTON_BAL_<BAL_VER>-<DEV_VER>.patch - Accton/Edgecore's patch.
BAL_MAJOR_VER = 3
BAL_MINOR_VER = 4
BAL_REV_A_VER = 3
BAL_REV_B_VER = 3
BAL_API_VER = $(BAL_MAJOR_VER).$(BAL_MINOR_VER).$(BAL_REV_A_VER).$(BAL_REV_B_VER)
BAL_VER = $(BAL_MAJOR_VER).$(BAL_MINOR_VER).$(BAL_REV_A_VER).$(BAL_REV_B_VER)
SDK_VER = 6.5.13
DEV_VER ?= 202002100101
#
# Version of Open Network Linux (ONL).
ONL_KERN_VER_MAJOR = 4.14

# OpenOLT Proto version.
# This specifies the GIT tag in https://github.com/opencord/voltha-protos
# repo that we need to refer to, to pick the right version of
# openolt.proto and tech_profile.proto
OPENOLT_PROTO_VER ?= v3.4.3

# Variables used for Inband build
INBAND = "n"
VLAN_ID = 4093

#
# Build directory
BUILD_DIR = build

# Protobuf installation
PROTOBUF_VER ?= 3.5.0
PROTOBUF_ADDR = https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOBUF_VER)/protobuf-cpp-$(PROTOBUF_VER).tar.gz
PROTOBUF_DST = /tmp/protobuf-$(PROTOBUF_VER)
protoc-bin = $(shell which protoc)

#
# GRPC installation
GRPC_ADDR = https://github.com/grpc/grpc
GRPC_DST = /tmp/grpc
GRPC_VER = v1.10.x
grpc-cpp-plugin-bin = $(shell which grpc_cpp_plugin)

USER := $(shell echo $(USER))
#
########################################################################
##
##
##        Install prerequisites
##
##
HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
SYSTEM ?= $(HOST_SYSTEM)

VERSION                 ?= $(shell cat ../VERSION)

#set ref and commit date only if committed
LABEL_VCS_URL       ?= $(shell git remote get-url $(shell git remote))
LABEL_VCS_REF       = $(shell git rev-parse HEAD)
LABEL_BUILD_DATE    ?= $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")
LABEL_COMMIT_DATE   = $(shell git show -s --format=%cd --date=iso-strict HEAD)

LIBGRPC_PATH=$(shell pkg-config --libs-only-L grpc | sed s/-L// | sed s/\ //g)
LIBPROTOBUF_PATH=$(shell PKG_CONFIG_ALLOW_SYSTEM_LIBS=true pkg-config --libs-only-L protobuf | sed s/-L// | sed s/\ //g)

CXX = @CXX@-4.9
CXXFLAGS += @CXXFLAGS@
CXXFLAGS += $(shell pkg-config --cflags-only-I grpc++)
CPPFLAGS += @CPPFLAGS@
CPPFLAGS += `pkg-config --cflags protobuf grpc`
CPPFLAGS += -DVERSION=\"$(VERSION)\" -DBAL_VER=\"$(BAL_VER)\" -DLABEL_VCS_URL=\"$(LABEL_VCS_URL)\" \
            -DLABEL_VCS_REF=\"$(LABEL_VCS_REF)\" -DLABEL_BUILD_DATE=\"$(LABEL_BUILD_DATE)\" \
            -DLABEL_COMMIT_DATE=\"$(LABEL_COMMIT_DATE)\" -DFLOW_CHECKER
CPPFLAGS += -I./
CXXFLAGS += -std=c++11 -fpermissive -Wno-literal-suffix
LDFLAGS += @LDFLAGS@
LDFLAGS += `pkg-config --libs protobuf grpc++ grpc` -ldl -lgpr
CXXFLAGSDEVICE = -I./device -I./device/$(OPENOLTDEVICE) -I./device/generic

export CXX CXXFLAGS OPENOLT_PROTO_VER

prereqs-system:
	sudo apt-get -q -y install git pkg-config build-essential autoconf libtool libgflags-dev libgtest-dev clang libc++-dev unzip docker.io
	sudo apt-get install -y build-essential autoconf libssl-dev gawk debhelper dh-systemd init-system-helpers curl cmake ccache g++-4.9

prereqs-local: $(protoc-bin) $(grpc-cpp-plugin-bin)

$(protoc-bin):
	# Install protobuf
	rm -rf $(PROTOBUF_DST)
	cd /tmp && wget $(PROTOBUF_ADDR)
	cd /tmp && tar -zxvf protobuf-cpp-$(PROTOBUF_VER).tar.gz
	cd $(PROTOBUF_DST) && ./autogen.sh
	cd $(PROTOBUF_DST) && ./configure
	make -C $(PROTOBUF_DST)
	sudo make -C $(PROTOBUF_DST) install

$(grpc-cpp-plugin-bin):
	# Install GRPC, protoc
	rm -rf $(GRPC_DST)
	cd /tmp && git clone -b $(GRPC_VER) $(GRPC_ADDR) $(GRPC_DST)
	cd $(GRPC_DST) && git submodule update --init
	make -C $(GRPC_DST)
	sudo make -C $(GRPC_DST) install

docker:
	echo $(USER)
	sudo groupadd -f docker
ifneq "$(USER)" ""
	sudo usermod -aG docker $(USER)
endif

########################################################################
##
##
##        ONL
##
##
ONL_REPO = onl
ONL_DIR = $(BUILD_DIR)/$(ONL_REPO)
onl:
	if [ ! -d "$(ONL_DIR)/OpenNetworkLinux" ]; then \
		mkdir -p $(ONL_DIR); \
		git clone https://github.com/opencomputeproject/OpenNetworkLinux.git $(ONL_DIR)/OpenNetworkLinux; \
		cp download/Makefile.onl $(ONL_DIR)/Makefile; \
		install -m 755 download/build-onl.sh $(ONL_DIR)/OpenNetworkLinux; \
		make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=n; \
	else \
		if [ "$(INBAND)" = n -a "$$(grep "inband" $(ONL_DIR)/onl_build.mode | cut -d= -f 2)" = y ]; then \
			make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=n; \
		fi; \
	fi;
onl-force:
	make -C $(ONL_DIR) $(OPENOLTDEVICE)-$(ONL_KERN_VER_MAJOR)
distclean-onl:
	sudo rm -rf $(ONL_DIR)

########################################################################
##
##
##        Broadcom LIBRARY APIs
##
##
BAL_API_DIR = $(BUILD_DIR)/bal-api-$(BAL_API_VER)

bal-api-$(BAL_API_VER):
	if [ ! -d "$(BAL_API_DIR)" ]; then \
		mkdir -p $(BAL_API_DIR); \
		git clone https://github.com/balapi/bal-api-$(BAL_API_VER).git $(BAL_API_DIR); \
	fi;
bal-api-clean:
	rm $(BAL_API_DIR)

########################################################################
##
##
##        BAL
##
##
BAL_ZIP = SW-BCM686OLT_$(subst .,_,$(BAL_VER)).tgz
SDK_ZIP = sdk-all-$(SDK_VER).tar.gz
ACCTON_PATCH = ACCTON_BAL_$(BAL_VER)-V$(DEV_VER).patch
BAL_DIR = $(BUILD_DIR)/$(OPENOLTDEVICE)-bal
BCM_SDK = $(BAL_DIR)/switch_sdk/$(SDK_VER)
BALLIBDIR = $(BAL_DIR)/build/host_reference/host_api
BALLIBNAME = bal_host_api
BAL_INC = -I$(BAL_DIR)/host_driver/bal/bal_include \
          -I$(BAL_DIR)/host_driver/topology \
          -I$(BAL_DIR)/host_driver/utils \
          -I$(BAL_DIR)/host_driver/api \
          -I$(BAL_DIR)/host_driver/metadata \
          -I$(BAL_DIR)/host_customized/os_abstraction \
          -I$(BAL_DIR)/host_customized/os_abstraction/posix \
          -I$(BAL_DIR)/host_customized/config \
          -I$(BAL_DIR)/host_driver/api_conn_mgr \
          -I$(BAL_DIR)/host_driver/conn_mgr \
          -I$(BAL_DIR)/host_driver/api/host/topology \
          -I$(BAL_DIR)/host_reference/cli \
          -I$(BAL_DIR)/host_reference/api_cli \
          -I$(BAL_API_DIR)/include \
          -I$(BAL_API_DIR)/include/object_model
CXXFLAGS += $(BAL_INC) -I $(BAL_DIR)/lib/cmdline
CXXFLAGS += -DBCMOS_MSG_QUEUE_DOMAIN_SOCKET -DBCMOS_MSG_QUEUE_UDP_SOCKET -DBCMOS_MEM_CHECK -DBCMOS_SYS_UNITTEST -DENABLE_LOG -DENABLE_CLI

sdk: onl bal-api-$(BAL_API_VER)
ifeq ("$(wildcard $(BAL_DIR))","")
	mkdir $(BAL_DIR)
	tar zxvf download/$(BAL_ZIP) --strip 1 -C $(BAL_DIR)
	cp download/$(SDK_ZIP) $(BCM_SDK)
	chmod -R 744 $(BAL_DIR)
	cat download/$(ACCTON_PATCH) | patch -p1 -d $(BAL_DIR)
	make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) ONL_DIR=$(TOP_DIR)/$(ONL_DIR)/OpenNetworkLinux OPEN_SOURCE=y
	make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) release_board
endif

bal-release: sdk
	make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) release_board

bal-clean:
	make -C $(BAL_DIR) BOARD=$(OPENOLTDEVICE) clean_all

########################################################################
##
##
##        OpenOLT API
##
##
OPENOLT_PROTOS_DIR = ../protos
OPENOLT_API_LIB = $(OPENOLT_PROTOS_DIR)/libopenoltapi.a
CXXFLAGS += -I$(OPENOLT_PROTOS_DIR) -I$(OPENOLT_PROTOS_DIR)/googleapis/gens
protos:
	make -C $(OPENOLT_PROTOS_DIR) all
protos-clean:
	-make -C $(OPENOLT_PROTOS_DIR) clean

########################################################################
##
##
##        common
##
##

# A hack to force a re-build of common/main.cc everytime.
# This is needed to bake in the git VCS information in the openolt binary
# at the time of building the openolt package.
common/main.o: .FORCE
.FORCE:
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -I./common -c  common/main.cc -o common/main.o

common/%.o: common/%.cc
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -I./common -c $< -o $@

########################################################################
##
##
##        device
##
##
device/$(OPENOLTDEVICE)/%.o: device/$(OPENOLTDEVICE)/%.cc
	$(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) -c $< -o $@

device/generic/%.o: device/generic/%.cc
	$(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) -c $< -o $@

########################################################################
##
##
##        sim
##
##
SIM_SRCS = $(wildcard sim/*.cc) $(wildcard common/*.cc)
SIM_OBJS = $(SIM_SRCS:.cc=.o)
SIM_DEPS = $(SIM_SRCS:.cc=.d)
sim: sim/openoltsim
sim/openoltsim: protos $(SIM_OBJS)
	$(CXX) -pthread -L/usr/local/lib $(SIM_OBJS) $(OPENOLT_API_LIB) /usr/local/lib/libprotobuf.a -o $@ -lgrpc++ -lgrpc -lpthread -ldl
sim/%.o: sim/%.cc
	$(CXX) -std=c++11 -fpermissive -Wno-literal-suffix -I./common -I$(OPENOLT_PROTOS_DIR) -I$(OPENOLT_PROTOS_DIR)/googleapis/gens -c $< -o $@
clean-sim:
	rm -f sim/openoltsim $(SIM_OBJS) $(SIM_DEPS)

########################################################################
##
##
##        openolt
##
##
SRCS = $(wildcard src/*.cc) $(wildcard common/*.cc) $(wildcard device/$(OPENOLTDEVICE)/*.cc)
OBJS = $(SRCS:.cc=.o)
DEPS = $(SRCS:.cc=.d)
.DEFAULT_GOAL := all
all: $(BUILD_DIR)/openolt
$(BUILD_DIR)/openolt: sdk protos $(OBJS)
	$(CXX) $(LDFLAGS) -L$(BALLIBDIR) $(OBJS) $(OPENOLT_API_LIB) $(LIBPROTOBUF_PATH)/libprotobuf.a -o $@ -l$(BALLIBNAME) $(shell pkg-config --libs protobuf grpc++ grpc)
	ln -sf $(TOP_DIR)/$(BAL_DIR)/build/fs/$(OPENOLTDEVICE)/release/release_$(OPENOLTDEVICE)_V$(BAL_VER).$(DEV_VER).tar.gz $(BUILD_DIR)/.
	ln -sf $(TOP_DIR)/$(BAL_DIR)/build/host_reference/host_api/strip/libbal_host_api.so $(BUILD_DIR)/.
	ln -sf $(TOP_DIR)/$(BAL_DIR)/build/host_driver/dev_mgmt_daemon/dev_mgmt_daemon $(BUILD_DIR)/.
	ln -sf $(LIBGRPC_PATH)/libgrpc.so.6 $(BUILD_DIR)/libgrpc.so.6
	ln -sf $(LIBGRPC_PATH)/libgrpc++.so.1 $(BUILD_DIR)/libgrpc++.so.1
	ln -sf /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $(BUILD_DIR)/libstdc++.so.6
	strip $(BUILD_DIR)/openolt
	echo "inband=n" > $(ONL_DIR)/onl_build.mode
	if [ $(INBAND) = y ]; then \
	    echo "Building ONL+BAL+OpenoltAgent allinone image"; \
	    make deb; \
	    make inband-onl; \
	fi;

src/%.o: src/%.cc
	$(CXX) $(CXXFLAGS) $(CXXFLAGSDEVICE) $(CPPFLAGS) -I./common -c $< -o $@

deb:
	cp $(BUILD_DIR)/release_$(OPENOLTDEVICE)_V$(BAL_VER).$(DEV_VER).tar.gz device/$(OPENOLTDEVICE)/mkdebian/debian
	cp $(BUILD_DIR)/openolt device/$(OPENOLTDEVICE)/mkdebian/debian
	cp $(BUILD_DIR)/libgrpc.so.6 device/$(OPENOLTDEVICE)/mkdebian/debian
	cp $(BUILD_DIR)/libgrpc++.so.1 device/$(OPENOLTDEVICE)/mkdebian/debian
	cp $(BUILD_DIR)/libstdc++.so.6 device/$(OPENOLTDEVICE)/mkdebian/debian
	cp $(BUILD_DIR)/libbal_host_api.so device/$(OPENOLTDEVICE)/mkdebian/debian
	cp -a scripts/init.d device/$(OPENOLTDEVICE)/mkdebian/debian
	cp -a scripts/watchdog device/$(OPENOLTDEVICE)/mkdebian/debian
	cd device/$(OPENOLTDEVICE)/mkdebian && ./build_$(OPENOLTDEVICE)_deb.sh
	mv device/$(OPENOLTDEVICE)/*.deb $(BUILD_DIR)/openolt_$(OPENOLTDEVICE)-$(VERSION)-$(LABEL_VCS_REF).deb
	make deb-cleanup

inband-onl:
	# Clean previous ONL build and build freshly
	sudo rm -rf $(ONL_DIR)
	mkdir -p $(ONL_DIR)
	git clone https://github.com/opencomputeproject/OpenNetworkLinux.git $(ONL_DIR)/OpenNetworkLinux
	cp download/Makefile.onl $(ONL_DIR)/Makefile
	install -m 755 download/build-onl.sh $(ONL_DIR)/OpenNetworkLinux

	# Check ONL commit equals to Inband patch commit
	ONL_COMMIT_ID=$(awk \'/COMMIT_ID = /{print $0}\' $(ONL_DIR)/Makefile | awk -F \"=\" \'{print $2}\')
	INBAND_PATCH_COMMIT_ID=$(echo cp $(TOP_DIR)/inband/patch/*.patch | cut -d- -f 2 | cut -d. -f 1)
	if [ "$(ONL_COMMIT_ID)" = "$(INBAND_PATCH_COMMIT_ID)" ]; then \
	    echo "ONL commit and inband patch commit matched."; \
	    cp $(TOP_DIR)/inband/patch/*.patch $(ONL_DIR)/OpenNetworkLinux; \
	else \
	    echo "ONL commit and inband patch commit does not match. Exiting."; \
	    exit 1; \
	fi;

	# Update inband.config file with VLAN ID argument passed
	sed -i 's/asfvolt16_vlan_id_eth2=.*/asfvolt16_vlan_id_eth2=$(VLAN_ID)/' $(TOP_DIR)/inband/config/inband.config
	sed -i 's/asgvolt64_vlan_id_eth1=.*/asgvolt64_vlan_id_eth1=$(VLAN_ID)/' $(TOP_DIR)/inband/config/inband.config

	# Copy Inband config files and olt startup scripts to ONL source code and build
	cd $(TOP_DIR)  && mkdir -p $(ONL_DIR)/OpenNetworkLinux/bal_packages
	cp $(TOP_DIR)/inband/scripts/* $(ONL_DIR)/OpenNetworkLinux/bal_packages
	cp $(TOP_DIR)/inband/config/inband.config $(ONL_DIR)/OpenNetworkLinux/bal_packages
	cp $(BUILD_DIR)/openolt_$(OPENOLTDEVICE)-$(VERSION)-$(LABEL_VCS_REF).deb $(ONL_DIR)/OpenNetworkLinux/bal_packages/openolt_$(OPENOLTDEVICE).deb

	# Rebuild ONL packed with already built BAL+Openolt debian package
	make -C $(ONL_DIR) onl-$(ONL_KERN_VER_MAJOR) INBAND=y
	echo "inband=y" > $(ONL_DIR)/onl_build.mode
	make inband-onl-cleanup

src/%.o: %.cpp
	$(CXX) -MMD -c $< -o $@

deb-cleanup:
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/$(OPENOLTDEVICE).debhelper.log
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/$(OPENOLTDEVICE).postinst.debhelper
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/$(OPENOLTDEVICE).postrm.debhelper
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/$(OPENOLTDEVICE).substvars
	@rm -rf device/$(OPENOLTDEVICE)/mkdebian/debian/$(OPENOLTDEVICE)/
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/debhelper-build-stamp
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/libgrpc++.so.1
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/libgrpc.so.6
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/libstdc++.so.6
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/libbal_host_api.so
	@rm -rf device/$(OPENOLTDEVICE)/mkdebian/debian/init.d/
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/openolt
	@rm -f device/$(OPENOLTDEVICE)/mkdebian/debian/release_$(OPENOLTDEVICE)_V$(BAL_VER).$(DEV_VER).tar.gz
	@rm -rf device/$(OPENOLTDEVICE)/mkdebian/debian/tmp/
	@rm -f device/$(OPENOLTDEVICE)/$(OPENOLTDEVICE)_$(BAL_VER)+edgecore-V$(DEV_VER)_amd64.changes

inband-onl-cleanup:
	@rm -f $(ONL_DIR)/OpenNetworkLinux/*.patch
	@rm -rf $(ONL_DIR)/OpenNetworkLinux/bal_packages

clean: protos-clean deb-cleanup
	@rm -f $(OBJS) $(DEPS)
	@rm -rf $(OPENOLT_PROTOS_DIR)/googleapis
	@rm -f $(BUILD_DIR)/libgrpc.so.6 $(BUILD_DIR)/libgrpc++.so.1
	@rm -f $(BUILD_DIR)/libbal_host_api.so
	@rm -f $(BUILD_DIR)/openolt
	@rm -f $(BUILD_DIR)/dev_mgmt_daemon
	@rm -f $(BUILD_DIR)/release_$(OPENOLTDEVICE)_V$(BAL_VER).$(DEV_VER).tar.gz
	@rm -f $(BUILD_DIR)/openolt_$(OPENOLTDEVICE)-$(VERSION)-$(LABEL_VCS_REF).deb

clean-src: protos-clean
	@rm -f $(OBJS) $(DEPS)

distclean: clean-src clean
	@rm -rf $(BUILD_DIR)

.PHONY: onl sdk bal protos prereqs-system prereqs-local sim inband-onl .FORCE
