sglang_v0.5.2/pytorch_2.8.0/third_party/XNNPACK/scripts/run-on-hexagon-sim.sh

88 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
#
# This is a utility to deploy and run a simple Hexagon-based binary to the
# Hexagon simulator.
#
# Note that the binary must be built with the same HEXAGON_SDK_ROOT,
# HEXAGON_TOOLS_ROOT, HEXAGON_ARCH, and HEXAGON_TOOL_VER specified here,
# otherwise runtime errors will likely occur.
#
# Syntax: run-on-hexagon-sim.sh path-to-binary
set -e
if [ -z "$HEXAGON_SDK_ROOT" ]; then
echo "HEXAGON_SDK_ROOT must be set!"
exit 1
fi
if [ -z "$HEXAGON_TOOLS_ROOT" ]; then
echo "HEXAGON_TOOLS_ROOT must be set!"
exit 1
fi
# These should match the versions specified in hexagon.toolchain
: "${HEXAGON_ARCH:=v68}"
: "${HEXAGON_TOOL_VER:=v86}"
BINARY_PATH=$1
[ -z "$BINARY_PATH" ] && echo "You must specify a path to the binary as the first argument" && exit 1
shift
EXE_NAME="$(basename ${BINARY_PATH})"
HEXAGON_LIBS_DIR=${HEXAGON_TOOLS_ROOT}/lib
HEXAGON_LIBC_DIR="${HEXAGON_TOOLS_ROOT}/target/hexagon/lib/${HEXAGON_ARCH}/G0/pic"
HEXAGON_SIM="${HEXAGON_TOOLS_ROOT}/bin/hexagon-sim"
SIM_STACK_SIZE=0x400000 # 4 MB
# Copy everything into a temp dir to avoid scrambling our build (etc) dirs.
HVX_SIM_TEMP_DIR=$(mktemp -d)
### Create configuration files for Hexagon simulator's cosimulation plugins
echo "${HVX_SIM_TEMP_DIR}/qtimer.so --csr_base=0xFC900000 --irq_p=1 --freq=19200000 --cnttid=1" > ${HVX_SIM_TEMP_DIR}/q6ss.cfg
echo "${HVX_SIM_TEMP_DIR}/l2vic.so 32 0xFC910000" >> ${HVX_SIM_TEMP_DIR}/q6ss.cfg
### Create RTOS config files
echo "${HVX_SIM_TEMP_DIR}/qurt_model.so" > ${HVX_SIM_TEMP_DIR}/osam.cfg
# Copy the executable and a bunch of helper libs into the same dir;
# trying to get the library loading correct otherwise is far too tricky.
cp -f ${BINARY_PATH} ${HVX_SIM_TEMP_DIR}/${EXE_NAME}
cp -f ${HEXAGON_SDK_ROOT}/libs/run_main_on_hexagon/ship/hexagon_tool${HEXAGON_TOOL_VER}_${HEXAGON_ARCH}/run_main_on_hexagon_sim ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_SDK_ROOT}/rtos/qurt/compute${HEXAGON_ARCH}/debugger/lnx64/qurt_model.so ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_SDK_ROOT}/rtos/qurt/compute${HEXAGON_ARCH}/sdksim_bin/runelf.pbn ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBS_DIR}/iss/l2vic.so ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBS_DIR}/iss/qtimer.so ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBC_DIR}/libc++abi.so.1 ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBC_DIR}/libc++abi.so.1.0 ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBC_DIR}/libc++.so.1 ${HVX_SIM_TEMP_DIR}/
cp -f ${HEXAGON_LIBC_DIR}/libc++.so.1.0 ${HVX_SIM_TEMP_DIR}/
### Invoke the simulator for executable
cd ${HVX_SIM_TEMP_DIR}
LD_LIBRARY_PATH=${HVX_SIM_TEMP_DIR}:${LD_LIBRARY_PATH} \
${HEXAGON_SIM} \
-m${HEXAGON_ARCH} \
--simulated_returnval \
--usefs . \
--pmu_statsfile ${HVX_SIM_TEMP_DIR}/pmu_stats.txt \
--cosim_file ${HVX_SIM_TEMP_DIR}/q6ss.cfg \
--l2tcm_base 0xd800 \
--rtos ${HVX_SIM_TEMP_DIR}/osam.cfg \
${HVX_SIM_TEMP_DIR}/runelf.pbn \
-- \
${HVX_SIM_TEMP_DIR}/run_main_on_hexagon_sim \
stack_size=${SIM_STACK_SIZE} \
-- \
${HVX_SIM_TEMP_DIR}/${EXE_NAME} $@
if (($? != 0 )); then
echo "Simulator run failed!"
rm -rf "${HVX_SIM_TEMP_DIR}"
exit 1
fi
### Cleanup
rm -rf "${HVX_SIM_TEMP_DIR}"