# Copyright (C) 2018 Open Networking Foundation
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

########################################################################
##
##
## 				Config
##
##
DEVICE = asfvolt16
#
# 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>-<ACCTON_VER>.patch - Accton/Edgecore's patch.
BAL_MAJOR_VER = 02.04
BAL_VER = 2.4.3.6
SDK_VER = 6.5.7
ACCTON_VER = 201710131639
#
# Version of Open Network Linux (ONL).
ONL_KERN_VER_MAJOR = 3.7
ONL_KERN_VER_MINOR = 10
#
# Build directory
BUILD_DIR = build

########################################################################
##
##
## 				Check
##
##
HOST_SYSTEM = $(shell uname | cut -f 1 -d_)
SYSTEM ?= $(HOST_SYSTEM)
CXX = g++
CPPFLAGS += `pkg-config --cflags protobuf grpc`
CXXFLAGS += -std=c++11 -fpermissive -Wno-literal-suffix
ifeq ($(SYSTEM),Darwin)
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
           -lgrpc++_reflection\
           -ldl
else
LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++ grpc`\
           -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed\
           -ldl
endif
PROTOC = protoc
GRPC_CPP_PLUGIN = grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
GRPC_CPP_VER ?= `command curl -L https://grpc.io/release`
PROTOC_CMD = which $(PROTOC)
PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
ifeq ($(HAS_PROTOC),true)
HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
endif
HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)
check:
	sudo apt-get -q -y install git pkg-config build-essential autoconf libtool libgflags-dev libgtest-dev clang libc++-dev
