Updating onos-setup-p4-dev to support gNMI

- Adding gNMI dependencies
- Updating PI and BMv2 to build with sysrepo support
- Building simple_switch_grpc with Thrift server

Change-Id: Ida69d80353652174b0bc61a16b6436bf78a2d194
diff --git a/tools/dev/bin/onos-setup-p4-dev b/tools/dev/bin/onos-setup-p4-dev
index b44f915..319f93e 100755
--- a/tools/dev/bin/onos-setup-p4-dev
+++ b/tools/dev/bin/onos-setup-p4-dev
@@ -15,11 +15,13 @@
 set -e
 
 BUILD_DIR=~/p4tools
-BMV2_COMMIT="d930fa2818d8ed71f3bf36eaf3f3687d9b68184f"
-PI_COMMIT="13d611a9c655938676ebcde2bd5653b461f46ca7"
-P4C_COMMIT="cb8f118ed2861986cd20a3e34f18ee7ae3862233"
+BMV2_COMMIT="3f1d8d7893d7cf1657285c8aacbb4af5c6d22620"
+PI_COMMIT="0325da7746efe192935e8969fd08eed68d654c98"
+P4C_COMMIT="4c0d629ce2492294ff4108c910f8e6be44112c68"
 PROTOBUF_COMMIT="tags/v3.2.0"
 GRPC_COMMIT="tags/v1.3.2"
+LIBYANG_COMMIT="v0.14-r1"
+SYSREPO_COMMIT="v0.7.2"
 
 NUM_CORES=`grep -c ^processor /proc/cpuinfo`
 
@@ -35,6 +37,7 @@
         curl \
         flex \
         git \
+        libavl-dev \
         libboost-dev \
         libboost-program-options-dev \
         libboost-system-dev \
@@ -46,6 +49,7 @@
         libboost-test-dev \
         libboost-thread-dev \
         libc6-dev \
+        libev-dev \
         libevent-dev \
         libffi-dev \
         libfl-dev \
@@ -53,12 +57,12 @@
         libgc1c2 \
         libgflags-dev \
         libgmp-dev \
-        libjudy-dev \
-        libpcap-dev \
         libgmp10 \
         libgmpxx4ldbl \
         libjudy-dev \
         libpcap-dev \
+        libpcre3-dev \
+        libprotobuf-c-dev \
         libreadline6 \
         libreadline6-dev \
         libssl-dev \
@@ -66,6 +70,7 @@
         make \
         mktemp \
         pkg-config \
+        protobuf-c-compiler \
         python \
         python-dev \
         python-ipaddr \
@@ -76,7 +81,7 @@
         wget \
         unzip
 
-    sudo pip install setuptools cffi
+    sudo pip install setuptools cffi grpcio
 }
 
 function do_requirements_1404 {
@@ -85,7 +90,6 @@
     sudo add-apt-repository -y ppa:george-edison55/cmake-3.x
     sudo apt update
     sudo apt install -y \
-        cmake \
         dpkg-dev \
         g++-4.9 \
         gcc-4.9 \
@@ -100,7 +104,6 @@
     sudo apt-get update
     sudo apt-get install -y --no-install-recommends \
         ca-certificates \
-        cmake \
         g++ \
         libboost-iostreams1.58-dev
 }
@@ -142,6 +145,41 @@
     unset LDFLAGS
 }
 
+function do_libyang {
+    cd ${BUILD_DIR}
+    if [ ! -d libyang ]; then
+      git clone https://github.com/CESNET/libyang.git
+    fi
+    cd libyang
+    git fetch
+    git checkout ${LIBYANG_COMMIT}
+
+    mkdir build
+    cd build
+    cmake ..
+    make -j${NUM_CORES}
+    sudo make install
+    sudo ldconfig
+}
+
+function do_sysrepo {
+    cd ${BUILD_DIR}
+    if [ ! -d sysrepo ]; then
+      git clone https://github.com/sysrepo/sysrepo.git
+    fi
+    cd sysrepo
+    git fetch
+    git checkout ${SYSREPO_COMMIT}
+
+    mkdir build
+    cd build
+    cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=Off \
+        -DCALL_TARGET_BINS_DIRECTLY=Off ..
+    make -j${NUM_CORES}
+    sudo make install
+    sudo ldconfig
+}
+
 function checkout_bmv2 {
     cd ${BUILD_DIR}
     if [ ! -d bmv2 ]; then
@@ -177,10 +215,12 @@
     git submodule update --init --recursive
 
     ./autogen.sh
-    ./configure --with-proto 'CXXFLAGS=-O0 -g'
+    ./configure --with-proto --with-sysrepo 'CXXFLAGS=-O0 -g'
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
+
+    sudo sysrepo/install_yangs.sh
 }
 
 function do_bmv2 {
@@ -195,7 +235,7 @@
     # Simple_switch_grpc target
     cd targets/simple_switch_grpc
     ./autogen.sh
-    ./configure 'CXXFLAGS=-O0 -g'
+    ./configure --with-sysrepo --with-thrift 'CXXFLAGS=-O0 -g'
     make -j${NUM_CORES}
     sudo make install
     sudo ldconfig
@@ -240,13 +280,14 @@
 MUST_DO_ALL=false
 DID_REQUIREMENTS=false
 function check_and_do {
-    # Check if the latest built commit is the same we are trying to build now, or if all projects
-    # must be built. If true builds this project.
+    # Check if the latest built commit is the same we are trying to build now,
+    # or if all projects must be built. If true builds this project.
     commit_id="$1"
     proj_dir="$2"
     func_name="$3"
     simple_name="$4"
-    if ${MUST_DO_ALL} = true || check_commit ${commit_id} ${proj_dir}/.last_built_commit; then
+    if ${MUST_DO_ALL} = true \
+        || check_commit ${commit_id} ${proj_dir}/.last_built_commit; then
         echo "#"
         echo "# Building ${simple_name} (${commit_id})"
         echo "#"
@@ -254,7 +295,8 @@
         set -x
         if ! ${DID_REQUIREMENTS} = true; then
             do_requirements
-            #TODO consider other Linux distros; presently this script assumes that it is running on Ubuntu
+            # TODO consider other Linux distros; presently this script assumes
+            # that it is running on Ubuntu.
             RELEASE=`lsb_release -rs`
             if version_ge $RELEASE 16.04; then
                 do_requirements_1604
@@ -282,6 +324,8 @@
 # In dependency order.
 check_and_do ${PROTOBUF_COMMIT} protobuf do_protobuf protobuf
 check_and_do ${GRPC_COMMIT} grpc do_grpc grpc
+check_and_do ${LIBYANG_COMMIT} libyang do_libyang libyang
+check_and_do ${SYSREPO_COMMIT} sysrepo do_sysrepo sysrepo
 check_and_do ${BMV2_COMMIT} bmv2 do_pi_bmv2_deps bmv2-deps
 check_and_do ${PI_COMMIT} p4runtime do_p4runtime p4runtime
 check_and_do ${BMV2_COMMIT} bmv2 do_bmv2 bmv2