SDK: Scripts to generate plugin's skeleton code

done:
- create plugin folder structure
- manifest.json + icon.png
- copyright header
- main.cpp
- choose number of functionalities and the api to each one of them
- create src files for each functionality (APIs skeleton .h and .cpp)
- create preferences.json
- put colors into prints and clear outputs when needed
- modify src files to set preferences code
- create pakage.json
- add helper files
- use library Cmd
- reorganize functions into classes define inherits stack
- add GNU GPL to python files
- jpl merge function
- pre and post assembles
- default options plugin build
- windows build with build-plugin.py
- add build option for windows build
- generate base CMakeLists.txt and build.sh

Change-Id: Id8eb5a97fa7a51e99a0f9215835c3d5ffea630ad
GitLab: #2
diff --git a/GreenScreen/build.sh b/GreenScreen/build.sh
index ad60269..b046871 100755
--- a/GreenScreen/build.sh
+++ b/GreenScreen/build.sh
@@ -2,7 +2,7 @@
 # Build the plugin for the project
 export OSTYPE
 ARCH=$(arch)
-
+EXTRAPATH=''
 # Flags:
 
   # -p: number of processors to use
@@ -59,30 +59,25 @@
     TF="_tensorflow_cc"
 fi
 echo "Building with ${TF}"
-mkdir ./data/models
-
 
 if [[ "${TF}" = "_tensorflow_cc" ]] && [[ "${PLATFORM}" = "linux-gnu" ]]
 then
     if [ -z "$CUDALIBS" ]; then
-        rm -r ./data/models
         echo "CUDALIBS must point to CUDA 10.1!"
         exit
     fi
     if [ -z "$CUDNN" ]; then
-        rm -r ./data/models
         echo "CUDNN must point to libcudnn.so 7!"
         exit
     fi
 
     echo "Building for ${PROCESSOR}"
 
+    python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} 
+
     CONTRIB_PLATFORM_CURT=${ARCH}
     CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
-    DESTINATION_PATH="./../build/${CONTRIB_PLATFORM}/${TF}"
-    mkdir -p "lib/${CONTRIB_PLATFORM}"
-    mkdir -p "${DESTINATION_PATH}"
-
+    EXTRAPATH=${TF}
 
     # Compile
     clang++ -std=c++17 -shared -fPIC \
@@ -99,6 +94,7 @@
     -I"${LIBS_DIR}/${TF}/include" \
     -I"${LIBS_DIR}/${TF}/include/third_party/eigen3" \
     -I"${PLUGINS_LIB}" \
+    ./../lib/accel.cpp \
     main.cpp \
     videoSubscriber.cpp \
     pluginProcessor.cpp \
@@ -117,28 +113,30 @@
     -llibpng \
     -lva \
     -ltensorflow_cc \
-    -o "lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
+    -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
 
-    cp "${TF_LIBS_DIR}/${TF}/lib/${CONTRIB_PLATFORM}-gpu61/libtensorflow_cc.so" "lib/$CONTRIB_PLATFORM/libtensorflow_cc.so.2"
-    cp "${CUDALIBS}/libcudart.so" "lib/$CONTRIB_PLATFORM/libcudart.so.10.0"
-    cp "${CUDNN}/libcublas.so.10" "lib/$CONTRIB_PLATFORM/libcublas.so.10.0"
-    cp "${CUDALIBS}/libcufft.so.10" "lib/$CONTRIB_PLATFORM/libcufft.so.10.0"
-    cp "${CUDALIBS}/libcurand.so.10" "lib/$CONTRIB_PLATFORM/libcurand.so.10.0"
-    cp "${CUDALIBS}/libcusolver.so.10" "lib/$CONTRIB_PLATFORM/libcusolver.so.10.0"
-    cp "${CUDALIBS}/libcusparse.so.10" "lib/$CONTRIB_PLATFORM/libcusparse.so.10.0"
-    cp "${CUDNN}/libcudnn.so.7" "lib/$CONTRIB_PLATFORM"
+    cp "${TF_LIBS_DIR}/${TF}/lib/${CONTRIB_PLATFORM}-gpu61/libtensorflow_cc.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libtensorflow_cc.so.2"
+    cp "${CUDALIBS}/libcudart.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudart.so.10.0"
+    cp "${CUDNN}/libcublas.so.10" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublas.so.10.0"
+    cp "${CUDALIBS}/libcufft.so.10" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcufft.so.10.0"
+    cp "${CUDALIBS}/libcurand.so.10" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcurand.so.10.0"
+    cp "${CUDALIBS}/libcusolver.so.10" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcusolver.so.10.0"
+    cp "${CUDALIBS}/libcusparse.so.10" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcusparse.so.10.0"
+    cp "${CUDNN}/libcudnn.so.7" "build-local/jpl/lib/$CONTRIB_PLATFORM"
 
