166 lines
4.8 KiB
Bash
Executable File
166 lines
4.8 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
#
|
|
# This script copies all required files back into the plugin folder tree and adds them to a new Perforce CL.
|
|
#
|
|
# If an intermediate step fails, the script exits.
|
|
#
|
|
|
|
set -Eeuo 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="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
|
UE_SOURCE_DIR="$BUILD_SCRIPT_DIR/../../Source"
|
|
UE_PLUGIN_ROOT="$BUILD_SCRIPT_DIR/../../../.."
|
|
|
|
echo Plugin root dir: "$UE_PLUGIN_ROOT"
|
|
echo Build dir: "$BUILD_DIR"
|
|
echo Source dir: "$UE_SOURCE_DIR"
|
|
|
|
on_error() {
|
|
local exit_code=$?
|
|
local line=${BASH_LINENO[0]}
|
|
|
|
echo "Error: command '${BASH_COMMAND}' failed at line ${line} with exit code ${exit_code}" >&2
|
|
exit "$exit_code"
|
|
}
|
|
trap on_error ERR
|
|
|
|
# Common rsync options
|
|
# note: -L to copy "resolved" symlinks (e.g. ld.lld)
|
|
RSYNC_OPTIONS=(-a -L)
|
|
|
|
sync() { rsync "${RSYNC_OPTIONS[@]}" -- "$@"; }
|
|
|
|
echo =========================================
|
|
echo ========= INSTALLING PACKAGES ===========
|
|
echo =========================================
|
|
|
|
die() { echo "Error: $*" >&2; exit 1; }
|
|
|
|
commands=(awk rsync p4)
|
|
for p in "${commands[@]}"; do
|
|
command -v "$p" >/dev/null 2>&1 || die "$p is required but not found."
|
|
done
|
|
|
|
echo Successfully checked for required commands.
|
|
|
|
echo =========================================
|
|
echo ======== Copying Compiler Files =========
|
|
echo =========================================
|
|
|
|
TARGET_IREE_FOLDER="$UE_PLUGIN_ROOT/Source/ThirdParty/IREE"
|
|
BINARIES_FOLDER="$UE_PLUGIN_ROOT/Binaries/ThirdParty/IREE/Mac"
|
|
mkdir -p "$BINARIES_FOLDER" 2>/dev/null
|
|
|
|
sync "$BUILD_DIR/iree-compiler/llvm-project/bin/ld.lld" "$BINARIES_FOLDER/"
|
|
sync "$BUILD_DIR/iree-compiler/llvm-project/bin/ld64.lld" "$BINARIES_FOLDER/"
|
|
sync "$BUILD_DIR/iree-compiler/tools/iree-compile" "$BINARIES_FOLDER/"
|
|
sync "$BUILD_DIR/iree-compiler/lib/libIREECompiler.dylib" "$BINARIES_FOLDER/"
|
|
|
|
# Add the ./ folder to the compilers rpath to find the shared lib in the same folder
|
|
install_name_tool -add_rpath "@executable_path/." "$BINARIES_FOLDER/iree-compile"
|
|
install_name_tool -delete_rpath "$BUILD_DIR/iree-compiler/lib" "$BINARIES_FOLDER/iree-compile"
|
|
|
|
echo
|
|
echo Copying Compiler Files: Done
|
|
echo
|
|
|
|
|
|
echo =========================================
|
|
echo ====== Copying NNEMlirTools Files =======
|
|
echo =========================================
|
|
|
|
MLIR_TOOLS_INCLUDE_DIR="$UE_PLUGIN_ROOT/Source/ThirdParty/NNEMlirTools/Internal"
|
|
MLIR_TOOLS_BINARIES_DIR="$UE_PLUGIN_ROOT/Binaries/ThirdParty/NNEMlirTools/Mac"
|
|
mkdir -p "$MLIR_TOOLS_INCLUDE_DIR" 2>/dev/null
|
|
mkdir -p "$MLIR_TOOLS_BINARIES_DIR" 2>/dev/null
|
|
|
|
sync "$BUILD_DIR/NNEMlirTools/libNNEMlirTools.dylib" "$MLIR_TOOLS_BINARIES_DIR/"
|
|
sync "$UE_SOURCE_DIR/NNEMlirTools/NNERuntimeIREE/Include/NNEMlirTools.h" "$MLIR_TOOLS_INCLUDE_DIR/"
|
|
sync "$UE_SOURCE_DIR/NNEMlirTools/NNERuntimeIREE/Include/NNEMlirTools_cxx_api.h" "$MLIR_TOOLS_INCLUDE_DIR/"
|
|
|
|
echo
|
|
echo Copying NNEMlirTools Files: Done
|
|
echo
|
|
|
|
|
|
echo =========================================
|
|
echo =========== Copying Mac Files ===========
|
|
echo =========================================
|
|
|
|
LIBRARIES_FOLDER="$TARGET_IREE_FOLDER/Lib/Mac"
|
|
mkdir -p "$LIBRARIES_FOLDER" 2>/dev/null
|
|
|
|
sync "$BUILD_DIR/iree-runtime-mac/iree/build_tools/third_party/flatcc/libflatcc_parsing.a" "$LIBRARIES_FOLDER/"
|
|
sync "$BUILD_DIR/iree-runtime-mac/libireert.a" "$LIBRARIES_FOLDER/"
|
|
|
|
echo
|
|
echo Copying Mac Files: Done
|
|
echo
|
|
|
|
|
|
echo =========================================
|
|
echo ============== Save to CL ===============
|
|
echo =========================================
|
|
|
|
# Check for P4 CLI client
|
|
if ! command -v p4 >/dev/null 2>&1; then
|
|
echo "Error: Perforce CLI (p4) not found in PATH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Check connection to server
|
|
if ! p4 -G info >/dev/null 2>&1; then
|
|
echo "Error: Unable to reach Perforce server." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Check logged in
|
|
if ! p4 login -s >/dev/null 2>&1; then
|
|
echo "Starting interactive login..."
|
|
if ! p4 login; then
|
|
echo "Error: Login failed." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
CL_DESC="IREE Mac install"
|
|
|
|
CL=$(
|
|
{
|
|
printf 'Change: new\n'
|
|
printf 'Description:\n'
|
|
printf '%s' "$CL_DESC" | sed 's/^/\t/'
|
|
} | p4 change -i \
|
|
| sed -n 's/^Change \([0-9][0-9]*\).*/\1/p' | head -n1
|
|
)
|
|
|
|
if [[ -z "${CL}" ]]; then
|
|
echo "Failed to create change list (no CL number returned)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Created changelist #${CL}"
|
|
|
|
BINARIES_FOLDER="$(cd -- "$BINARIES_FOLDER" && pwd -P)"
|
|
LIBRARIES_FOLDER="$(cd -- "$LIBRARIES_FOLDER" && pwd -P)"
|
|
MLIR_TOOLS_INCLUDE_DIR="$(cd -- "$MLIR_TOOLS_INCLUDE_DIR" && pwd -P)"
|
|
MLIR_TOOLS_BINARIES_DIR="$(cd -- "$MLIR_TOOLS_BINARIES_DIR" && pwd -P)"
|
|
|
|
# Reconcile modified directories
|
|
p4 reconcile -a -e -d -c "$CL" "$BINARIES_FOLDER/..."
|
|
p4 reconcile -a -e -d -c "$CL" "$LIBRARIES_FOLDER/..."
|
|
p4 reconcile -a -e -d -c "$CL" "$MLIR_TOOLS_INCLUDE_DIR/..."
|
|
p4 reconcile -a -e -d -c "$CL" "$MLIR_TOOLS_BINARIES_DIR/..."
|
|
|
|
echo
|
|
echo Save to CL: Done
|
|
echo |