summaryrefslogtreecommitdiff
path: root/python/openvino/runtime/build_runtime.sh
diff options
context:
space:
mode:
Diffstat (limited to 'python/openvino/runtime/build_runtime.sh')
-rwxr-xr-xpython/openvino/runtime/build_runtime.sh446
1 files changed, 446 insertions, 0 deletions
diff --git a/python/openvino/runtime/build_runtime.sh b/python/openvino/runtime/build_runtime.sh
new file mode 100755
index 0000000..93755e1
--- /dev/null
+++ b/python/openvino/runtime/build_runtime.sh
@@ -0,0 +1,446 @@
+#!/bin/bash
+
+#=============================================================================
+# Script to build runtime plugin
+#=============================================================================
+GDB=0
+
+usage()
+{
+ echo "Build runtime plugin"
+ echo "Usage: ./build_runtime.sh [OPTIONS]"
+ echo " -h Show this help"
+ echo " -cmake_debug Flag to compile in debug mode"
+ echo " -verbosity=INFO|WARNING|ERROR|FATAL Enable logging at desired verbosity"
+ echo " -build_dir=<path> Location of the runtime build"
+ echo " -disable_jit Disable JIT execution mode - this removes dependencies on precompiled DLA libraries"
+ echo " -build_demo Build runtime demos"
+ echo " -target_de10_agilex Target the DE10 Agilex board."
+ echo " -target_agx7_i_dk Target the Agilex 7 Iseries board."
+ echo " -target_agx7_n6001 Target the Agilex N6001 board."
+ echo " -hps_platform Target a HPS based hardware."
+ echo " This option should be used only via the create_hps_image.sh script"
+ echo " -hps_machine=<machine> Target a specific machine. Used with -hps_platform. Options: arria10 (Arria 10 SoC),"
+ echo " agilex7_dk_si_agi027fa (Agilex 7 SoC) [if not specified, default is Arria 10]"
+ echo " -aot_splitter_example Build the aot splitter example"
+ echo " -target_emulation Target the software emulation (aka emulator) build."
+ echo " -target_system_console Target a device that communicates with the host via system-console."
+}
+
+hidden_usage()
+{
+ usage
+ echo " -coredla_dir_cmake=<path> Intended for regtest which packages coredla and runtime separately"
+ echo " -coredla_dir_lib=<path> Intended for regtest which packages coredla and runtime separately"
+ echo " -encryption=<0|1> Without OpenSSL, can still build runtime without encryption support"
+ echo " -no_make Skip final make command for Klocwork"
+ echo " -polling Use polling instead of interrupts"
+ echo " -target_a10_pac Target the Arria 10 PAC [EOL 2024.1 Release]."
+ echo " -run_tests Runs short build tests. For Altera internal usage only."
+}
+
+OPT_RUNTIME_POLLING=false
+OPT_DISABLE_JIT=false
+OPT_BUILD_DEMO=false
+OPT_RUN_TESTS=false
+RUNTIME_VERBOSITY="-DRUNTIME_VERBOSITY=0"
+
+TARGET=""
+
+#Terrasic production BSP kernel space driver header files
+TERASIC_KERNEL_HEADER_FILES="hw_host_channel.h hw_pcie_constants.h pcie_linux_driver_exports.h"
+
+for i in "$@"; do
+ case $i in
+ -h | --help ) usage
+ exit
+ ;;
+ -cmake_debug | --cmake_debug ) GDB=1
+ ;;
+ -verbosity=* | --verbosity=* ) RUNTIME_VERBOSITY="-DRUNTIME_VERBOSITY=${i#*=}"
+ shift # pass argument=value
+ ;;
+ -build_dir=* | --build_dir=* ) BUILD_DIR_USER="${i#*=}"
+ shift
+ ;;
+ -disable_jit | --disable_jit ) OPT_DISABLE_JIT=true
+ ;;
+ -build_demo | --build_demo ) OPT_BUILD_DEMO=true
+ ;;
+ -target_de10_agilex | --target_de10_agilex ) PLATFORM_NAME="Terasic DE 10"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=DE10_AGILEX"
+ ;;
+ -target_a10_pac | --target_a10_pac ) PLATFORM_NAME="PAC A10"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=DCP_A10_PAC"
+ ;;
+ -target_agx7_i_dk | --target_agx7_i_dk ) PLATFORM_NAME="AGX7 ISERIES DK"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=AGX7_I_DK"
+ ;;
+ -target_agx7_n6001 | --target_agx7_n6001 ) PLATFORM_NAME="AGX7 N6001"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=AGX7_N6001"
+ ;;
+ -target_emulation | --target_emulation ) PLATFORM_NAME="EMULATION"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=EMULATION"
+ ;;
+ -target_system_console | --target_system_console ) PLATFORM_NAME="SYSTEM CONSOLE"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=SYSTEM_CONSOLE"
+ OPT_RUNTIME_POLLING=true
+ ;;
+ # If HPS then we disable the JIT.
+ -hps_platform | --hps_platform ) PLATFORM_NAME="ARM Soc FPGA Platform"
+ BUILD_PLATFORM="-DHW_BUILD_PLATFORM=HPS_PLATFORM"
+ OPT_DISABLE_JIT=true
+ HPS_PLATFORM_BUILD=1
+ OPT_RUNTIME_POLLING=true
+ HPS_BUILD_MACHINE="-DHPS_BUILD_MACHINE=arria10"
+ ;;
+ # Specify the HPS machine. Default is Arria 10.
+ -hps_machine=* | --hps_machine=* ) if [ -z ${HPS_PLATFORM_BUILD} ]; then
+ echo "Error: -hps_machine can only be specified with -hps_platform"
+ exit 1
+ fi
+ HPS_BUILD_MACHINE="-DHPS_BUILD_MACHINE=${i#*=}"
+ ;;
+ -aot_splitter_example | --aot_splitter_example ) TARGET="dla_aot_splitter_example"
+ ;;
+ -ed3_streaming_example | --ed3_streaming_example ) TARGET="ed3_streaming_example"
+ ;;
+ # all options below are hidden features and therefore not listed in usage()
+ -hidden_help | --hidden_help ) hidden_usage
+ exit
+ ;;
+ -coredla_dir_cmake=* | --coredla_dir_cmake=* ) COREDLA_DIR_USER_CMAKE="${i#*=}"
+ shift
+ ;;
+ -coredla_dir_lib=* | --coredla_dir_lib=* ) COREDLA_DIR_USER_LIB="${i#*=}"
+ shift
+ ;;
+ -encryption=* | --encryption=* ) ENCRYPTION_USER="${i#*=}"
+ shift
+ ;;
+ -no_make | --no_make ) SKIP_MAKE=1
+ ;;
+ -polling | --polling ) OPT_RUNTIME_POLLING=true
+ ;;
+ -run_tests | --run_tests ) OPT_RUN_TESTS=true
+ ;;
+ * ) echo "Error: Unrecognised argument: $i"
+ usage
+ exit 1
+ esac
+ shift
+done
+
+if [[ -z "${PLATFORM_NAME}" ]]; then
+ echo "Error: Please specify which platform to build the runtime for. Run ./build_runtime.sh -h to see usage"
+ exit 1
+fi
+
+# Currently runtime demos do not work with the AOT flow. Throw an error to remind the user.
+if $OPT_DISABLE_JIT && $OPT_BUILD_DEMO; then
+ echo "Error: Cannot build runtime demos with JIT disabled."
+ exit 1
+fi
+
+# set to 0 to remove OpenSSL dependency from customer flow
+# IMPORTANT (for Intel release manager): this must be consistent with ALLOW_ENCRYPTION in ${COREDLA_ROOT}/Makefile
+ALLOW_ENCRYPTION=0
+if [ ! -z "$ENCRYPTION_USER" ]; then
+ ALLOW_ENCRYPTION=${ENCRYPTION_USER}
+fi
+if [ "$ALLOW_ENCRYPTION" == "1" ]; then
+ DLA_ALLOW_ENCRYPTION="-DDLA_ALLOW_ENCRYPTION=1"
+fi
+
+if [[ -z "${COREDLA_ROOT}" ]]; then
+ echo "Error: COREDLA_ROOT environment variable not set. Run init_env.sh script first."
+ exit 1
+fi
+
+# if CoreDLA Config Directory is not under root check under build directory
+COREDLA_DIR_CMAKE=${COREDLA_ROOT}/cmake
+COREDLA_DIR_LIB=${COREDLA_ROOT}/lib
+
+echo ${COREDLA_DIR_USER_CMAKE}
+
+# Only need to check if cmake exists since COREDLA_ROOT/cmake and COREDLA_ROOT/lib are in same paths
+if [[ ! -d "${COREDLA_DIR_CMAKE}" && -d "${COREDLA_ROOT}/build/coredla/dla/cmake" ]]; then
+ COREDLA_DIR_CMAKE=${COREDLA_ROOT}/build/coredla/dla/cmake
+ COREDLA_DIR_LIB=${COREDLA_ROOT}/build/coredla/dla/lib
+fi
+if [ ! -z "$COREDLA_DIR_USER_CMAKE" ]; then
+ COREDLA_DIR_CMAKE=${COREDLA_DIR_USER_CMAKE}
+ COREDLA_DIR_LIB=${COREDLA_DIR_USER_LIB}
+fi
+if [ ! -d "$COREDLA_DIR_CMAKE" ]; then
+ # This error should not be possible in a correctly deployed build. It should
+ # only happen in a developer environment.
+ echo "Error: $COREDLA_DIR_CMAKE not found. Did you remember to do: cd \$COREDLA_ROOT && make"
+ exit 1
+fi
+
+# A deployed build has $COREDLA_ROOT/util/compiled_result/, $COREDLA_ROOT/util/transformations/,
+# whereas an Intel-internal developer build has these as just $COREDLA_ROOT/compiled_result/, etc.
+# Would prefer to syncrhonize these. They could be found within cmake by ${CoreDLA_DIR}/../util/,
+# but that would mean developer changes to compiled_result/ and transformations/ need a `make`
+# before they are visible to the runtime build.
+if [ -d "$COREDLA_ROOT"/util/compiled_result ]; then
+ COREDLA_XUTIL_DIR="$COREDLA_ROOT"/util
+else
+ COREDLA_XUTIL_DIR="$COREDLA_ROOT"
+fi
+export COREDLA_XUTIL_DIR
+
+if [ ! -z "${PLATFORM_NAME}" ]; then
+ echo "Building runtime for ${PLATFORM_NAME}"
+fi
+
+if $OPT_BUILD_DEMO; then
+ echo "Runtime demos will be built."
+ if [ "$GDB" == "1" ]; then
+ echo "To test the runtime demo performance, please use the release build instead."
+ fi
+fi
+
+SCRIPT_DIR=$(cd "$(dirname $0)" >/dev/null 2>&1 && pwd)
+RUNTIME_ROOT_DIR=$(cd "${SCRIPT_DIR}" >/dev/null 2>&1 && pwd)
+
+cd ${RUNTIME_ROOT_DIR}
+
+BUILD_TYPE=Release
+
+if [ "$GDB" == "1" ]; then
+ echo "Building in debug mode"
+ BUILD_TYPE=Debug
+fi
+
+BUILD_DIR=build_${BUILD_TYPE}
+if [ ! -z "$BUILD_DIR_USER" ]; then
+ BUILD_DIR=${BUILD_DIR_USER}
+fi
+
+
+if [ ! -d "$BUILD_DIR" ]; then
+ mkdir -p ${BUILD_DIR}
+fi
+
+# Checking the type of build
+if [ "${PLATFORM_NAME}" = "Terasic DE 10" ]; then
+ if [ ! -z "${AOCL_BOARD_PACKAGE_ROOT}" ]; then
+ echo "Copying necessary header files from Terasic Production BSP"
+ for i in $TERASIC_KERNEL_HEADER_FILES; do
+ if ! cp "${AOCL_BOARD_PACKAGE_ROOT}/linux64/driver/${i}" "${RUNTIME_ROOT_DIR}/coredla_device/mmd/de10_agilex/host/"; then
+ echo "Error: Unable to copy ${i} from ${AOCL_BOARD_PACKAGE_ROOT}/linux64/driver"
+ exit 1
+ fi
+ done
+ else
+ echo "Error: Environment variable AOCL_BOARD_PACKAGE_ROOT must be set to the Terasic BSP path."
+ exit 1
+ fi
+fi
+
+if [ "${PLATFORM_NAME}" = "PAC A10" ]; then
+ if [[ -z "${OPAE_SDK_ROOT}" ]]; then
+ echo "Error: OPAE_SDK_ROOT environment variable not set. Run OPAE setup script before."
+ echo " If OPAE has been installed into the default location, use: export OPAE_SDK_ROOT=/usr"
+ exit 1
+ fi
+ # Some quick checks that OPAE exists where we expect it. Note that
+ # coredla_device/mmd/dcp_a10_pac/cmake/modules/FindOPAE.cmake has some search locations
+ # for OPAE hardcoded - so in reality, we will find it in /usr/ even if $OPAE_SDK_ROOT
+ # points to the wrong directory; but prefer to enforce a valid $OPAE_SDK_ROOT here.
+ if [ ! -f "$OPAE_SDK_ROOT/include/opae/fpga.h" -o \
+ ! \( -f "$OPAE_SDK_ROOT/lib/libopae-c.so" -o -f "$OPAE_SDK_ROOT/lib64/libopae-c.so" \) ]
+ then
+ echo "Error: OPAE not found at location specified by OPAE_SDK_ROOT."
+ exit 1
+ fi
+
+ OPAE_DIR="-DLIBOPAE-C_ROOT=${OPAE_SDK_ROOT}/"
+fi
+
+if [ "${PLATFORM_NAME}" = "AGX7 ISERIES DK" ] || [ "${PLATFORM_NAME}" = "AGX7 N6001" ]; then
+ if [[ -z "${OPAE_SDK_ROOT}" ]]; then
+ echo "Error: OPAE_SDK_ROOT environment variable not set. Run OPAE setup script before."
+ echo " If OPAE has been installed into the default location, use: export OPAE_SDK_ROOT=/usr"
+ exit 1
+ fi
+ # Some quick checks that OPAE exists where we expect it. Note that
+ # coredla_device/mmd/agx7_ofs_pcie/cmake/modules/FindOPAE.cmake has some search locations
+ # for OPAE hardcoded - so in reality, we will find it in /usr/ even if $OPAE_SDK_ROOT
+ # points to the wrong directory; but prefer to enforce a valid $OPAE_SDK_ROOT here.
+ if [ ! -f "$OPAE_SDK_ROOT/include/opae/fpga.h" -o \
+ ! \( -f "$OPAE_SDK_ROOT/lib/libopae-c.so" -o -f "$OPAE_SDK_ROOT/lib64/libopae-c.so" \) ]
+ then
+ echo "Error: OPAE not found at location specified by OPAE_SDK_ROOT."
+ exit 1
+ fi
+
+ OPAE_DIR="-DLIBOPAE-C_ROOT=${OPAE_SDK_ROOT}/"
+fi
+
+if [ "${PLATFORM_NAME}" = "EMULATION" ]; then
+ if [ -z "${COREDLA_DIR_LIB}/libdla_emulator.so" ]; then
+ # This should not happen in a correctly deployed build
+ echo "The software emulator shared library libdla_emulator.so does not exist in ${COREDLA_DIR_LIB}"
+ exit 1
+ fi
+fi
+
+if $OPT_RUNTIME_POLLING; then
+ echo "Warning: using polling instead of interrupts"
+fi
+
+if $OPT_DISABLE_JIT; then
+ echo "Building without just-in-time (JIT) execution functionality"
+fi
+
+# We must specify a default for $RUNTIME_POLLING so that cmake does a rebuild if
+# the polling option changes.
+RUNTIME_POLLING="-DRUNTIME_POLLING=0";
+$OPT_RUNTIME_POLLING && RUNTIME_POLLING="-DRUNTIME_POLLING=1"
+
+# We must specify a default for $DSIABLE_JIT sot hat cmake does a rebuild if the
+# option changes.
+DISABLE_JIT="-DDISABLE_JIT=0";
+$OPT_DISABLE_JIT && DISABLE_JIT="-DDISABLE_JIT=1"
+
+# We use a default of "" for BUILD_DEMO. This means that cmake will not force a rebuild
+# if the -build_demo option is specified on a first build and then not specified on a second
+# build (unless something else forces a rebuild, of course).
+#
+BUILD_DEMO=""
+$OPT_BUILD_DEMO && BUILD_DEMO="-DBUILD_DEMO=1"
+
+# On Ubuntu18 devices demos may break with:
+# "Cannot load library ... libcoreDLARuntimePlugin.so ... undefined symbol: dla_mmd_ddr_write"
+# This is caused if /opt/intelFPGA_pro/quartus_19.2.0b57/hld/host/linux64/lib is in LD_LIBRARY_PATH
+# The known fix is to simply remove it
+os_release=$(lsb_release -rs)
+conflicting_dir="intelFPGA_pro/quartus_19.2.0b57/hld/host/linux64/lib"
+if [[ "$os_release" == "18."* && "$OPT_BUILD_DEMO" == true && ":$LD_LIBRARY_PATH:" == *"$conflicting_dir:"* ]]; then
+ echo -e "\e[91mError: Ubuntu18 runtime demo build detected. The demos may break with $conflicting_dir in the LD_LIBRARY_PATH. Please remove and recompile.\e[0m"
+ exit 1
+fi
+
+if [ -z ${HPS_PLATFORM_BUILD} ]; then
+ # When this happens (ie: differing g++ and gcc versions), the resulting link errors can be
+ # rather confusing. Perhaps testing for this is overkill? We used to allow an environment
+ # variable override of CXX, which is what made it easier to induce the version mismatch.
+ CXX=$(dirname $COREDLA_GCC)/g++
+ CC_VERSION=$($COREDLA_GCC --version | head -1 | awk '{print $NF}')
+ CXX_VERSION=$($CXX --version | head -1 | awk '{print $NF}')
+ if [ "$CC_VERSION" = "" -o "$CC_VERSION" != "$CXX_VERSION" ]; then
+ echo "Error: $COREDLA_GCC version is \"$CC_VERSION\" but $CXX version is \"$CXX_VERSION\""
+ echo " Both compilers must have the same version number."
+ exit 1
+ fi
+
+ set -x
+
+ cd ${BUILD_DIR} || exit 1
+ # Runtime demos will not be built by default. Use the -build_demo flag to build them.
+ CC=$COREDLA_GCC CXX=$CXX cmake ${RUNTIME_VERBOSITY} ${RUNTIME_POLLING} ${BUILD_PLATFORM} ${OPAE_DIR} ${DLA_ALLOW_ENCRYPTION} -DCoreDLA_DIR=${COREDLA_DIR_CMAKE} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${RUNTIME_ROOT_DIR} ${DISABLE_JIT} ${BUILD_DEMO}
+
+ cmake_exit_code=$?
+ set +x
+
+else
+ # Setup the Yocto Toolchain
+ ${RUNTIME_ROOT_DIR}/scripts/hps/setup_toolchain.sh poky*.sh
+ if [ $? != 0 ]; then
+ echo -e "\nNote: Directly calling build_runtime.sh --hps_platform is for internal only. "\
+ "If you are building runtime for ED4, use ${RUNTIME_ROOT_DIR}/create_hps_image.sh instead.\n"
+ exit 1
+ fi
+ TOOLCHAIN_FILE=${RUNTIME_ROOT_DIR}/embedded_arm_sdk/cmake/embedded.arm.cmake
+
+ HPS_PACKAGES_DIR=`pwd`/hps_packages
+ HPS_INSTALL_PACKAGES=${HPS_PACKAGES_DIR}/armcpu_package
+
+ export INTEL_OPENVINO_DIR=${HPS_INSTALL_PACKAGES}
+ # Check that the Local OPENVINO build has been done
+ if [ ! -e ${INTEL_OPENVINO_DIR} ]; then
+ echo "Error: Pre-built openvino package not found."
+ echo " : Run ./build_hpspackages.sh -sb"
+ echo -e "\nNote: Directly calling build_runtime.sh --hps_platform is for internal only. "\
+ "If you are building runtime for ED4, use ${RUNTIME_ROOT_DIR}/create_hps_image.sh instead.\n"
+ exit 1
+ fi
+ # in OpenVINO 2022.3, setupvars.sh sits in ${INTEL_OPENVINO_DIR}, not in S{INTEL_OPENVINO_DIR}/bin
+ source ${INTEL_OPENVINO_DIR}/setupvars.sh
+
+ unset gflags_ROOT
+ export gflags_ROOT=${HPS_INSTALL_PACKAGES}/gflags
+ CMAKE_OPTIONS="-DCMAKE_PREFIX_PATH=${HPS_INSTALL_PACKAGES}/opencv;${HPS_INSTALL_PACKAGES}/gflags;${HPS_INSTALL_PACKAGES}/protobuf"
+
+ set -x
+ cd ${BUILD_DIR} || exit 1
+ cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${RUNTIME_VERBOSITY} ${RUNTIME_POLLING} ${BUILD_PLATFORM} ${HPS_BUILD_MACHINE} ${OPAE_DIR} ${DLA_ALLOW_ENCRYPTION} -DCoreDLA_DIR=${COREDLA_DIR_CMAKE} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${RUNTIME_ROOT_DIR} ${DISABLE_JIT} ${BUILD_DEMO} ${CMAKE_OPTIONS}
+
+ cmake_exit_code=$?
+ set +x
+fi
+
+if [ $cmake_exit_code != 0 ]; then
+ echo "Error: cmake failed"
+ exit 1
+fi
+
+function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
+cmake_dot_version=$(cmake --version | grep 'cmake version' | awk '{print $3}')
+CMAKE_PARALLEL=
+if [ $(version ${cmake_dot_version} ) -ge $(version "3.12.0") ]; then
+ # Check total_mem so that we are consistent between runs (even through free_mem is arguably
+ # more relevant).
+ total_mem=`free -g | grep Mem | awk '{print $2}'`
+ if [ "$total_mem" -gt 48 ]; then
+ CMAKE_PARALLEL="--parallel"
+ fi
+fi
+
+# Check if we should skip the make process
+if [ "$SKIP_MAKE" != "1" ]; then
+ if [ "${TARGET}" != "" ]; then
+ set -x
+ cmake --build . --target "${TARGET}" ${CMAKE_PARALLEL}
+ make_result=$?
+ set +x
+ else
+ set -x
+ cmake --build . ${CMAKE_PARALLEL}
+ make_result=$?
+ set +x
+ fi
+
+ # If the build failed, exit with the make result
+ if [ $make_result -ne 0 ]; then
+ exit $make_result
+ fi
+fi
+
+# Check if tests should be run based on OPT_RUN_TESTS variable
+if [ "$OPT_RUN_TESTS" = "true" ]; then
+ if [[ -n "$GITHUB_REPOSITORY_OWNER" ]]; then
+ # Runs in GitHub
+ LINKER_TEST_SCRIPT="$GITHUB_WORKSPACE/runtime/scripts/internal/linker_test.sh"
+ else
+ # Runs locally
+ LINKER_TEST_SCRIPT="$RUNTIME_ROOT_DIR/scripts/internal/linker_test.sh"
+ fi
+ if [ -f "$LINKER_TEST_SCRIPT" ]; then
+ # Notify that the build was successful and tests are starting
+ echo -e "\033[1;33mBuild successful. Running linker test...\033[0m"
+ if ! "$LINKER_TEST_SCRIPT" "$BUILD_DIR" "$PLATFORM_NAME" "$OPT_DISABLE_JIT"; then
+ echo "Error: Linker test script failed with a non-zero return code." >&2
+ exit 1
+ fi
+ else
+ echo "Error: Tests not found."
+ exit 1
+ fi
+fi
+
+# If we reach this point, the build and any tests were successful
+exit 0