ifneq ($(HAS_VALID_PROTOC),true)
	mkdir -p /tmp/$(PROTOC_NAME)
	wget -P /tmp/$(PROTOC_NAME) $(PROTOC_DOWNLOAD_URL)/v$(PROTOC_VERSION)/$(PROTOC_NAME).zip
	unzip -o /tmp/$(PROTOC_NAME)/$(PROTOC_NAME) -d /tmp/$(PROTOC_NAME)
	mkdir -p $(PWD)/bin
	cp -f /tmp/$(PROTOC_NAME)/bin/protoc $(PWD)/bin/.
	mkdir -p $(PWD)/include
	cp -rf /tmp/$(PROTOC_NAME)/include/* $(PWD)/include/.
	rm -rf /tmp/$(PROTOC_NAME)
endif
ifneq ($(HAS_PLUGIN),true)
	rm -rf /tmp/grpc
	git clone -b $(GRPC_CPP_VER) https://github.com/grpc/grpc /tmp/grpc
	cd /tmp/grpc && git submodule update --init
	make -C /tmp/grpc
	sudo make -C /tmp/grpc install
	make -C /tmp/grpc/third_party/protobuf
	sudo make -C /tmp/grpc/third_party/protobuf install
	rm -rf /tmp/grpc
endif

########################################################################
##
##
## 				ONL
##
##
ONL_KERN_VER = $(ONL_KERN_VER_MAJOR).$(ONL_KERN_VER_MINOR)
ONL_REPO = $(DEVICE)-onl
ONL_DIR = $(BUILD_DIR)/$(ONL_REPO)
.PHONY: onl
onl:
	if [ ! -d "$(ONL_DIR)/OpenNetworkLinux" ]; then \
		mkdir -p $(ONL_DIR); \
		git clone git@github.com:shadansari/$(ONL_REPO).git $(ONL_DIR); \
		make -C $(ONL_DIR) $(DEVICE)-$(ONL_KERN_VER_MAJOR); \
	fi;
onl-force:
	make -C $(ONL_DIR) $(DEVICE)-$(ONL_KERN_VER_MAJOR)
clean-onl:
distclean-onl:
	sudo rm -rf $(ONL_DIR)

########################################################################
##
##
## 				BAL
##
##
BAL_ZIP = SW-BCM68620_$(subst .,_,$(BAL_VER)).zip
SDK_ZIP = sdk-all-$(SDK_VER).tar.gz
ACCTON_PATCH = ACCTON_BAL_$(BAL_VER)-V$(ACCTON_VER).patch
OPENOLT_BAL_PATCH = OPENOLT_BAL_$(BAL_VER).patch
BAL_DIR = $(BUILD_DIR)/$(DEVICE)-bal
ONL_KERNDIR = $(PWD)/$(ONL_DIR)/OpenNetworkLinux/packages/base/amd64/kernels/kernel-$(ONL_KERN_VER_MAJOR)-x86-64-all/builds
MAPLE_KERNDIR = $(BAL_DIR)/bcm68620_release/$(DEVICE)/kernels
BCM_SDK = $(BAL_DIR)/bal_release/3rdparty/bcm-sdk
BALLIBDIR = $(BAL_DIR)/bal_release/build/core/lib
BALLIBNAME = bal_api_dist
BAL_INC = -I$(BAL_DIR)/bal_release/src/common/os_abstraction \
	-I$(BAL_DIR)/bal_release/src/common/os_abstraction/posix \
	-I$(BAL_DIR)/bal_release/src/common/config \
	-I$(BAL_DIR)/bal_release/src/core/platform \
	-I$(BAL_DIR)/bal_release/src/common/include \
	-I$(BAL_DIR)/bal_release/src/lib/libbalapi \
	-I$(BAL_DIR)/bal_release/3rdparty/maple/sdk/host_driver/utils \
	-I$(BAL_DIR)/bal_release/src/balapiend \
	-I$(BAL_DIR)/bal_release/src/common/dev_log \
	-I$(BAL_DIR)/bal_release/src/common/bal_dist_utils  \
	-I$(BAL_DIR)/bal_release/src/lib/libtopology \
	-I$(BAL_DIR)/bal_release/3rdparty/maple/sdk/host_driver/model \
	-I$(BAL_DIR)/bal_release/3rdparty/maple/sdk/host_driver/api \
	-I$(BAL_DIR)/bal_release/src/lib/libcmdline \
	-I$(BAL_DIR)/bal_release/src/lib/libutils \
	-I$(BAL_DIR)/bal_release/3rdparty/maple/sdk/host_reference/cli
CXXFLAGS += $(BAL_INC) -I $(BAL_DIR)/lib/cmdline
.PHONY: get-$(BAL_DIR)
get-$(BAL_DIR):
#	if [ ! -e "download/$(BAL_ZIP)" ]; then \
#		rm -rf /tmp/broadcom-proprietary; \
#		git clone git@github.com:shadansari/broadcom-proprietary.git /tmp/broadcom-proprietary; \
#		mv -f /tmp/broadcom-proprietary/$(BAL_VER)/$(BAL_ZIP) ./download; \
#		mv -f /tmp/broadcom-proprietary/$(BAL_VER)/$(SDK_ZIP) ./download; \
#		mv -f /tmp/broadcom-proprietary/$(BAL_VER)/$(ACCTON_PATCH) ./download; \
#		mv -f /tmp/broadcom-proprietary/$(BAL_VER)/$(OPENOLT_BAL_PATCH) ./download; \
#		rm -rf /tmp/broadcom-proprietary; \
#	fi;
.PHONY: bal
bal: onl get-$(BAL_DIR)
ifeq ("$(wildcard $(BAL_DIR))","")
	mkdir $(BAL_DIR)
	unzip download/$(BAL_ZIP) -d $(BAL_DIR)
	cp download/$(SDK_ZIP) $(BCM_SDK)
	chmod -R 744 $(BAL_DIR)
	cat download/$(ACCTON_PATCH) | patch -p1 -d $(BAL_DIR)
	mkdir -p $(MAPLE_KERNDIR)
	ln -s $(ONL_KERNDIR)/linux-$(ONL_KERN_VER) $(MAPLE_KERNDIR)/linux-$(ONL_KERN_VER)
	ln -s $(ONL_DIR)/OpenNetworkLinux/packages/base/any/kernels/archives/linux-$(ONL_KERN_VER).tar.xz $(MAPLE_KERNDIR)/linux-$(ONL_KERN_VER).tar.xz
	ln -s $(ONL_DIR)/OpenNetworkLinux/packages/base/any/kernels/$(ONL_KERN_VER_MAJOR)/configs/x86_64-all/x86_64-all.config $(MAPLE_KERNDIR)/x86_64-all.config
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) maple_sdk_dir
	cat download/$(OPENOLT_BAL_PATCH) | patch -p1 -d $(BAL_DIR)
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) maple_sdk
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) switch_sdk_dir
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) switch_sdk
	KERNDIR=$(ONL_KERNDIR)/linux-$(ONL_KERN_VER) BOARD=$(DEVICE) ARCH=x86_64 SDKBUILD=build_bcm_user make -C $(BCM_SDK)/build-$(DEVICE)/sdk-all-$(SDK_VER)/systems/linux/user/x86-generic_64-2_6
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) bal
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) release_board
	ln -s -f $(PWD)/$(BAL_DIR)/bcm68620_release/asfvolt16/release/release_$(DEVICE)_V$(BAL_MAJOR_VER).$(ACCTON_VER).tar.gz . 
	ln -s -f $(PWD)/$(BAL_DIR)/bal_release/build/core/lib/libbal_api_dist.so .
	ln -s -f $(PWD)/$(BAL_DIR)/bal_release/build/core/src/apps/bal_core_dist/bal_core_dist
	mv -f release_$(DEVICE)_V$(BAL_MAJOR_VER).$(ACCTON_VER).tar.gz $(BUILD_DIR)
	mv -f libbal_api_dist.so $(BUILD_DIR)
	mv -f bal_core_dist $(BUILD_DIR)
endif
bal-rebuild:
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) maple_sdk
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) switch_sdk
	KERNDIR=$(ONL_KERNDIR)/linux-$(ONL_KERN_VER) BOARD=$(DEVICE) ARCH=x86_64 SDKBUILD=build_bcm_user make -C $(BCM_SDK)/build-$(DEVICE)/sdk-all-$(SDK_VER)/systems/linux/user/x86-generic_64-2_6
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) bal
	make -C $(BAL_DIR)/bal_release BOARD=$(DEVICE) release_board
	ln -s -f $(PWD)/$(BAL_DIR)/bcm68620_release/asfvolt16/release/release_$(DEVICE)_V$(BAL_MAJOR_VER).$(ACCTON_VER).tar.gz .
	ln -s -f $(PWD)/$(BAL_DIR)/bal_release/build/core/lib/libbal_api_dist.so .
	ln -s -f $(PWD)/$(BAL_DIR)/bal_release/build/core/src/apps/bal_core_dist/bal_core_dist .
	mv -f release_$(DEVICE)_V$(BAL_MAJOR_VER).$(ACCTON_VER).tar.gz $(BUILD_DIR)
	mv -f libbal_api_dist.so $(BUILD_DIR)
	mv -f bal_core_dist $(BUILD_DIR)
clean-bal: clean-onl
distclean-bal: distclean-onl
	sudo rm -rf $(BAL_DIR)
	rm -f build/release_$(DEVICE)_V$(BAL_MAJOR_VER).$(ACCTON_VER).tar.gz

########################################################################
##
##
## 				OpenOLT API
##
##
OPENOLT_API_DIR = $(BUILD_DIR)/openolt-api
OPENOLT_API_LIB = $(OPENOLT_API_DIR)/libopenoltapi.a
CXXFLAGS += -I./$(OPENOLT_API_DIR) -I $(OPENOLT_API_DIR)/googleapis/gens
.PHONY: openolt-api
openolt-api:
	if [ ! -e "$(OPENOLT_API_DIR)" ]; then \
		mkdir -p $(BUILD_DIR); \
		git clone git@github.com:shadansari/openolt-api.git $(OPENOLT_API_DIR); \
	fi;
	make -C $(OPENOLT_API_DIR) all
clean-openolt-api:
	-make -C $(OPENOLT_API_DIR) clean
distclean-openolt-api:

########################################################################
##
##
## 				Main
##
##
SRCS = $(wildcard src/*.cc)
OBJS = $(SRCS:.cc=.o)
DEPS = $(SRCS:.cc=.d)
.DEFAULT_GOAL := all
all: $(BUILD_DIR)/openolt
$(BUILD_DIR)/openolt: check openolt-api bal $(OBJS)
	$(CXX) $(OBJS) $(LDFLAGS) $(OPENOLT_API_LIB) -o $@ -L$(BALLIBDIR) -l$(BALLIBNAME)
	ln -s $(shell ldconfig -p | grep libgrpc.so.5 | tr ' ' '\n' | grep /) $(BUILD_DIR)/libgrpc.so.5
	ln -s $(shell ldconfig -p | grep libgrpc++.so.1 | tr ' ' '\n' | grep /) $(BUILD_DIR)/libgrpc++.so.1
	ln -s $(shell ldconfig -p | grep libgrpc++_reflection.so.1 | tr ' ' '\n' | grep /) $(BUILD_DIR)/libgrpc++_reflection.so.1

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

clean: clean-bal
	rm -f $(OBJS) $(DEPS) $(BUILD_DIR)/openolt
	rm -rf $(OPENOLT_API_DIR)
distclean: distclean-openolt-api distclean-bal
	rm -rf $(BUILD_DIR)
-include $(DEPS)
