#
# Copyright 2017-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.
#
#
# Run from OpenNetworkLinux top directory
#
#cd /aux/OpenNetworkLinux
set -e
ASFVOLT_REPO_NAME=asfvolt16-driver
: ${MAKE_JOBS:=4}

# override shell variables to match custom local build environment
: ${ONL_TOPDIR:=`pwd`}
: ${BALSRC_RELEASE=${BROADCOM_DOWNLOAD_DIR}/bal_src_release}
: ${VOLTHA_TOPDIR:=${HOME}/voltha}
: ${BALSRC_TOPDIR:=${BALSRC_RELEASE}/bal_release}
: ${ASFSRC_TOPDIR:=${EDGECORE_DOWNLOAD_DIR}/${ASFVOLT_REPO_NAME}/src}
: ${PATCHF_TOPDIR:=${EDGECORE_DOWNLOAD_DIR}/${ASFVOLT_REPO_NAME}/patches}
: ${GRPC_C_PATH:=${EDGECORE_DOWNLOAD_DIR}/grpc-c}

echo ONL_TOPDIR=${ONL_TOPDIR}
echo MAKE_JOBS=${MAKE_JOBS}
echo BALSRC_RELEASE=${BALSRC_RELEASE}
echo VOLTHA_TOPDIR=${VOLTHA_TOPDIR}
echo BALSRC_TOPDIR=${BALSRC_TOPDIR}
echo ASFSRC_TOPDIR=${ASFSRC_TOPDIR}
echo PATCHF_TOPDIR=${PATCHF_TOPDIR}

# archived ZIP files from "https://github.com/opennetworkinglab/asfvolt16-driver/tree/master/third_party"
GRPC_ARCH=ed7d06af3eef1c27f10328c73b3ae3ab10d72b10
GRPC_C_ARCH=be82ab1605717f33e2e0d3038996ea46d9efe25e
PROTOBUF_ARCH=703cd8e11c8d34283d4c8bf869c61866e8211c9d
PROTOBUF_C_ARCH=6a4f9a9a67c06769aaa9f65e8f89a56483271f5a

cd ${EDGECORE_DOWNLOAD_DIR}

# Note: removes existing directories: grpc, protobuf
rm -rf grpc protobuf grpc-* protobuf-*

#Clone asfvolt16-driver
#    - The guide assumes that the asfvolt16-driver gerrit repo is cloned under the ONL toplevel directory:
#    - git clone ssh://user@gerrit.opencord.org:29418/asfvolt16-driver ${HOME}/OpenNetworkLinux/asfvolt16-driver

#git clone https://gerrit.opencord.org/${ASFVOLT_REPO_NAME} ${ONL_TOPDIR}/${ASFVOLT_REPO_NAME}

#steps to install grpc
#   - Download as zip "grpc", "grpc-c", "protobuf" and "protobuf-c" from "https://github.com/opennetworkinglab/asfvolt16-driver/tree/master/third_party"
#comment the below 4 lines and download manually in case of errors
wget https://github.com/grpc/grpc/archive/${GRPC_ARCH}.zip
wget https://github.com/Juniper/grpc-c/archive/${GRPC_C_ARCH}.zip
wget https://github.com/google/protobuf/archive/${PROTOBUF_ARCH}.zip
wget https://github.com/shadansari/protobuf-c/archive/${PROTOBUF_C_ARCH}.zip

#   - extract grpc at ${HOME}/OpenNetworkLinux/grpc
unzip -q ${GRPC_ARCH}.zip; rm ${GRPC_ARCH}.zip
mv grpc-${GRPC_ARCH} grpc

#   - extract grpc-c at ${HOME}/OpenNetworkLinux/grpc-c
unzip -q ${GRPC_C_ARCH}.zip; rm ${GRPC_C_ARCH}.zip
mv grpc-c-${GRPC_C_ARCH} grpc-c

#   - extract protobuf at ${HOME}/OpenNetworkLinux/grpc/thirdparty/protobuf
unzip -q ${PROTOBUF_ARCH}.zip; rm ${PROTOBUF_ARCH}.zip
mkdir -p grpc/thirdparty
mv protobuf-${PROTOBUF_ARCH} grpc/thirdparty/protobuf


#   - extract protobuf-c folder at ${HOME}/OpenNetworkLinux/grpc-c/third_party/protobuf-c
unzip -q ${PROTOBUF_C_ARCH}.zip; rm ${PROTOBUF_C_ARCH}.zip
(cd protobuf-c-${PROTOBUF_C_ARCH};tar cf - .)|(cd grpc-c/third_party/protobuf-c;tar xf -)
rm -rf protobuf-c-${PROTOBUF_C_ARCH}

