blob: b4b1551793ff9e1c20415bc47eb10f729dacf289 [file] [log] [blame]
#
# 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"