-    cp ./modelsSRC/mModel-resnet50float.pb ./data/models/mModel.pb
-    cp ./preferences-tfcc.json ./data/preferences.json
+    pwd
+    mkdir ./build-local/jpl/data/models
+    cp ./modelsSRC/mModel-resnet50float.pb ./build-local/jpl/data/models/mModel.pb
+    cp ./preferences-tfcc.json ./build-local/jpl/data/preferences.json
 elif [ "${TF}" = "_tensorflowLite" ]
 then
     if [ "${PLATFORM}" = "linux-gnu" ]
     then
+        python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
+
         CONTRIB_PLATFORM_CURT=${ARCH}
         CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
-        DESTINATION_PATH="./../build/${CONTRIB_PLATFORM}/${TF}"
-        mkdir -p "lib/${CONTRIB_PLATFORM}"
-        mkdir -p "${DESTINATION_PATH}"
+        EXTRAPATH="${TF}"
 
         # Compile
         clang++ -std=c++17 -shared -fPIC \
@@ -155,6 +153,7 @@
         -I"${LIBS_DIR}/${TF}/include/flatbuffers" \
         -I"${LIBS_DIR}/${TF}/include" \
         -I"${PLUGINS_LIB}" \
+        ./../lib/accel.cpp \
         main.cpp \
         videoSubscriber.cpp \
         pluginProcessor.cpp \
@@ -173,14 +172,13 @@
         -ltensorflowlite \
         -llibpng \
         -lva \
-        -o "lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
+        -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
 
-        cp "${TF_LIBS_DIR}/${TF}/lib/${CONTRIB_PLATFORM}/libtensorflowlite.so" "lib/$CONTRIB_PLATFORM"
+        cp "${TF_LIBS_DIR}/${TF}/lib/${CONTRIB_PLATFORM}/libtensorflowlite.so" "build-local/jpl/lib/$CONTRIB_PLATFORM"
 
     elif [ "${PLATFORM}" = "android" ]
     then
-        DESTINATION_PATH="./../build/android"
-        mkdir -p "${DESTINATION_PATH}"
+        python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
 
         if [ -z "$ANDROID_NDK" ]; then
              ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
@@ -198,7 +196,6 @@
 
         buildlib() {
             echo "$CURRENT_ABI"
-            mkdir -p "lib/$CURRENT_ABI"
 
             #=========================================================
             #    ANDROID TOOLS
@@ -241,8 +238,6 @@
 
             else
             echo "ABI NOT OK" >&2
-            rm -r lib/
-            rm -r ./data/models
             exit 1
             fi
 
@@ -304,6 +299,7 @@
             -I"${LIBS_DIR}/${TF}/include/flatbuffers" \
             -I"${LIBS_DIR}/${TF}/include" \
             -I"${PLUGINS_LIB}" \
+            ./../lib/accel.cpp \
             main.cpp \
             videoSubscriber.cpp \
             pluginProcessor.cpp \
@@ -323,9 +319,9 @@
             -ltensorflowlite \
             -llog -lz \
             --sysroot=$ANDROID_SYSROOT \
-            -o "lib/$CURRENT_ABI/${SO_FILE_NAME}"
+            -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
 
-            cp "${TF_LIBS_DIR}/${TF}/lib/${CURRENT_ABI}/libtensorflowlite.so" "lib/$CURRENT_ABI"
+            cp "${TF_LIBS_DIR}/${TF}/lib/${CURRENT_ABI}/libtensorflowlite.so" "build-local/jpl/lib/$CURRENT_ABI"
             rm cpu-features.o
         }
 
@@ -336,16 +332,9 @@
         done
     fi
 
-    cp ./modelsSRC/mobilenet_v2_deeplab_v3_256_myquant.tflite ./data/models/mModel.tflite
-    cp ./preferences-tflite.json ./data/preferences.json
+    mkdir ./build-local/jpl/data/models
+    cp ./modelsSRC/mobilenet_v2_deeplab_v3_256_myquant.tflite ./build-local/jpl/data/models/mModel.tflite
+    cp ./preferences-tflite.json ./build-local/jpl/data/preferences.json
 fi
 
-zip -r ${JPL_FILE_NAME} data manifest.json lib
-mv ${JPL_FILE_NAME} ${DESTINATION_PATH}/
-
-# Cleanup
-# Remove lib after compilation
-rm -rf lib
-rm -r ./data/models
-rm ./data/preferences.json
-
+python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${EXTRAPATH}