feat(physics): wire physx sdk into build
This commit is contained in:
192
engine/third_party/physx/buildtools/packman/packman
vendored
Normal file
192
engine/third_party/physx/buildtools/packman/packman
vendored
Normal file
@@ -0,0 +1,192 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2019-2025 NVIDIA CORPORATION
|
||||
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
SAVED_SETTINGS="$-"
|
||||
set -eu
|
||||
|
||||
if echo ${PM_VERBOSITY-} | grep -i "debug" > /dev/null ; then
|
||||
set -x
|
||||
PM_CURL_SILENT=""
|
||||
PM_WGET_QUIET=""
|
||||
else
|
||||
PM_CURL_SILENT="-s -S"
|
||||
PM_WGET_QUIET="--quiet"
|
||||
fi
|
||||
export PM_PACKMAN_VERSION=7.23.1
|
||||
|
||||
# This is necessary for newer macOS
|
||||
if [ `uname` == 'Darwin' ]; then
|
||||
export LC_ALL=en_US.UTF-8
|
||||
export LANG=en_US.UTF-8
|
||||
fi
|
||||
|
||||
# We cannot rely on realpath, it isn't installed on macOS and some Linux distros
|
||||
get_abs_filename() {
|
||||
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
|
||||
}
|
||||
|
||||
# Specify where packman command exists
|
||||
export PM_INSTALL_PATH="$(get_abs_filename "$(dirname "${BASH_SOURCE}")")"
|
||||
|
||||
# The packages root may already be configured by the user
|
||||
if [ -z "${PM_PACKAGES_ROOT:-}" ]; then
|
||||
# Set variable temporarily in this process so that the following execution will work
|
||||
if [ `uname` == 'Darwin' ]; then
|
||||
export PM_PACKAGES_ROOT="${HOME}/Library/Application Support/packman-cache"
|
||||
else
|
||||
if [ -z "${XDG_CACHE_HOME:-}" ]; then
|
||||
export PM_PACKAGES_ROOT="${HOME}/.cache/packman"
|
||||
else
|
||||
export PM_PACKAGES_ROOT="${XDG_CACHE_HOME}/packman"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Ensure the packages root path exists:
|
||||
if [ ! -d "$PM_PACKAGES_ROOT" ]; then
|
||||
echo "Creating packman packages cache at $PM_PACKAGES_ROOT"
|
||||
mkdir -p -m a+rwx "$PM_PACKAGES_ROOT"
|
||||
fi
|
||||
|
||||
fetch_file_from_s3()
|
||||
{
|
||||
SOURCE=$1
|
||||
SOURCE_URL=http://bootstrap.packman.nvidia.com/$SOURCE
|
||||
TARGET=$2
|
||||
echo "Fetching $SOURCE from bootstrap.packman.nvidia.com ..."
|
||||
if command -v wget >/dev/null 2>&1; then
|
||||
wget $PM_WGET_QUIET -O$TARGET $SOURCE_URL
|
||||
else
|
||||
curl -o $TARGET $SOURCE_URL $PM_CURL_SILENT
|
||||
fi
|
||||
}
|
||||
|
||||
generate_temp_file_name()
|
||||
{
|
||||
if [ `uname` == "Darwin" ]; then
|
||||
local tmpfile=`mktemp -t packman`
|
||||
else
|
||||
local tmpfile=`mktemp -t packman.XXXXXXXX`
|
||||
fi
|
||||
echo "$tmpfile"
|
||||
}
|
||||
|
||||
install_python()
|
||||
{
|
||||
PLATFORM=`uname`
|
||||
PROCESSOR=`uname -m`
|
||||
PYTHON_VERSION=3.10.5-1
|
||||
|
||||
if [ $PLATFORM == 'Darwin' ]; then
|
||||
PYTHON_PACKAGE=$PYTHON_VERSION-macos-x86_64
|
||||
elif [ $PLATFORM == 'Linux' ] && [ $PROCESSOR == 'x86_64' ]; then
|
||||
PYTHON_PACKAGE=$PYTHON_VERSION-linux-x86_64
|
||||
elif [ $PLATFORM == 'Linux' ] && [ $PROCESSOR == 'aarch64' ]; then
|
||||
PYTHON_PACKAGE=$PYTHON_VERSION-linux-aarch64
|
||||
else
|
||||
echo "Operating system not supported"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_INSTALL_FOLDER="$PM_PACKAGES_ROOT/python/$PYTHON_PACKAGE"
|
||||
if [ ! -d "$PYTHON_INSTALL_FOLDER" ]; then
|
||||
mkdir -p "$PYTHON_INSTALL_FOLDER"
|
||||
fi
|
||||
|
||||
export PM_PYTHON="$PYTHON_INSTALL_FOLDER/python"
|
||||
|
||||
if [ ! -f "$PM_PYTHON" ]; then
|
||||
PYTHON_PACKAGE_TMP=$(generate_temp_file_name)
|
||||
fetch_file_from_s3 "python@$PYTHON_PACKAGE.tar.gz" "$PYTHON_PACKAGE_TMP"
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "Unpacking python"
|
||||
tar -xf "$PYTHON_PACKAGE_TMP" -C "$PYTHON_INSTALL_FOLDER"
|
||||
rm "$PYTHON_PACKAGE_TMP"
|
||||
else
|
||||
echo "Failed downloading the Python interpreter"
|
||||
exit $?
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Ensure python is available:
|
||||
if [ -z "${PM_PYTHON_EXT:-}" ]; then
|
||||
install_python
|
||||
else
|
||||
PM_PYTHON="$PM_PYTHON_EXT"
|
||||
fi
|
||||
|
||||
# The packman module may be externally configured
|
||||
if [ -z "${PM_MODULE_DIR_EXT:-}" ]; then
|
||||
PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman-common/$PM_PACKMAN_VERSION"
|
||||
else
|
||||
PM_MODULE_DIR="$PM_MODULE_DIR_EXT"
|
||||
fi
|
||||
export PM_MODULE="$PM_MODULE_DIR/run.py"
|
||||
|
||||
# Ensure the packman package exists:
|
||||
if [ ! -f "$PM_MODULE" ]; then
|
||||
# Remove a previously corrupt packman-common if it's there
|
||||
if [ -d "$PM_MODULE_DIR" ]; then
|
||||
rm -rf "$PM_MODULE_DIR"
|
||||
fi
|
||||
PM_MODULE_PACKAGE="packman-common@$PM_PACKMAN_VERSION.zip"
|
||||
TARGET=$(generate_temp_file_name)
|
||||
# We always fetch packman from S3:
|
||||
fetch_file_from_s3 "$PM_MODULE_PACKAGE" "$TARGET"
|
||||
if [ "$?" -eq "0" ]; then
|
||||
echo "Unpacking ..."
|
||||
"$PM_PYTHON" -S -s -u -E "$PM_INSTALL_PATH/bootstrap/install_package.py" "$TARGET" "$PM_MODULE_DIR"
|
||||
rm "$TARGET"
|
||||
else
|
||||
echo "Failure while fetching packman module from S3!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Generate temporary file name for environment variables:
|
||||
PM_VAR_PATH=`mktemp -u -t tmp.$$.pmvars.XXXXXX`
|
||||
|
||||
if [ $# -ne 0 ]
|
||||
then
|
||||
PM_VAR_PATH_ARG=--var-path="$PM_VAR_PATH"
|
||||
fi
|
||||
|
||||
"$PM_PYTHON" -S -s -u -E "$PM_MODULE" "$@" ${PM_VAR_PATH_ARG:-}
|
||||
exit_code=$?
|
||||
# Export the variables if the file was used and remove the file:
|
||||
if [ -f "$PM_VAR_PATH" ]; then
|
||||
while read -r line
|
||||
do
|
||||
if [ ${#line} -gt 0 ]; then
|
||||
export "$line"
|
||||
fi
|
||||
done < "$PM_VAR_PATH"
|
||||
rm -f "$PM_VAR_PATH"
|
||||
fi
|
||||
|
||||
# avoid leaking -e and -u into the host script if they weren't originally set
|
||||
if [[ ! ( "$SAVED_SETTINGS" =~ e ) ]]; then
|
||||
set +e
|
||||
fi
|
||||
|
||||
if [[ ! ( "$SAVED_SETTINGS" =~ u ) ]]; then
|
||||
set +u
|
||||
fi
|
||||
|
||||
# Return the exit code from python
|
||||
if [ "$exit_code" != 0 ]; then
|
||||
exit "$exit_code"
|
||||
fi
|
||||
Reference in New Issue
Block a user