|
#!/usr/bin/env bash |
|
|
|
|
|
OS="linux" |
|
|
|
|
|
CPU="x64" |
|
|
|
|
|
BUILD_TYPE="release" |
|
|
|
PIP_INSTALL_CMD=${PIP_INSTALL_CMD:-"uv pip install --system"} |
|
|
|
build_cxx_extensions() { |
|
local app_dir=$1 |
|
|
|
if [[ ! -f $app_dir/scripts/BUILD.gn ]]; then |
|
echo "FATAL: the scripts/BUILD.gn is required to build cxx extensions." |
|
exit 1 |
|
fi |
|
|
|
cp $app_dir/scripts/BUILD.gn $app_dir |
|
|
|
tgn gen $OS $CPU $BUILD_TYPE -- is_clang=false enable_sanitizer=false |
|
tgn build $OS $CPU $BUILD_TYPE |
|
|
|
local ret=$? |
|
|
|
cd $app_dir |
|
|
|
if [[ $ret -ne 0 ]]; then |
|
echo "FATAL: failed to build cxx extensions, see logs for detail." |
|
exit 1 |
|
fi |
|
|
|
|
|
local out="out/$OS/$CPU" |
|
for extension in $out/ten_packages/extension/*; do |
|
local extension_name=$(basename $extension) |
|
if [[ $extension_name == "*" ]]; then |
|
echo "No cxx extension, nothing to copy." |
|
break |
|
fi |
|
if [[ ! -d $extension/lib ]]; then |
|
echo "No output for extension $extension_name." |
|
continue |
|
fi |
|
|
|
mkdir -p $app_dir/ten_packages/extension/$extension_name/lib |
|
cp -r $extension/lib/* $app_dir/ten_packages/extension/$extension_name/lib |
|
done |
|
} |
|
|
|
install_python_requirements() { |
|
local app_dir=$1 |
|
|
|
if [[ -f "requirements.txt" ]]; then |
|
${PIP_INSTALL_CMD} install -r requirements.txt |
|
fi |
|
|
|
|
|
if [[ -d "ten_packages/extension" ]]; then |
|
for extension in ten_packages/extension/*; do |
|
if [[ -f "$extension/requirements.txt" ]]; then |
|
${PIP_INSTALL_CMD} -r $extension/requirements.txt |
|
fi |
|
done |
|
fi |
|
|
|
|
|
if [[ -d "ten_packages/system" ]]; then |
|
for extension in ten_packages/system/*; do |
|
if [[ -f "$extension/requirements.txt" ]]; then |
|
${PIP_INSTALL_CMD} -r $extension/requirements.txt |
|
fi |
|
done |
|
fi |
|
|
|
|
|
echo "pre-import python modules..." |
|
python3.10 -c "import llama_index.core;" |
|
} |
|
|
|
build_go_app() { |
|
local app_dir=$1 |
|
cd $app_dir |
|
|
|
go run ten_packages/system/ten_runtime_go/tools/build/main.go --verbose |
|
if [[ $? -ne 0 ]]; then |
|
echo "FATAL: failed to build go app, see logs for detail." |
|
exit 1 |
|
fi |
|
} |
|
|
|
clean() { |
|
local app_dir=$1 |
|
rm -rf BUILD.gn out |
|
} |
|
|
|
main() { |
|
APP_HOME=$( |
|
cd $(dirname $0)/.. |
|
pwd |
|
) |
|
|
|
if [[ $1 == "-clean" ]]; then |
|
clean $APP_HOME |
|
exit 0 |
|
fi |
|
|
|
if [[ $# -ne 2 ]]; then |
|
echo "Usage: $0 <os> <cpu>" |
|
exit 1 |
|
fi |
|
|
|
OS=$1 |
|
CPU=$2 |
|
|
|
echo -e "#include <stdio.h>\n#include <immintrin.h>\nint main() { __m256 a = _mm256_setzero_ps(); return 0; }" > /tmp/test.c |
|
if gcc -mavx2 /tmp/test.c -o /tmp/test && ! /tmp/test; then |
|
echo "FATAL: unsupported platform." |
|
echo " Please UNCHECK the 'Use Rosetta for x86_64/amd64 emulation on Apple Silicon' Docker Desktop setting if you're running on mac." |
|
|
|
exit 1 |
|
fi |
|
|
|
if [[ ! -f $APP_HOME/manifest.json ]]; then |
|
echo "FATAL: manifest.json is required." |
|
exit 1 |
|
fi |
|
|
|
|
|
echo "install dependencies..." |
|
tman install |
|
|
|
|
|
echo "build_cxx_extensions..." |
|
build_cxx_extensions $APP_HOME |
|
echo "build_go_app..." |
|
build_go_app $APP_HOME |
|
echo "install_python_requirements..." |
|
install_python_requirements $APP_HOME |
|
} |
|
|
|
main "$@" |
|
|