diff options
Diffstat (limited to 'python/openvino/runtime/build_hpspackages.sh')
| -rwxr-xr-x | python/openvino/runtime/build_hpspackages.sh | 571 |
1 files changed, 571 insertions, 0 deletions
diff --git a/python/openvino/runtime/build_hpspackages.sh b/python/openvino/runtime/build_hpspackages.sh new file mode 100755 index 0000000..dba9711 --- /dev/null +++ b/python/openvino/runtime/build_hpspackages.sh @@ -0,0 +1,571 @@ +#!/bin/bash +set -x + +# Script to build extra packages for building and running on Linux based SoC FPGAs. +# This script needs to be called prior to building the CoreDLA Runtime. +# Typical Usage : ./build_hpspackages.sh -sb +# For Help : ./build_hpspackages.sh -h + +################################################################## +# Parameters +SCRIPT_DIR=$(cd "$(dirname $0)" >/dev/null 2>&1 && pwd) +RUNTIME_ROOT_DIR=$(cd "${SCRIPT_DIR}" >/dev/null 2>&1 && pwd) + +DEV_HOME=`pwd` +BUILD_DIR=$DEV_HOME/hps_packages +STAGING_DIR=$BUILD_DIR/armcpu_package + +YOCTO_SDK_NAME="embedded_arm_sdk" +YOCTO_SDK="`pwd`/${YOCTO_SDK_NAME}" +TOOLCHAIN_FILE="${YOCTO_SDK}/cmake/embedded.arm.cmake" +TOOLCHAIN_PREFIX="${YOCTO_SDK}/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-" +SYSROOT="${YOCTO_SDK}/sysroots/armv7at2hf-neon-poky-linux-gnueabi" + +############################################################## +function get_toolchain_prefix() +{ + ( + unset LD_LIBRARY_PATH + source ${YOCTO_SDK}//environment-setup-* + IFS='\ ' array=(${CC}) + CC_PATH=`which ${array[0]}` + echo ${CC_PATH::-3} + ) +} + +function get_sdksysroot() +{ + ( + unset LD_LIBRARY_PATH + source ${YOCTO_SDK}//environment-setup-* + echo ${OECORE_TARGET_SYSROOT} + ) +} + +################################################################# +# Functions +function fail() +{ + echo "Failed : $1" + exit 1 +} + +################################################################# +get_git_repo() +{ + OUTPUT=$1 + URL=$2 + SUBMODULES=$3 + TAG=$4 + if [ ! -e ${OUTPUT} ]; then + + COMMAND="git clone $URL" + if [ ! -z ${TAG} ]; then + COMMAND="$COMMAND -b ${TAG}" + else + echo "Please provide a version number for $URL" + exit 1 + fi + + if [ "${SUBMODULES}" == "true" ]; then + COMMAND="${COMMAND} --recurse-submodules" + fi + + COMMAND="${COMMAND} ${OUTPUT}" + ${COMMAND} + else + echo "Repo already exists - $OUTPUT" + fi +} + + +################################################################# +function build_opencv() +{ + pushd $OPENCV_HOME + CMAKE_FLAGS="-DBUILD_opencv_apps:BOOL=OFF -DBUILD_opencv_calib3d:BOOL=OFF -DBUILD_opencv_core:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_dnn:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_features2d:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_flann:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_gapi:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_highgui:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_imgcodecs:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_imgproc:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_java_bindings_generator:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_js:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_js_bindings_generator:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_ml:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_objc_bindings_generator:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_objdetect:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_photo:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_python_bindings_generator:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_python_tests:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_stitching:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_ts:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_video:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_videoio:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_opencv_world:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_GTK:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_GTK_2_X:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_1394:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_GSTREAMER:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_PNG:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_PNG:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_JPEG:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_JPEG:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_WEBP:BOOL=OFF" + CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_TIFF:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_TIFF:BOOL=ON" + # CMAKE_FLAGS="${CMAKE_FLAGS} -DWITH_TBB:BOOL=ON" + # CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_TBB:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DBUILD_ZLIB:BOOL=ON" + CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_BUILD_TYPE=${OPENCV_BUILD_TYPE}" + CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX=$OPENCV_BUILD/install" + CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_STAGING_PREFIX=$STAGING_DIR/opencv" + + # For some reason, OpenCV uses the machine's native ccache + # On SLES15, this ccache is too new for the older gcc version that we arc shell + CMAKE_FLAGS="${CMAKE_FLAGS} -DENABLE_CCACHE:BOOL=OFF" + + cmake -B ${OPENCV_BUILD} -G "Ninja" -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_FLAGS} + if [ $? != 0 ]; then + fail "Failed to configure OPENCV" + fi + cmake --build ${OPENCV_BUILD} --parallel $(nproc) + if [ $? != 0 ]; then + fail "Failed to build OPENCV" + fi + + cmake --install ${OPENCV_BUILD} + if [ $? != 0 ]; then + fail "Failed to install OPENCV" + fi + popd +} + +################################################################# +function cleanup_tmpfile() { + local file="$1" + rm -rf "$file" +} + +################################################################# +function build_openvino() +{ + # The cmake option ENABLE_OPENVINO_DEBUG allow OV print rich debug info, + # we turn it on here if build type in Debug + if [[ "$OPENVINO_BUILD_TYPE" == "Debug" ]]; then + OV_DEBUG_FLAG="ON" + else + OV_DEBUG_FLAG="OFF" + fi + # Arm plugin build options should be exported as an env variable + export toolchain_prefix=${TOOLCHAIN_PREFIX} + export exceptions=False + export reference_openmp=False + export validation_tests=False + export benchmark_tests=False + export extra_link_flags="--sysroot=${SYSROOT}" + + # cmake throws an "Argument list too long" error if the path is too long + # Use a temp directory symlinked to the runtime/hps_packages directory + # If cmake was previously run, use the same temp directory + echo "Checking for cached path" + + # Path to generated cmake cache file that contains previously used cmake cache path + OPENVINO_CMAKE_CACHE_FILE=$OPENVINO_HOME/build_Release/CMakeCache.txt + + # Check if cmake_install.cmake exists, indicating that cmake has previously run + if [ -e "$OPENVINO_CMAKE_CACHE_FILE" ]; then + + # Read first 2 line of the file, which contains the previously used path + FIRST_LINES=$(head -n 2 $OPENVINO_CMAKE_CACHE_FILE) + + PATH_REGEX='\bFor build in directory:\s+(\S+)\/hps_packages\/openvino\/build_Release' + + if [[ $FIRST_LINES =~ $PATH_REGEX ]]; then + BUILD_DIR_TEMP=${BASH_REMATCH[1]} + echo "Using cached temp path: $BUILD_DIR_TEMP" + + mkdir -p $BUILD_DIR_TEMP + + if [ -d $BUILD_DIR_TEMP ]; then + ln -s $BUILD_DIR $BUILD_DIR_TEMP + trap 'cleanup_tmpfile "$BUILD_DIR_TEMP"' EXIT + else + echo "mkdir command failed. Cannot create temporary build directory." + fi + else + echo "Could not read path from cmake_install.cmake" + fi + # If cmake_install.cmake does not exist, then generate a new temp directory + else + # Create temporary directory + if [ -n "$TEMPDIR" ]; then + BUILD_DIR_TEMP=$(mktemp -d -p "$TEMPDIR") + else + BUILD_DIR_TEMP=$(mktemp -d) + fi + + echo "Creating new temp directory: $BUILD_DIR_TEMP" + + if [ -z "$BUILD_DIR_TEMP" ]; then + echo "mktemp command failed. Cannot create temporary build directory." + else + ln -s $BUILD_DIR $BUILD_DIR_TEMP + trap 'cleanup_tmpfile "$BUILD_DIR_TEMP"' EXIT + fi + fi + + # Use local versions of cmake variables + if [ -d "$BUILD_DIR_TEMP" ]; then + OPENVINO_HOME_LOC=$BUILD_DIR_TEMP/hps_packages/openvino + OPENVINO_BUILD_LOC=$OPENVINO_HOME_LOC/build_Release + STAGING_DIR_LOC=$BUILD_DIR_TEMP/hps_packages/armcpu_package + else + OPENVINO_HOME_LOC=$OPENVINO_HOME + OPENVINO_BUILD_LOC=$OPENVINO_BUILD + STAGING_DIR_LOC=$STAGING_DIR + fi + + # Disable OpenVINO hetero plugin. ED4 should use the CoreDLA Hetero + pushd $OPENVINO_HOME_LOC + cmake -G "Ninja" -B $OPENVINO_BUILD_LOC \ + -DOpenCV_DIR=$STAGING_DIR_LOC/opencv/cmake -DENABLE_OPENCV=OFF \ + -DENABLE_SAMPLES=OFF \ + -DENABLE_HETERO=OFF \ + -DENABLE_AUTO=OFF \ + -DENABLE_INTEL_GNA=OFF \ + -DENABLE_INTEL_GPU=OFF \ + -DENABLE_INTEL_MYRIAD=OFF \ + -DENABLE_CPPLINT=OFF \ + -DENABLE_TEMPLATE=OFF \ + -DENABLE_TESTS=OFF -DENABLE_BEH_TESTS=OFF -DENABLE_FUNCTIONAL_TESTS=OFF \ + -DENABLE_GAPI_TESTS=OFF \ + -DENABLE_DATA=OFF -DENABLE_PROFILING_ITT=OFF \ + -DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath-link,$STAGING_DIR_LOC/opencv/lib -DCMAKE_INSTALL_LIBDIR=lib \ + -DENABLE_SSE42=OFF -DENABLE_INTEL_MYRIAD=OFF -DENABLE_INTEL_MYRIAD_COMMON=OFF\ + -DENABLE_OPENVINO_DEBUG="${OV_DEBUG_FLAG}" \ + -DENABLE_SYSTEM_TBB=OFF \ + -DTHREADING=SEQ -DENABLE_LTO=ON \ + -DENABLE_PYTHON=OFF \ + -DENABLE_TEMPLATE=OFF \ + -DENABLE_OV_ONNX_FRONTEND=OFF \ + -DENABLE_OV_PADDLE_FRONTEND=OFF \ + -DENABLE_OV_TF_FRONTEND=OFF \ + -DENABLE_SYSTEM_PUGIXML=OFF \ + -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}" \ + -DARM_COMPUTE_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} ${OPENCV_PREFIX} \ + -DCMAKE_STAGING_PREFIX=$STAGING_DIR_LOC \ + -DCMAKE_PREFIX_PATH=$STAGING_DIR_LOC \ + -DCMAKE_BUILD_TYPE=$OPENVINO_BUILD_TYPE \ + . + if [ $? != 0 ]; then + fail "Failed to configure OPENVINO" + fi + + cmake --build $OPENVINO_BUILD_LOC --parallel $(nproc) + if [ $? != 0 ]; then + fail "Failed to build OPENVINO" + fi + + cmake --install ${OPENVINO_BUILD_LOC} + if [ $? != 0 ]; then + fail "Failed to install OPENVINO" + fi + popd +} + +################################################################# +function build_protobuf() +{ + pushd $PROTOBUF_HOME/cmake + cmake -G "Ninja" -B $PROTOBUF_BUILD \ + -Dprotobuf_BUILD_TESTS=OFF \ + -Dprotobuf_BUILD_EXAMPLES=OFF \ + -Dprotobuf_WITH_ZLIB=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_INSTALL_PREFIX=$STAGING_DIR/protobuf \ + -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}" \ + -DCMAKE_BUILD_TYPE=$PROTOBUF_BUILD_TYPE \ + . + if [ $? != 0 ]; then + fail "Failed to configure PROTOBUF" + fi + + cmake --build $PROTOBUF_BUILD --parallel $(nproc) + if [ $? != 0 ]; then + fail "Failed to build PROTOBUF" + fi + + cmake --install ${PROTOBUF_BUILD} + if [ $? != 0 ]; then + fail "Failed to install PROTOBUF" + fi + popd +} + +################################################################# +function build_gflags() +{ + pushd $GFLAGS_HOME + cmake -B $GFLAGS_BUILD \ + -D BUILD_STATIC_LIBS=ON \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_gflags_nothreads_LIBS=ON \ + -D BUILD_gflags_LIBS=ON \ + -D INSTALL_HEADERS=ON \ + -DCMAKE_TOOLCHAIN_FILE="${TOOLCHAIN_FILE}" \ + -DCMAKE_INSTALL_PREFIX="${GFLAGS_HOME}/install" \ + -DCMAKE_STAGING_PREFIX=$STAGING_DIR/gflags \ + -DARM_COMPUTE_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} ${OPENCV_PREFIX} \ + -Dextra_link_flags=--sysroot=${SYSROOT} \ + -DCMAKE_BUILD_TYPE=$GFLAGS_BUILD_TYPE \ + $GFLAGS_PLUGIN_HOME + if [ $? != 0 ]; then + fail "Failed to configure GFLAGS" + fi + + cmake --build $GFLAGS_BUILD --parallel $(nproc) + if [ $? != 0 ]; then + fail "Failed to configure GFLAGS" + fi + + cmake --install $GFLAGS_BUILD + if [ $? != 0 ]; then + fail "Failed to install GFLAGS" + fi + popd +} +################################################################# +function usage +{ + echo "$script -schbvodp" + echo "Options:" + echo " -h Display usage" + echo " -s get sources" + echo " -b build" + echo " -d Build debug OpenVino" + echo " -c clean build directory" + echo " -v build only OpenCV" + echo " -o build only OpenVINO (Requires previous Protobuf, OpenCV build)" + echo " -p build only Protobuf" + echo " -x debug script" +} + +################################################################## +# Main Script +get_source=0 +do_build=0 +do_clean=0 + +do_opencv=0 +do_openvino=0 +do_protobuf=0 +do_gflags=0 + +clean_staging=0 + +BUILD_TYPE=Release + +while getopts "schbvoxpd" optname; do + case "$optname" in + h) + usage + exit 0 + ;; + s) + get_source=1 + ;; + b) + do_build=1 + ;; + d) + BUILD_TYPE=Debug + ;; + c) + do_clean=1 + ;; + v) + do_opencv=1 + ;; + o) + do_openvino=1 + ;; + g) + do_gflags=1 + ;; + p) + do_protobuf=1 + ;; + x) + set -x + ;; + esac +done +shift "$(($OPTIND -1))" + + +##################################################### +# Parameters +OPENCV_BUILD_TYPE=Release +OPENCV_HOME=$BUILD_DIR/opencv +OPENCV_BUILD=$OPENCV_HOME/build_$OPENCV_BUILD_TYPE + +OPENVINO_BUILD_TYPE=$BUILD_TYPE +OPENVINO_HOME=$BUILD_DIR/openvino +OPENVINO_BUILD=$OPENVINO_HOME/build_$OPENVINO_BUILD_TYPE + +GFLAGS_BUILD_TYPE=Release +GFLAGS_HOME=$BUILD_DIR/gflags +GFLAGS_BUILD=$GFLAGS_HOME/build_$GFLAGS_BUILD_TYPE + +PROTOBUF_BUILD_TYPE=Release +PROTOBUF_HOME=$BUILD_DIR/protobuf +PROTOBUF_BUILD=$PROTOBUF_HOME/cmake/build_$PROTOBUF_BUILD_TYPE + +###################################################### +# Setup the Yocto Toolchain + +if find -maxdepth 1 -type d -name "${YOCTO_SDK_NAME}" | grep -q .; then + echo "Using previous setup Yocto toolchain at: ${YOCTO_SDK}" +else + if find ${DEV_HOME} -maxdepth 1 -type f -name "poky*.sh" | grep -q .; then + echo "Found poky SDK at ${DEV_HOME}" + elif [[ ! -z "${ED4_POKY_SDK_LOC}" ]]; then + echo "copying poky SDK in ${ED4_POKY_SDK_LOC} to ${DEV_HOME}" + cp ${ED4_POKY_SDK_LOC} ${DEV_HOME}/ + else + echo "Poky SDK not found. You need to copy the poky SDK to ${DEV_HOME} or" + echo "do: export ED4_POKY_SDK_LOC=\"path_to_your_poky_sdk\"" + exit 1 + fi + ${RUNTIME_ROOT_DIR}/scripts/hps/setup_toolchain.sh poky*.sh +fi + +TOOLCHAIN_PREFIX=`get_toolchain_prefix` +SYSROOT=`get_sdksysroot` +echo $TOOLCHAIN_PREFIX +echo $SYSROOT + +if [ $? != 0 ]; then + exit 1 +fi + +# If not doing individual builds then enable all +if [[ ($do_opencv -eq 0) && ($do_openvino -eq 0) && ($do_gflags -eq 0) && ($do_protobuf -eq 0) ]]; then + do_opencv=1 + do_openvino=1 + do_gflags=1 + do_protobuf=1 + if [[ $do_clean -ne 0 ]]; then + clean_staging=1 + fi +fi + + +if [[ $get_source -ne 0 ]]; then + get_git_repo $OPENCV_HOME https://github.com/opencv/opencv.git true 4.8.0 + get_git_repo $OPENVINO_HOME https://github.com/openvinotoolkit/openvino.git true 2023.3.0 + get_git_repo $GFLAGS_HOME https://github.com/gflags/gflags.git false v2.2.2 + get_git_repo $PROTOBUF_HOME https://github.com/protocolbuffers/protobuf.git false v3.9.0 +fi + +if [[ $do_clean -ne 0 ]]; then + if [[ $do_opencv -ne 0 ]]; then + if [ -e $OPENCV_BUILD ]; then + echo "Cleaning $OPENCV_BUILD" + rm -r $OPENCV_BUILD + fi + fi + + if [[ $do_openvino -ne 0 ]]; then + if [ -e $OPENVINO_BUILD ]; then + echo "Cleaning $OPENVINO_BUILD" + rm -r $OPENVINO_BUILD + fi + fi + + if [[ $do_gflags -ne 0 ]]; then + if [ -e $GFLAGS_BUILD ]; then + echo "Cleaning $GFLAGS_BUILD" + rm -r $GFLAGS_BUILD + fi + fi + + if [[ $do_protobuf -ne 0 ]]; then + if [ -e $PROTOBUF_BUILD ]; then + echo "Cleaning $PROTOBUF_BUILD" + rm -r $PROTOBUF_BUILD + fi + fi + + if [[ $clean_staging -ne 0 ]]; then + if [ -e $STAGING_DIR ]; then + echo "Cleaning $STAGING_DIR" + rm -r $STAGING_DIR + fi + fi +fi + +if [[ $do_build -ne 0 ]]; then + # Check we have the build sources + if [ ! -e $OPENCV_HOME ]; then + fail "OPENCV Source not available" + fi + + if [ ! -e $OPENVINO_HOME ]; then + fail "OPENVINO Source not available" + fi + + if [ ! -e $PROTOBUF_HOME ]; then + fail "PROTOBUF_HOME Source not available" + fi + + # Apply patches to the build and check that each applied correctly + pushd $OPENVINO_HOME >> //dev/null + git apply ${DEV_HOME}/patches/openvino_5cee8bbf29797f4544b343e803de957e9f041f92_gcc11.3.0.patch 2> /dev/null + popd >> //dev/null + + if [ $? != 0 ]; then + fail "Failed to apply patch: ${DEV_HOME}/patches/openvino_5cee8bbf29797f4544b343e803de957e9f041f92_gcc11.3.0.patch" + fi + + pushd $OPENVINO_HOME >> //dev/null + git apply ${DEV_HOME}/patches/flags.patch 2> /dev/null + popd >> //dev/null + + if [ $? != 0 ]; then + fail "Failed to apply patch: ${DEV_HOME}/patches/flags.patch" + fi + + pushd $OPENVINO_HOME/src/plugins/intel_cpu/thirdparty/ComputeLibrary >> //dev/null + git apply ${DEV_HOME}/patches/computelibrary.patch 2> /dev/null + popd >> //dev/null + + if [ $? != 0 ]; then + fail "Failed to apply patch: ${DEV_HOME}/patches/computelibrary.patch" + fi + + if [[ $do_gflags -ne 0 ]]; then + build_gflags + fi + unset gflags_ROOT + export gflags_ROOT=${GFLAGS_HOME}/install + + # Build the libaries + if [[ $do_protobuf -ne 0 ]]; then + build_protobuf + fi + + if [[ $do_opencv -ne 0 ]]; then + build_opencv + else + OPENCV_PREFIX="-DCMAKE_PREFIX_PATH=$OPENCV_BUILD" + fi + + if [[ $do_openvino -ne 0 ]]; then + build_openvino + fi +fi +exit |