#steps to install grpc-c
# cd ${HOME}/OpenNetworkLinux/grpc/thirdparty/protobuf
#  - ./autogen.sh
#  - ./configure
#  - make
#  - sudo make install
cd ${EDGECORE_DOWNLOAD_DIR}/grpc/thirdparty/protobuf
./autogen.sh
./configure
make --jobs=${MAKE_JOBS}
sudo make install

# cd ${HOME}/OpenNetworkLinux/grpc
# - export LD_LIBRARY_PATH=/usr/local/lib
# - make
# - sudo make install

cd ${EDGECORE_DOWNLOAD_DIR}/grpc
export LD_LIBRARY_PATH=/usr/local/lib
make --jobs=${MAKE_JOBS}
sudo make install

#cd ${HOME}/OpenNetworkLinux/grpc-c/third_party/protobuf-c
#- ./autogen.sh
#- ./configure
#- export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/protobuf
#- make
#- sudo make install

cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/third_party/protobuf-c
./autogen.sh
./configure
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/protobuf
make --jobs=${MAKE_JOBS}
sudo make install

#Apply grpc-c patch
#   - cd ${HOME}/OpenNetworkLinux/grpc-c/
cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c
#     Patch 1:
#     Apply patch in following link for grpc-c/lib - "https://github.com/Juniper/grpc-c/commit/353b40cd920cd749ed6cf71f8df17f1d5cf2c89d"
#     Note:
#        (This patch is having very few changes in two files(grpc-c/lib/client.c, grpc-c/lib/service.c. 
#         Download these two files from above link and replace at grpc-c/lib or merge these changes manually.)       
patch -p1 -i ${PATCHF_TOPDIR}/grpc-c_compile-error.patch

#     Patch 2:
#     Apply patch in service.c.patch and client.c.patch
patch -p1 -i ${PATCHF_TOPDIR}/grpc-c_asfvolt16.patch

cd ${ONL_TOPDIR}
cp ${ASFSRC_TOPDIR}/Makefile.am ${EDGECORE_DOWNLOAD_DIR}/grpc-c/examples/
cp ${ASFSRC_TOPDIR}/voltha_bal_driver.c ${EDGECORE_DOWNLOAD_DIR}/grpc-c/examples/

#
#     - cd ${HOME}/OpenNetworkLinux/grpc-c
#     - autoreconf --install
#     - mkdir build && cd build
#     - ../configure
#     - make
#     - sudo make install
cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c
autoreconf --install
mkdir build && cd build
../configure
make --jobs=${MAKE_JOBS}
sudo make install

#To obtain proto files - Have a repo sync of opencord voltha code base:
#     - git clone https://github.com/opencord/voltha.git ${HOME}/voltha
#     - cd ${HOME}/OpenNetworkLinux/grpc-c/
#     - cp ${HOME}/voltha/voltha/adapters/asfvolt16_olt/protos/* examples/
#
cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c
cp ${VOLTHA_TOPDIR}/voltha/adapters/asfvolt16_olt/protos/* examples

#To autogenerate code from proto files:
#     - cd ${HOME}/OpenNetworkLinux/grpc-c/build/examples
#     - make autogen
cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/build/examples
make autogen

#
#Build voltha_bal_driver:
#     - cd ${HOME}/OpenNetworkLinux/grpc-c/build/examples
#     - Note: Remove "-O2" from Makefile
#     - Note: Set EDGECORE and BRCM_PATH in Makefile
cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/build/examples
sed -i -e 's/-O2/-O0/g' \
       -e "s:^EDGECORE = /home/asfvolt/shared.*:#&\nEDGECORE = ${ASFSRC_TOPDIR}:" \
       -e "s:^BRCM_PATH = /home/asfvolt/shared.*:#&\nBRCM_PATH = ${BALSRC_TOPDIR}:" \
        Makefile

pushd ${ASFSRC_TOPDIR}
sed -i -e "s:^BRDCM_SRC=/home/asfvolt/shared.*:#&\nBRDCM_SRC = ${BALSRC_TOPDIR}:" \
       -e "s:^GRPC_C_PATH=/home/asfvolt/shared.*:#&\nGRPC_C_PATH = ${GRPC_C_PATH}:" \
       Makefile
popd

#```
#       EDGECORE = ${EDGECORE_DOWNLOAD_DIR}asfvolt16-driver/src/
#       BRCM_PATH = ${BROADCOM_DOWNLOAD_DIR}/bal_src_release/bal_release
#```
#     - make clean_all;make
make clean_all
make
#
#The ultimate executable voltha_bal_driver can be found under ~/grpc-c/build/examples/.libs/

echo "${ASFVOLT_REPO_NAME} build complete"
