Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 1 | # |
| 2 | # Copyright 2017-present Open Networking Foundation |
| 3 | # |
| 4 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | # you may not use this file except in compliance with the License. |
| 6 | # You may obtain a copy of the License at |
| 7 | # |
| 8 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | # |
| 10 | # Unless required by applicable law or agreed to in writing, software |
| 11 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | # See the License for the specific language governing permissions and |
| 14 | # limitations under the License. |
| 15 | # |
| 16 | # |
| 17 | # Run from OpenNetworkLinux top directory |
| 18 | # |
| 19 | #cd /aux/OpenNetworkLinux |
| 20 | set -e |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 21 | ASFVOLT_REPO_NAME=asfvolt16-driver |
Kim Kempf | e109db7 | 2017-10-05 13:12:54 -0700 | [diff] [blame] | 22 | : ${MAKE_JOBS:=4} |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 23 | |
| 24 | # override shell variables to match custom local build environment |
| 25 | : ${ONL_TOPDIR:=`pwd`} |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 26 | : ${BALSRC_RELEASE=${BROADCOM_DOWNLOAD_DIR}/bal_src_release} |
| 27 | : ${VOLTHA_TOPDIR:=${HOME}/voltha} |
| 28 | : ${BALSRC_TOPDIR:=${BALSRC_RELEASE}/bal_release} |
| 29 | : ${ASFSRC_TOPDIR:=${EDGECORE_DOWNLOAD_DIR}/${ASFVOLT_REPO_NAME}/src} |
| 30 | : ${PATCHF_TOPDIR:=${EDGECORE_DOWNLOAD_DIR}/${ASFVOLT_REPO_NAME}/patches} |
| 31 | : ${GRPC_C_PATH:=${EDGECORE_DOWNLOAD_DIR}/grpc-c} |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 32 | |
| 33 | echo ONL_TOPDIR=${ONL_TOPDIR} |
Kim Kempf | e109db7 | 2017-10-05 13:12:54 -0700 | [diff] [blame] | 34 | echo MAKE_JOBS=${MAKE_JOBS} |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 35 | echo BALSRC_RELEASE=${BALSRC_RELEASE} |
| 36 | echo VOLTHA_TOPDIR=${VOLTHA_TOPDIR} |
| 37 | echo BALSRC_TOPDIR=${BALSRC_TOPDIR} |
| 38 | echo ASFSRC_TOPDIR=${ASFSRC_TOPDIR} |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 39 | echo PATCHF_TOPDIR=${PATCHF_TOPDIR} |
| 40 | |
| 41 | # archived ZIP files from "https://github.com/opennetworkinglab/asfvolt16-driver/tree/master/third_party" |
| 42 | GRPC_ARCH=ed7d06af3eef1c27f10328c73b3ae3ab10d72b10 |
| 43 | GRPC_C_ARCH=be82ab1605717f33e2e0d3038996ea46d9efe25e |
| 44 | PROTOBUF_ARCH=703cd8e11c8d34283d4c8bf869c61866e8211c9d |
| 45 | PROTOBUF_C_ARCH=6a4f9a9a67c06769aaa9f65e8f89a56483271f5a |
| 46 | |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 47 | cd ${EDGECORE_DOWNLOAD_DIR} |
| 48 | |
Kim Kempf | e109db7 | 2017-10-05 13:12:54 -0700 | [diff] [blame] | 49 | # Note: removes existing directories: grpc, protobuf |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 50 | rm -rf grpc protobuf grpc-* protobuf-* |
| 51 | |
| 52 | #Clone asfvolt16-driver |
| 53 | # - The guide assumes that the asfvolt16-driver gerrit repo is cloned under the ONL toplevel directory: |
| 54 | # - git clone ssh://user@gerrit.opencord.org:29418/asfvolt16-driver ${HOME}/OpenNetworkLinux/asfvolt16-driver |
| 55 | |
Kim Kempf | e109db7 | 2017-10-05 13:12:54 -0700 | [diff] [blame] | 56 | #git clone https://gerrit.opencord.org/${ASFVOLT_REPO_NAME} ${ONL_TOPDIR}/${ASFVOLT_REPO_NAME} |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 57 | |
| 58 | #steps to install grpc |
| 59 | # - Download as zip "grpc", "grpc-c", "protobuf" and "protobuf-c" from "https://github.com/opennetworkinglab/asfvolt16-driver/tree/master/third_party" |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 60 | #comment the below 4 lines and download manually in case of errors |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 61 | wget https://github.com/grpc/grpc/archive/${GRPC_ARCH}.zip |
| 62 | wget https://github.com/Juniper/grpc-c/archive/${GRPC_C_ARCH}.zip |
| 63 | wget https://github.com/google/protobuf/archive/${PROTOBUF_ARCH}.zip |
| 64 | wget https://github.com/shadansari/protobuf-c/archive/${PROTOBUF_C_ARCH}.zip |
| 65 | |
| 66 | # - extract grpc at ${HOME}/OpenNetworkLinux/grpc |
| 67 | unzip -q ${GRPC_ARCH}.zip; rm ${GRPC_ARCH}.zip |
| 68 | mv grpc-${GRPC_ARCH} grpc |
| 69 | |
| 70 | # - extract grpc-c at ${HOME}/OpenNetworkLinux/grpc-c |
| 71 | unzip -q ${GRPC_C_ARCH}.zip; rm ${GRPC_C_ARCH}.zip |
| 72 | mv grpc-c-${GRPC_C_ARCH} grpc-c |
| 73 | |
| 74 | # - extract protobuf at ${HOME}/OpenNetworkLinux/grpc/thirdparty/protobuf |
| 75 | unzip -q ${PROTOBUF_ARCH}.zip; rm ${PROTOBUF_ARCH}.zip |
| 76 | mkdir -p grpc/thirdparty |
| 77 | mv protobuf-${PROTOBUF_ARCH} grpc/thirdparty/protobuf |
| 78 | |
| 79 | |
| 80 | # - extract protobuf-c folder at ${HOME}/OpenNetworkLinux/grpc-c/third_party/protobuf-c |
| 81 | unzip -q ${PROTOBUF_C_ARCH}.zip; rm ${PROTOBUF_C_ARCH}.zip |
| 82 | (cd protobuf-c-${PROTOBUF_C_ARCH};tar cf - .)|(cd grpc-c/third_party/protobuf-c;tar xf -) |
| 83 | rm -rf protobuf-c-${PROTOBUF_C_ARCH} |
| 84 | |
| 85 | #steps to install grpc-c |
| 86 | # cd ${HOME}/OpenNetworkLinux/grpc/thirdparty/protobuf |
| 87 | # - ./autogen.sh |
| 88 | # - ./configure |
| 89 | # - make |
| 90 | # - sudo make install |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 91 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc/thirdparty/protobuf |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 92 | ./autogen.sh |
| 93 | ./configure |
| 94 | make --jobs=${MAKE_JOBS} |
| 95 | sudo make install |
| 96 | |
| 97 | # cd ${HOME}/OpenNetworkLinux/grpc |
| 98 | # - export LD_LIBRARY_PATH=/usr/local/lib |
| 99 | # - make |
| 100 | # - sudo make install |
| 101 | |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 102 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 103 | export LD_LIBRARY_PATH=/usr/local/lib |
| 104 | make --jobs=${MAKE_JOBS} |
| 105 | sudo make install |
| 106 | |
| 107 | #cd ${HOME}/OpenNetworkLinux/grpc-c/third_party/protobuf-c |
| 108 | #- ./autogen.sh |
| 109 | #- ./configure |
| 110 | #- export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/protobuf |
| 111 | #- make |
| 112 | #- sudo make install |
| 113 | |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 114 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/third_party/protobuf-c |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 115 | ./autogen.sh |
| 116 | ./configure |
| 117 | export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/protobuf |
| 118 | make --jobs=${MAKE_JOBS} |
| 119 | sudo make install |
| 120 | |
| 121 | #Apply grpc-c patch |
| 122 | # - cd ${HOME}/OpenNetworkLinux/grpc-c/ |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 123 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 124 | # Patch 1: |
| 125 | # Apply patch in following link for grpc-c/lib - "https://github.com/Juniper/grpc-c/commit/353b40cd920cd749ed6cf71f8df17f1d5cf2c89d" |
| 126 | # Note: |
| 127 | # (This patch is having very few changes in two files(grpc-c/lib/client.c, grpc-c/lib/service.c. |
| 128 | # Download these two files from above link and replace at grpc-c/lib or merge these changes manually.) |
| 129 | patch -p1 -i ${PATCHF_TOPDIR}/grpc-c_compile-error.patch |
| 130 | |
| 131 | # Patch 2: |
| 132 | # Apply patch in service.c.patch and client.c.patch |
| 133 | patch -p1 -i ${PATCHF_TOPDIR}/grpc-c_asfvolt16.patch |
| 134 | |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 135 | cd ${ONL_TOPDIR} |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 136 | cp ${ASFSRC_TOPDIR}/Makefile.am ${EDGECORE_DOWNLOAD_DIR}/grpc-c/examples/ |
| 137 | cp ${ASFSRC_TOPDIR}/voltha_bal_driver.c ${EDGECORE_DOWNLOAD_DIR}/grpc-c/examples/ |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 138 | |
| 139 | # |
| 140 | # - cd ${HOME}/OpenNetworkLinux/grpc-c |
| 141 | # - autoreconf --install |
| 142 | # - mkdir build && cd build |
| 143 | # - ../configure |
| 144 | # - make |
| 145 | # - sudo make install |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 146 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 147 | autoreconf --install |
| 148 | mkdir build && cd build |
| 149 | ../configure |
| 150 | make --jobs=${MAKE_JOBS} |
| 151 | sudo make install |
| 152 | |
| 153 | #To obtain proto files - Have a repo sync of opencord voltha code base: |
| 154 | # - git clone https://github.com/opencord/voltha.git ${HOME}/voltha |
| 155 | # - cd ${HOME}/OpenNetworkLinux/grpc-c/ |
| 156 | # - cp ${HOME}/voltha/voltha/adapters/asfvolt16_olt/protos/* examples/ |
| 157 | # |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 158 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 159 | cp ${VOLTHA_TOPDIR}/voltha/adapters/asfvolt16_olt/protos/* examples |
| 160 | |
| 161 | #To autogenerate code from proto files: |
| 162 | # - cd ${HOME}/OpenNetworkLinux/grpc-c/build/examples |
| 163 | # - make autogen |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 164 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/build/examples |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 165 | make autogen |
| 166 | |
| 167 | # |
| 168 | #Build voltha_bal_driver: |
| 169 | # - cd ${HOME}/OpenNetworkLinux/grpc-c/build/examples |
| 170 | # - Note: Remove "-O2" from Makefile |
| 171 | # - Note: Set EDGECORE and BRCM_PATH in Makefile |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 172 | cd ${EDGECORE_DOWNLOAD_DIR}/grpc-c/build/examples |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 173 | sed -i -e 's/-O2/-O0/g' \ |
| 174 | -e "s:^EDGECORE = /home/asfvolt/shared.*:#&\nEDGECORE = ${ASFSRC_TOPDIR}:" \ |
| 175 | -e "s:^BRCM_PATH = /home/asfvolt/shared.*:#&\nBRCM_PATH = ${BALSRC_TOPDIR}:" \ |
| 176 | Makefile |
| 177 | |
| 178 | pushd ${ASFSRC_TOPDIR} |
| 179 | sed -i -e "s:^BRDCM_SRC=/home/asfvolt/shared.*:#&\nBRDCM_SRC = ${BALSRC_TOPDIR}:" \ |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 180 | -e "s:^GRPC_C_PATH=/home/asfvolt/shared.*:#&\nGRPC_C_PATH = ${GRPC_C_PATH}:" \ |
| 181 | Makefile |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 182 | popd |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 183 | |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 184 | #``` |
Girish Gowdru | 9ebd8b2 | 2018-09-26 03:21:03 -0700 | [diff] [blame] | 185 | # EDGECORE = ${EDGECORE_DOWNLOAD_DIR}asfvolt16-driver/src/ |
| 186 | # BRCM_PATH = ${BROADCOM_DOWNLOAD_DIR}/bal_src_release/bal_release |
Kim Kempf | 531d52d | 2017-10-02 17:10:54 -0700 | [diff] [blame] | 187 | #``` |
| 188 | # - make clean_all;make |
| 189 | make clean_all |
| 190 | make |
| 191 | # |
| 192 | #The ultimate executable voltha_bal_driver can be found under ~/grpc-c/build/examples/.libs/ |
| 193 | |
| 194 | echo "${ASFVOLT_REPO_NAME} build complete" |