281 lines
7.4 KiB
Bash
Executable File
281 lines
7.4 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
#
|
|
# This script builds all the required targets for the NNERuntimeIREE plugin.
|
|
#
|
|
# If an intermediate step fails, the script exits.
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: [Script] [Working dir]"
|
|
exit 1
|
|
fi
|
|
|
|
WORKING_DIR=$1
|
|
|
|
BUILD_DIR=$WORKING_DIR/iree-org
|
|
BUILD_SCRIPT_DIR="$(dirname -- "$(realpath -- "$0")")/"
|
|
UE_SOURCE_DIR=$BUILD_SCRIPT_DIR/../../Source
|
|
UE_PATCHES_DIR=$BUILD_SCRIPT_DIR/../../Patch
|
|
UE_CMAKE_DIR=$BUILD_SCRIPT_DIR/../../CMake
|
|
UE_PLUGIN_ROOT=$BUILD_SCRIPT_DIR/../../../..
|
|
|
|
echo Plugin root dir: "$UE_PLUGIN_ROOT"
|
|
echo Build dir: "$BUILD_DIR"
|
|
echo Source dir: "$UE_SOURCE_DIR"
|
|
|
|
IREE_GIT_REPOSITORY=https://github.com/iree-org/iree.git
|
|
IREE_GIT_COMMIT=v3.5.0
|
|
IREE_THIRD_PARTY_LIBRARIES=("flatcc" "llvm-project" "stablehlo" "torch-mlir" "benchmark" "spirv_cross")
|
|
IREE_COMPILER_VERSION_STRING="IREE-for-UE"
|
|
|
|
BUILD_TYPE=Release
|
|
|
|
# Unreal Shader compiler plugin
|
|
IREE_CMAKE_PLUGIN_PATH=../../Iree/Compiler/Plugins/Target/UnrealShader
|
|
|
|
SPIRV_CROSS_DIR=$BUILD_DIR/iree/third_party/spirv_cross
|
|
|
|
# Change this when compiling on arch64 for arch64
|
|
TARGET=x86_64-unknown-linux-gnu #TARGET=aarch64-unknown-linux-gnueabi
|
|
|
|
COMPILER_NAME=v26_clang-20.1.8-rockylinux8
|
|
C_COMPILER=$BUILD_DIR/Clang/$COMPILER_NAME/$TARGET/bin/clang
|
|
CXX_COMPILER=$BUILD_DIR/Clang/$COMPILER_NAME/$TARGET/bin/clang++
|
|
COMPILER_FLAGS=--target=$TARGET
|
|
|
|
# We could not build the llvm project with the UE clang so far
|
|
HOST_BINARIES_C_COMPILER=clang-20
|
|
HOST_BINARIES_CXX_COMPILER=clang++-20
|
|
|
|
if [ ! -d $BUILD_DIR ] ; then
|
|
mkdir $BUILD_DIR
|
|
fi
|
|
|
|
echo =========================================
|
|
echo ========= INSTALLING PATCHELF ===========
|
|
echo =========================================
|
|
|
|
sudo apt-get install patchelf
|
|
|
|
echo =========================================
|
|
echo =========== INSTALLING CLANG ============
|
|
echo =========================================
|
|
|
|
if [ ! -f "$BUILD_DIR/Clang/native-linux-$COMPILER_NAME.tar.gz" ]; then
|
|
cd $BUILD_DIR
|
|
|
|
if [ ! -d Clang ] ; then
|
|
mkdir Clang
|
|
fi
|
|
|
|
cd Clang
|
|
|
|
if [ ! -f native-linux-$COMPILER_NAME.tar.gz ] ; then
|
|
wget https://cdn.unrealengine.com/Toolchain_Linux/native-linux-$COMPILER_NAME.tar.gz
|
|
fi
|
|
if [ ! -d v$COMPILER_NAME ] ; then
|
|
tar -xzf native-linux-$COMPILER_NAME.tar.gz
|
|
fi
|
|
|
|
if [ ! -f llvm.sh ] ; then
|
|
wget https://apt.llvm.org/llvm.sh
|
|
chmod 777 llvm.sh
|
|
fi
|
|
sudo ./llvm.sh 20 all
|
|
|
|
cd ../..
|
|
echo
|
|
echo Installing Clang: Done
|
|
echo
|
|
else
|
|
echo
|
|
echo Installing Clang: Skipped
|
|
echo
|
|
fi
|
|
|
|
|
|
echo =========================================
|
|
echo ============= Copy Source ===============
|
|
echo =========================================
|
|
|
|
mkdir -p "$WORKING_DIR/Iree/Compiler"
|
|
cp -a "$UE_SOURCE_DIR/Iree/Compiler/." "$WORKING_DIR/Iree/Compiler/" > /dev/null
|
|
|
|
echo
|
|
echo Copied IREE compiler plugin.
|
|
echo
|
|
|
|
|
|
echo =========================================
|
|
echo ============= Cloning IREE ==============
|
|
echo =========================================
|
|
|
|
if [ ! -d "$BUILD_DIR/iree" ]; then
|
|
cd $BUILD_DIR
|
|
git clone -n $IREE_GIT_REPOSITORY
|
|
cd iree
|
|
echo Using IREE git commit $IREE_GIT_COMMIT
|
|
git checkout $IREE_GIT_COMMIT
|
|
cd third_party
|
|
for D in */; do
|
|
if [ ! -f "$D/CMakeLists.txt" ]; then
|
|
echo -n "" > "$D/CMakeLists.txt"
|
|
fi
|
|
done
|
|
for L in ${IREE_THIRD_PARTY_LIBRARIES[@]}; do
|
|
if [ -d $L ]; then
|
|
rm "$L/CMakeLists.txt"
|
|
git submodule update --init -- $L
|
|
if [ -d "$L/third-party" ]; then
|
|
rm -R -f "$L/third-party"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
cd ../../..
|
|
|
|
echo Check for $SPIRV_CROSS_DIR
|
|
if [ -d "$SPIRV_CROSS_DIR" ]; then
|
|
echo Apply git patch to spirv_cross
|
|
cd $SPIRV_CROSS_DIR
|
|
git apply $UE_PATCHES_DIR/spirv_cross.patch
|
|
cd ../../../..
|
|
echo Done.
|
|
fi
|
|
|
|
echo
|
|
echo Cloning IREE: Done
|
|
echo
|
|
else
|
|
echo
|
|
echo Cloning IREE: Skipped
|
|
echo
|
|
fi
|
|
|
|
echo =========================================
|
|
echo ======== Building IREE Compiler =========
|
|
echo =========================================
|
|
|
|
if [ ! -d "$BUILD_DIR/iree-compiler" ]; then
|
|
cmake -G Ninja -B $BUILD_DIR/iree-compiler $BUILD_DIR/iree \
|
|
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
|
-DIREE_CMAKE_PLUGIN_PATHS=$IREE_CMAKE_PLUGIN_PATH \
|
|
-DIREE_ENABLE_CPUINFO=OFF \
|
|
-DIREE_BUILD_TESTS=OFF \
|
|
-DIREE_BUILD_SAMPLES=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE_JAVA=OFF \
|
|
-DIREE_BUILD_ALL_CHECK_TEST_MODULES=OFF \
|
|
-DIREE_HAL_DRIVER_DEFAULTS=OFF \
|
|
-DIREE_HAL_DRIVER_LOCAL_SYNC=ON \
|
|
-DIREE_HAL_DRIVER_LOCAL_TASK=ON \
|
|
-DIREE_TARGET_BACKEND_DEFAULTS=OFF \
|
|
-DIREE_TARGET_BACKEND_LLVM_CPU=ON \
|
|
-DIREE_ERROR_ON_MISSING_SUBMODULES=OFF \
|
|
-DCMAKE_C_COMPILER=$HOST_BINARIES_C_COMPILER \
|
|
-DCMAKE_C_FLAGS=$COMPILER_FLAGS \
|
|
-DCMAKE_CXX_COMPILER=$HOST_BINARIES_CXX_COMPILER \
|
|
-DCMAKE_CXX_FLAGS=$COMPILER_FLAGS \
|
|
-DLLVM_ENABLE_TERMINFO=NO \
|
|
-DIREE_EMBEDDED_RELEASE_INFO=ON \
|
|
-DIREE_RELEASE_VERSION=$IREE_COMPILER_VERSION_STRING \
|
|
-DIREE_RELEASE_REVISION=$IREE_GIT_COMMIT
|
|
|
|
cmake --build $BUILD_DIR/iree-compiler
|
|
|
|
echo
|
|
echo Building Compiler: Done
|
|
echo
|
|
else
|
|
echo
|
|
echo Building Compiler: Incremental build... please do not use for production!
|
|
echo
|
|
|
|
cmake --build $BUILD_DIR/iree-compiler
|
|
fi
|
|
|
|
|
|
echo =========================================
|
|
echo ======== Building NNEMlirTools ==========
|
|
echo =========================================
|
|
|
|
if [ ! -d "$BUILD_DIR/NNEMlirTools" ]; then
|
|
cmake -G Ninja -B $BUILD_DIR/NNEMlirTools $UE_SOURCE_DIR/NNEMlirTools \
|
|
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
|
-DUE_IREE_BUILD_ROOT=$BUILD_DIR \
|
|
-DIREE_ENABLE_CPUINFO=OFF \
|
|
-DIREE_BUILD_TESTS=OFF \
|
|
-DIREE_BUILD_SAMPLES=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE_JAVA=OFF \
|
|
-DIREE_BUILD_ALL_CHECK_TEST_MODULES=OFF \
|
|
-DIREE_HAL_DRIVER_DEFAULTS=OFF \
|
|
-DIREE_HAL_DRIVER_LOCAL_SYNC=OFF \
|
|
-DIREE_HAL_DRIVER_LOCAL_TASK=OFF \
|
|
-DIREE_TARGET_BACKEND_DEFAULTS=OFF \
|
|
-DIREE_TARGET_BACKEND_LLVM_CPU=OFF \
|
|
-DIREE_ERROR_ON_MISSING_SUBMODULES=OFF \
|
|
-DCMAKE_C_COMPILER=$HOST_BINARIES_C_COMPILER \
|
|
-DCMAKE_C_FLAGS=$COMPILER_FLAGS \
|
|
-DCMAKE_CXX_COMPILER=$HOST_BINARIES_CXX_COMPILER \
|
|
-DCMAKE_CXX_FLAGS=$COMPILER_FLAGS \
|
|
-DLLVM_ENABLE_TERMINFO=NO
|
|
|
|
cmake --build $BUILD_DIR/NNEMlirTools
|
|
|
|
echo
|
|
echo Building NNEMlirTools: Done
|
|
echo
|
|
else
|
|
echo
|
|
echo Building NNEMlirTools: Incremental build... please do not use for production!
|
|
echo
|
|
|
|
cmake --build $BUILD_DIR/NNEMlirTools
|
|
fi
|
|
|
|
|
|
echo =========================================
|
|
echo ========= Building Linux Runtime ==========
|
|
echo =========================================
|
|
|
|
if [ ! -d "$BUILD_DIR/iree-runtime-linux" ]; then
|
|
cmake -G Ninja -B $BUILD_DIR/iree-runtime-linux $UE_SOURCE_DIR/Iree/Runtime \
|
|
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
|
-DCMAKE_MODULE_PATH=$UE_CMAKE_DIR \
|
|
-DUE_IREE_BUILD_ROOT=$BUILD_DIR \
|
|
-DIREE_ENABLE_CPUINFO=OFF \
|
|
-DIREE_BUILD_TESTS=OFF \
|
|
-DIREE_BUILD_SAMPLES=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE=OFF \
|
|
-DIREE_BUILD_BINDINGS_TFLITE_JAVA=OFF \
|
|
-DIREE_BUILD_ALL_CHECK_TEST_MODULES=OFF \
|
|
-DIREE_HAL_DRIVER_DEFAULTS=OFF \
|
|
-DIREE_HAL_DRIVER_LOCAL_SYNC=ON \
|
|
-DIREE_HAL_DRIVER_LOCAL_TASK=ON \
|
|
-DIREE_TARGET_BACKEND_DEFAULTS=OFF \
|
|
-DIREE_TARGET_BACKEND_LLVM_CPU=ON \
|
|
-DIREE_ERROR_ON_MISSING_SUBMODULES=OFF \
|
|
-DIREE_BUILD_COMPILER=OFF \
|
|
-DIREE_ENABLE_THREADING=ON \
|
|
-DIREE_HAL_EXECUTABLE_LOADER_DEFAULTS=OFF \
|
|
-DIREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS=OFF \
|
|
-DCMAKE_C_COMPILER=$C_COMPILER \
|
|
-DCMAKE_C_FLAGS=$COMPILER_FLAGS \
|
|
-DCMAKE_CXX_COMPILER=$CXX_COMPILER \
|
|
-DCMAKE_CXX_FLAGS=$COMPILER_FLAGS
|
|
|
|
cmake --build $BUILD_DIR/iree-runtime-linux
|
|
|
|
echo
|
|
echo Building Linux Runtime: Done
|
|
echo
|
|
else
|
|
echo
|
|
echo Building Linux Runtime: Skipped
|
|
echo
|
|
fi
|