upgpkg(main, x11): clvk, emscripten, gl4es, ocl-icd, vulkan-loader-android (#11869)

* upgpkg(main/clvk): to 0.0.20220905.094010gdf8b39f9
* enhance(main/vulkan-loader-android): add pkg-config vulkan.pc
* chore(main/emscripten): clean up build.sh
* chore(main/ocl-icd): drop ICD creation
* upgpkg(x11/gl4es): to 1.1.4.20220830.165620g1cfe8bc7
This commit is contained in:
Jia Yuan Lo 2022-09-10 17:01:17 +08:00 committed by GitHub
parent 1d688ed882
commit 7e44167e6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 239 additions and 153 deletions

View File

@ -2,14 +2,13 @@ TERMUX_PKG_HOMEPAGE=https://github.com/kpet/clvk
TERMUX_PKG_DESCRIPTION="Experimental implementation of OpenCL on Vulkan"
TERMUX_PKG_LICENSE="Apache-2.0"
TERMUX_PKG_MAINTAINER="@termux"
_COMMIT=f001d519415f97ca54fd1b37c9a13566e09a5e8e
_COMMIT_DATE=20220904
_COMMIT_TIME=103310
# termux_pkg_upgrade_version edits TERMUX_PKG_VERSION wholly
TERMUX_PKG_VERSION="0.0.20220904gf001d519"
_COMMIT=df8b39f9819dff689b2d8a42dd84d1ecdbebee2f
_COMMIT_DATE=20220905
_COMMIT_TIME=094010
TERMUX_PKG_VERSION="0.0.20220905.094010gdf8b39f9"
TERMUX_PKG_SRCURL=https://github.com/kpet/clvk.git
TERMUX_PKG_GIT_BRANCH=main
TERMUX_PKG_BUILD_DEPENDS="vulkan-loader-android, vulkan-headers"
TERMUX_PKG_BUILD_DEPENDS="vulkan-headers, vulkan-loader-android"
TERMUX_PKG_DEPENDS="libc++"
TERMUX_PKG_SUGGESTS="ocl-icd"
TERMUX_PKG_HOSTBUILD=true
@ -21,11 +20,33 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
# https://github.com/kpet/clvk/blob/main/CMakeLists.txt
# clvk prefers Khronos Vulkan Loader instead of NDK stub
# Sticking with NDK should expose more Vulkan limitations in Android
# As noted in build test, failure comes when linking with API 24 libvulkan.so
# clvk will not work on Android versions older than Android 9 (API 28)
#
# [1877/1888] Linking CXX executable api_tests
# FAILED: api_tests
# ...
# libOpenCL.so: error: undefined reference to 'vkGetPhysicalDeviceFeatures2'
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+="
-DCLVK_BUILD_TESTS=OFF
-DCLVK_VULKAN_IMPLEMENTATION=custom
-DVulkan_INCLUDE_DIRS=$TERMUX_PREFIX/include
-DVulkan_LIBRARIES=vulkan
"
# clvk libOpenCL.so has hardcoded clspv bin path at build time
# clvk cant automatically find clspv from PATH env var
# and rely on CLVK_CLSPV_BIN env var
# Use CLVK_CLSPV_ONLINE_COMPILER=ON to combine clspv with clvk
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DCLVK_CLSPV_ONLINE_COMPILER=ON"
# clvk currently does not have proper versioning nor releases
# Use dates and commits as versioning for now
termux_pkg_auto_update() {
local latest_commit
latest_commit="$(curl -s https://api.github.com/repos/kpet/clvk/commits | jq .[].sha | head -1 | sed -e 's|\"||g')"
local latest_commit latest_commit_date_tz latest_commit_date latest_commit_time latest_version
latest_commit=$(curl -s https://api.github.com/repos/kpet/clvk/commits | jq .[].sha | head -1 | sed -e 's|\"||g')
if [ -z "$latest_commit" ]; then
termux_error_exit "ERROR: Unable to get latest commit from upstream"
@ -36,22 +57,22 @@ termux_pkg_auto_update() {
return 0
fi
local latest_commit_date_tz
latest_commit_date_tz="$(curl -s https://api.github.com/repos/kpet/clvk/commits/$latest_commit | jq .commit.committer.date | sed -e 's|\"||g')"
latest_commit_date_tz=$(curl -s "https://api.github.com/repos/kpet/clvk/commits/$latest_commit" | jq .commit.committer.date | sed -e 's|\"||g')
if [ -z "$latest_commit_date_tz" ]; then
termux_error_exit "ERROR: Unable to get latest commit date info"
fi
local latest_commit_date="$(echo $latest_commit_date_tz | sed -e 's|\(.*\)T\(.*\)Z|\1|' -e 's|\-||g')"
local latest_commit_time="$(echo $latest_commit_date_tz | sed -e 's|\(.*\)T\(.*\)Z|\2|' -e 's|\:||g')"
local latest_version="0.0.${latest_commit_date}g${latest_commit:0:8}"
latest_commit_date=$(echo "$latest_commit_date_tz" | sed -e 's|\(.*\)T\(.*\)Z|\1|' -e 's|\-||g')
latest_commit_time=$(echo "$latest_commit_date_tz" | sed -e 's|\(.*\)T\(.*\)Z|\2|' -e 's|\:||g')
# less likely to happen, not going to include time into an already long versioning
if [ "$latest_commit_date" -eq "$_COMMIT_DATE" ] && [ "$latest_commit_time" -gt "$_COMMIT_TIME" ]; then
if ! dpkg --compare-versions "$latest_version" gt "$TERMUX_PKG_VERSION"; then
termux_error_exit "ERROR: Resulting latest version is not counted as update to the current version ($latest_version < $TERMUX_PKG_VERSION)"
fi
# https://github.com/termux/termux-packages/issues/11827
# really fix it by including longer date time info into versioning
# always check this in case upstream change the version format
latest_version="0.0.${latest_commit_date}.${latest_commit_time}g${latest_commit:0:8}"
if ! dpkg --compare-versions "$latest_version" gt "$TERMUX_PKG_VERSION"; then
termux_error_exit "ERROR: Resulting latest version is not counted as update to the current version ($latest_version < $TERMUX_PKG_VERSION)"
fi
# unlikely to happen
@ -69,32 +90,9 @@ termux_pkg_auto_update() {
termux_pkg_upgrade_version "$latest_version" --skip-version-check
}
# clvk prefers Khronos Vulkan Loader than the one come from NDK
# Sticking with NDK should expose more Vulkan limitations in Android (like below)
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+="
-DCLVK_VULKAN_IMPLEMENTATION=custom
-DVulkan_INCLUDE_DIRS=$TERMUX_PREFIX/include
-DVulkan_LIBRARIES=vulkan
"
# clvk build test fail when linking with API 24 libvulkan.so
# clvk likely wont work on Android versions older than Android 9 (API 28)
#
# [1877/1888] Linking CXX executable api_tests
# FAILED: api_tests
# ...
# libOpenCL.so: error: undefined reference to 'vkGetPhysicalDeviceFeatures2'
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DCLVK_BUILD_TESTS=OFF"
# clvk libOpenCL.so has a hardcoded path clspv bin at build time
# clvk cant automatically find clspv from PATH env var
# and rely on CLVK_CLSPV_BIN env var
# Use CLVK_CLSPV_ONLINE_COMPILER=1 to combine clspv with clvk
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DCLVK_CLSPV_ONLINE_COMPILER=1"
termux_step_post_get_source() {
git fetch --unshallow
git reset --hard ${_COMMIT}
git reset --hard $_COMMIT
git submodule deinit --force --all
git submodule update --init --recursive
./external/clspv/utils/fetch_sources.py --deps llvm
@ -117,21 +115,21 @@ termux_step_host_build() {
termux_step_pre_configure() {
# from packages/libllvm/build.sh
export LLVM_DEFAULT_TARGET_TRIPLE=${CCTERMUX_HOST_PLATFORM/-/-unknown-}
export LLVM_TARGET_ARCH
export _LLVM_DEFAULT_TARGET_TRIPLE=${CCTERMUX_HOST_PLATFORM/-/-unknown-}
export _LLVM_TARGET_ARCH
if [ "$TERMUX_ARCH" = arm ]; then
LLVM_TARGET_ARCH=ARM
_LLVM_TARGET_ARCH=ARM
elif [ "$TERMUX_ARCH" = aarch64 ]; then
LLVM_TARGET_ARCH=AArch64
_LLVM_TARGET_ARCH=AArch64
elif [ "$TERMUX_ARCH" = i686 ] || [ "$TERMUX_ARCH" = x86_64 ]; then
LLVM_TARGET_ARCH=X86
_LLVM_TARGET_ARCH=X86
else
termux_error_exit "Invalid arch: $TERMUX_ARCH"
fi
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGET_ARCH=$LLVM_TARGET_ARCH"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGETS_TO_BUILD=$LLVM_TARGET_ARCH"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_HOST_TRIPLE=$LLVM_DEFAULT_TARGET_TRIPLE"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGET_ARCH=$_LLVM_TARGET_ARCH"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_TARGETS_TO_BUILD=$_LLVM_TARGET_ARCH"
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DLLVM_HOST_TRIPLE=$_LLVM_DEFAULT_TARGET_TRIPLE"
# TERMUX_DEBUG_BUILD doesnt really have somewhere in between
#TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DCMAKE_BUILD_TYPE=RelWithDebInfo"
@ -139,7 +137,7 @@ termux_step_pre_configure() {
}
termux_step_make_install() {
# clvk has a very basic install rule
# clvk does not have proper install rule yet
install -Dm644 "$TERMUX_PKG_BUILDDIR/libOpenCL.so" "$TERMUX_PREFIX/lib/clvk/libOpenCL.so"
echo "$TERMUX_PREFIX/lib/clvk/libOpenCL.so" > "$TERMUX_PKG_TMPDIR/clvk.icd"

View File

@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Emscripten: An LLVM-to-WebAssembly Compiler"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_MAINTAINER="@truboxl"
TERMUX_PKG_VERSION="3.1.21"
TERMUX_PKG_REVISION=1
TERMUX_PKG_SRCURL=https://github.com/emscripten-core/emscripten.git
TERMUX_PKG_GIT_BRANCH=$TERMUX_PKG_VERSION
TERMUX_PKG_PLATFORM_INDEPENDENT=true
@ -50,63 +51,20 @@ opt/emscripten-llvm/share
opt/emscripten/LICENSE
"
# based on scripts/updates/internal/termux_github_auto_update.sh
termux_pkg_auto_update() {
local latest_tag
latest_tag="$(termux_github_api_get_tag "${TERMUX_PKG_SRCURL}" "${TERMUX_PKG_UPDATE_TAG_TYPE}")"
if [ -z "$latest_tag" ]; then
termux_error_exit "ERROR: Unable to get tag from ${TERMUX_PKG_SRCURL}"
fi
if [ "$latest_tag" = "$TERMUX_PKG_VERSION" ]; then
echo "INFO: No update needed. Already at version '$TERMUX_PKG_VERSION'."
return 0
fi
# https://github.com/emscripten-core/emscripten/blob/main/docs/packaging.md
# https://github.com/archlinux/svntogit-community/tree/packages/emscripten/trunk
# below generates commit hash for the deps according to emscripten releases
local releases_tags release_tag deps_revision deps_json llvm_commit binaryen_commit llvm_tgz_sha256 binaryen_tgz_sha256
releases_tags=$(curl -s https://raw.githubusercontent.com/emscripten-core/emsdk/main/emscripten-releases-tags.json)
release_tag=$(echo $releases_tags | python3 -c "import json,sys;print(json.load(sys.stdin)[\"releases\"][\"$latest_tag\"])")
deps_revision=$(curl -s https://chromium.googlesource.com/emscripten-releases/+/$release_tag/DEPS?format=text | base64 -d | grep "_revision':" | sed -e "s|'|\"|g")
deps_json=$(echo -e "{\n${deps_revision}EOL" | sed -e "s|,EOL|\n}|")
llvm_commit=$(echo $deps_json | python3 -c "import json,sys;print(json.load(sys.stdin)[\"llvm_project_revision\"])")
binaryen_commit=$(echo $deps_json | python3 -c "import json,sys;print(json.load(sys.stdin)[\"binaryen_revision\"])")
curl -LC - "https://github.com/llvm/llvm-project/archive/$llvm_commit.tar.gz" -o "${TMPDIR:-/tmp}/$llvm_commit.tar.gz"
curl -LC - "https://github.com/WebAssembly/binaryen/archive/$binaryen_commit.tar.gz" -o "${TMPDIR:-/tmp}/$binaryen_commit.tar.gz"
llvm_tgz_sha256=$(sha256sum ${TMPDIR:-/tmp}/$llvm_commit.tar.gz | sed -e "s| .*$||")
binaryen_tgz_sha256=$(sha256sum ${TMPDIR:-/tmp}/$binaryen_commit.tar.gz | sed -e "s| .*$||")
echo "INFO: Generated *.tar.gz checksum for:"
echo "LLVM_COMMIT $llvm_commit = $llvm_tgz_sha256"
echo "BINARYEN_COMMIT $binaryen_commit = $binaryen_tgz_sha256"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^LLVM_COMMIT=.*|LLVM_COMMIT=${llvm_commit}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^LLVM_TGZ_SHA256=.*|LLVM_TGZ_SHA256=${llvm_tgz_sha256}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^BINARYEN_COMMIT=.*|BINARYEN_COMMIT=${binaryen_commit}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^BINARYEN_TGZ_SHA256=.*|BINARYEN_TGZ_SHA256=${binaryen_tgz_sha256}|"
rm -f "${TMPDIR:-/tmp}/$llvm_commit.tar.gz" "${TMPDIR:-/tmp}/$binaryen_commit.tar.gz"
termux_pkg_upgrade_version "$latest_tag"
}
# https://github.com/emscripten-core/emscripten/issues/11362
# can switch to stable LLVM to save space once above is fixed
LLVM_COMMIT=a4a29438f451370ed241dde30bfcaab0fdf2ab71
LLVM_TGZ_SHA256=2027181a504c69bfeba0aaf8c127b4b11a78e5963a1800ea57861e4605abf4a6
_LLVM_COMMIT=a4a29438f451370ed241dde30bfcaab0fdf2ab71
_LLVM_TGZ_SHA256=2027181a504c69bfeba0aaf8c127b4b11a78e5963a1800ea57861e4605abf4a6
# https://github.com/emscripten-core/emscripten/issues/12252
# upstream says better bundle the right binaryen revision for now
BINARYEN_COMMIT=d4d33b1e175c962548347c59339783c11d5d1a23
BINARYEN_TGZ_SHA256=922d76c0129cc75a005d4c09f6c3d0c229331d57e69846ff63414e11c58ad504
_BINARYEN_COMMIT=d4d33b1e175c962548347c59339783c11d5d1a23
_BINARYEN_TGZ_SHA256=922d76c0129cc75a005d4c09f6c3d0c229331d57e69846ff63414e11c58ad504
# https://github.com/emscripten-core/emsdk/blob/main/emsdk.py
# https://chromium.googlesource.com/emscripten-releases/+/refs/heads/main/src/build.py
# https://github.com/llvm/llvm-project
LLVM_BUILD_ARGS="
_LLVM_BUILD_ARGS="
-DCMAKE_BUILD_TYPE=MinSizeRel
-DCMAKE_CROSSCOMPILING=ON
-DCMAKE_INSTALL_PREFIX=$TERMUX_PREFIX/opt/emscripten-llvm
@ -141,30 +99,73 @@ LLVM_BUILD_ARGS="
"
# https://github.com/WebAssembly/binaryen/blob/main/CMakeLists.txt
BINARYEN_BUILD_ARGS="
_BINARYEN_BUILD_ARGS="
-DCMAKE_INSTALL_PREFIX=$TERMUX_PREFIX/opt/emscripten-binaryen
-DBUILD_TESTS=OFF
"
# based on scripts/updates/internal/termux_github_auto_update.sh
termux_pkg_auto_update() {
local latest_tag
latest_tag=$(termux_github_api_get_tag "${TERMUX_PKG_SRCURL}" "${TERMUX_PKG_UPDATE_TAG_TYPE}")
if [ -z "$latest_tag" ]; then
termux_error_exit "ERROR: Unable to get tag from ${TERMUX_PKG_SRCURL}"
fi
if [ "$latest_tag" = "$TERMUX_PKG_VERSION" ]; then
echo "INFO: No update needed. Already at version '$TERMUX_PKG_VERSION'."
return 0
fi
# https://github.com/emscripten-core/emscripten/blob/main/docs/packaging.md
# https://github.com/archlinux/svntogit-community/tree/packages/emscripten/trunk
# below generates commit hash for the deps according to emscripten releases
local releases_tags release_tag deps_revision deps_json llvm_commit binaryen_commit llvm_tgz_sha256 binaryen_tgz_sha256
releases_tags=$(curl -s https://raw.githubusercontent.com/emscripten-core/emsdk/main/emscripten-releases-tags.json)
release_tag=$(echo "$releases_tags" | python3 -c "import json,sys;print(json.load(sys.stdin)[\"releases\"][\"$latest_tag\"])")
deps_revision=$(curl -s "https://chromium.googlesource.com/emscripten-releases/+/$release_tag/DEPS?format=text" | base64 -d | grep "_revision':" | sed -e "s|'|\"|g")
deps_json=$(echo -e "{\n${deps_revision}EOL" | sed -e "s|,EOL|\n}|")
llvm_commit=$(echo "$deps_json" | python3 -c "import json,sys;print(json.load(sys.stdin)[\"llvm_project_revision\"])")
binaryen_commit=$(echo "$deps_json" | python3 -c "import json,sys;print(json.load(sys.stdin)[\"binaryen_revision\"])")
curl -LC - "https://github.com/llvm/llvm-project/archive/$llvm_commit.tar.gz" -o "${TMPDIR:-/tmp}/$llvm_commit.tar.gz"
curl -LC - "https://github.com/WebAssembly/binaryen/archive/$binaryen_commit.tar.gz" -o "${TMPDIR:-/tmp}/$binaryen_commit.tar.gz"
llvm_tgz_sha256=$(sha256sum "${TMPDIR:-/tmp}/$llvm_commit.tar.gz" | sed -e "s| .*$||")
binaryen_tgz_sha256=$(sha256sum "${TMPDIR:-/tmp}/$binaryen_commit.tar.gz" | sed -e "s| .*$||")
echo "INFO: Generated *.tar.gz checksum for:"
echo "_LLVM_COMMIT $llvm_commit = $llvm_tgz_sha256"
echo "_BINARYEN_COMMIT $binaryen_commit = $binaryen_tgz_sha256"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^_LLVM_COMMIT=.*|_LLVM_COMMIT=${llvm_commit}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^_LLVM_TGZ_SHA256=.*|_LLVM_TGZ_SHA256=${llvm_tgz_sha256}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^_BINARYEN_COMMIT=.*|_BINARYEN_COMMIT=${binaryen_commit}|"
sed -i "$TERMUX_PKG_BUILDER_DIR/build.sh" -e "s|^_BINARYEN_TGZ_SHA256=.*|_BINARYEN_TGZ_SHA256=${binaryen_tgz_sha256}|"
rm -f "${TMPDIR:-/tmp}/$llvm_commit.tar.gz" "${TMPDIR:-/tmp}/$binaryen_commit.tar.gz"
termux_pkg_upgrade_version "$latest_tag"
}
termux_step_post_get_source() {
termux_download \
"https://github.com/llvm/llvm-project/archive/$LLVM_COMMIT.tar.gz" \
"https://github.com/llvm/llvm-project/archive/$_LLVM_COMMIT.tar.gz" \
"$TERMUX_PKG_CACHEDIR/llvm.tar.gz" \
"$LLVM_TGZ_SHA256"
"$_LLVM_TGZ_SHA256"
termux_download \
"https://github.com/WebAssembly/binaryen/archive/$BINARYEN_COMMIT.tar.gz" \
"https://github.com/WebAssembly/binaryen/archive/$_BINARYEN_COMMIT.tar.gz" \
"$TERMUX_PKG_CACHEDIR/binaryen.tar.gz" \
"$BINARYEN_TGZ_SHA256"
"$_BINARYEN_TGZ_SHA256"
tar -xf "$TERMUX_PKG_CACHEDIR/llvm.tar.gz" -C "$TERMUX_PKG_CACHEDIR"
tar -xf "$TERMUX_PKG_CACHEDIR/binaryen.tar.gz" -C "$TERMUX_PKG_CACHEDIR"
local llvm_patches="$(find $TERMUX_PKG_BUILDER_DIR -mindepth 1 -maxdepth 1 -type f -name 'llvm-project-*.patch.diff')"
local llvm_patches=$(find "$TERMUX_PKG_BUILDER_DIR" -mindepth 1 -maxdepth 1 -type f -name 'llvm-project-*.patch.diff')
if [ -n "$llvm_patches" ]; then
cd "$TERMUX_PKG_CACHEDIR/llvm-project-$LLVM_COMMIT"
cd "$TERMUX_PKG_CACHEDIR/llvm-project-$_LLVM_COMMIT"
for patch in $llvm_patches; do
patch -p1 -i "$patch" || true
patch -p1 -i "$patch" || :
done
local llvm_patches_rej="$(find . -type f -name '*.rej')"
local llvm_patches_rej=$(find . -type f -name '*.rej')
if [ -n "$llvm_patches_rej" ]; then
echo "INFO: Patch failed! Printing *.rej files ..."
for rej in $llvm_patches_rej; do
@ -175,13 +176,13 @@ termux_step_post_get_source() {
fi
fi
local binaryen_patches="$(find $TERMUX_PKG_BUILDER_DIR -mindepth 1 -maxdepth 1 -type f -name 'binaryen-*.patch.diff')"
local binaryen_patches=$(find "$TERMUX_PKG_BUILDER_DIR" -mindepth 1 -maxdepth 1 -type f -name 'binaryen-*.patch.diff')
if [ -n "$binaryen_patches" ]; then
cd "$TERMUX_PKG_CACHEDIR/binaryen-$BINARYEN_COMMIT"
cd "$TERMUX_PKG_CACHEDIR/binaryen-$_BINARYEN_COMMIT"
for patch in $binaryen_patches; do
patch -p1 -i "$patch" || true
patch -p1 -i "$patch" || :
done
local binaryen_patches_rej="$(find . -type f -name '*.rej')"
local binaryen_patches_rej=$(find . -type f -name '*.rej')
if [ -n "$binaryen_patches_rej" ]; then
echo "INFO: Patch failed! Printing *.rej files ..."
for rej in $binaryen_patches_rej; do
@ -199,7 +200,7 @@ termux_step_host_build() {
cmake \
-G Ninja \
-S "$TERMUX_PKG_CACHEDIR/llvm-project-$LLVM_COMMIT/llvm" \
-S "$TERMUX_PKG_CACHEDIR/llvm-project-$_LLVM_COMMIT/llvm" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS=clang
cmake \
@ -213,27 +214,27 @@ termux_step_make() {
termux_setup_ninja
# from packages/libllvm/build.sh
export LLVM_DEFAULT_TARGET_TRIPLE=${CCTERMUX_HOST_PLATFORM/-/-unknown-}
export LLVM_TARGET_ARCH
export _LLVM_DEFAULT_TARGET_TRIPLE=${CCTERMUX_HOST_PLATFORM/-/-unknown-}
export _LLVM_TARGET_ARCH
if [ "$TERMUX_ARCH" = arm ]; then
LLVM_TARGET_ARCH=ARM
_LLVM_TARGET_ARCH=ARM
elif [ "$TERMUX_ARCH" = aarch64 ]; then
LLVM_TARGET_ARCH=AArch64
_LLVM_TARGET_ARCH=AArch64
elif [ "$TERMUX_ARCH" = i686 ] || [ "$TERMUX_ARCH" = x86_64 ]; then
LLVM_TARGET_ARCH=X86
_LLVM_TARGET_ARCH=X86
else
termux_error_exit "Invalid arch: $TERMUX_ARCH"
fi
LLVM_BUILD_ARGS+=" -DLLVM_TARGET_ARCH=$LLVM_TARGET_ARCH"
LLVM_BUILD_ARGS+=" -DLLVM_TARGETS_TO_BUILD=WebAssembly;$LLVM_TARGET_ARCH"
LLVM_BUILD_ARGS+=" -DLLVM_HOST_TRIPLE=$LLVM_DEFAULT_TARGET_TRIPLE"
_LLVM_BUILD_ARGS+=" -DLLVM_TARGET_ARCH=$_LLVM_TARGET_ARCH"
_LLVM_BUILD_ARGS+=" -DLLVM_TARGETS_TO_BUILD=WebAssembly;$_LLVM_TARGET_ARCH"
_LLVM_BUILD_ARGS+=" -DLLVM_HOST_TRIPLE=$_LLVM_DEFAULT_TARGET_TRIPLE"
cmake \
-G Ninja \
-S "$TERMUX_PKG_CACHEDIR/llvm-project-$LLVM_COMMIT/llvm" \
-S "$TERMUX_PKG_CACHEDIR/llvm-project-$_LLVM_COMMIT/llvm" \
-B "$TERMUX_PKG_BUILDDIR/build-llvm" \
$LLVM_BUILD_ARGS
$_LLVM_BUILD_ARGS
cmake \
--build "$TERMUX_PKG_BUILDDIR/build-llvm" \
-j "$TERMUX_MAKE_PROCESSES" \
@ -241,9 +242,9 @@ termux_step_make() {
cmake \
-G Ninja \
-S "$TERMUX_PKG_CACHEDIR/binaryen-$BINARYEN_COMMIT" \
-S "$TERMUX_PKG_CACHEDIR/binaryen-$_BINARYEN_COMMIT" \
-B "$TERMUX_PKG_BUILDDIR/build-binaryen" \
$BINARYEN_BUILD_ARGS
$_BINARYEN_BUILD_ARGS
cmake \
--build "$TERMUX_PKG_BUILDDIR/build-binaryen" \
-j "$TERMUX_MAKE_PROCESSES" \
@ -348,6 +349,7 @@ termux_step_create_debscripts() {
# Steps:
# - pkg install cmake emscripten-tests-third-party ndk-sysroot openjdk-17
# - cd $PREFIX/opt/emscripten
# - MATHLIB="m" pip install -r requirements-dev.txt
# - npm install --omit=optional
# - export EMTEST_SKIP_V8=1
# - test/runner {test_name}

View File

@ -3,7 +3,7 @@ TERMUX_PKG_DESCRIPTION="OpenCL ICD Loader"
TERMUX_PKG_LICENSE="BSD 2-Clause"
TERMUX_PKG_MAINTAINER="@termux"
TERMUX_PKG_VERSION=2.3.1
TERMUX_PKG_REVISION=1
TERMUX_PKG_REVISION=2
TERMUX_PKG_SRCURL=https://github.com/OCL-dev/ocl-icd/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=a32b67c2d52ffbaf490be9fc18b46428ab807ab11eff7664d7ff75e06cfafd6d
TERMUX_PKG_NO_STATICSPLIT=true
@ -19,13 +19,7 @@ termux_step_pre_configure() {
./bootstrap
}
termux_step_post_make_install() {
# User is still expected to export LD_LIBRARY_PATH environment variable to use
# vendor provided libOpenCL.so on Android
if [ "$TERMUX_ARCH_BITS" = 64 ]; then
echo "/vendor/lib64/libOpenCL.so" > "$TERMUX_PKG_TMPDIR/android.icd"
else
echo "/vendor/lib/libOpenCL.so" > "$TERMUX_PKG_TMPDIR/android.icd"
fi
install -Dm644 "$TERMUX_PKG_TMPDIR/android.icd" "$TERMUX_PREFIX/etc/OpenCL/vendors/android.icd"
}
# https://github.com/termux/termux-packages/issues/7510
# Removed handling of PREFIX/etc/OpenCL/vendors to match Desktop Linux ocl-icd behaviour
# Removed creation of android.icd as it never worked without modifying LD_LIBRARY_PATH on Android
# Driver packages (eg: clvk) should be the one handling the items above

View File

@ -3,7 +3,8 @@ TERMUX_PKG_DESCRIPTION="Vulkan Loader for Android"
TERMUX_PKG_LICENSE="NCSA"
TERMUX_PKG_MAINTAINER="@termux"
TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION
TERMUX_PKG_REVISION=2
TERMUX_PKG_REVISION=3
TERMUX_PKG_HOSTBUILD=true
TERMUX_PKG_SKIP_SRC_EXTRACT=true
# Desktop Vulkan Loader
@ -17,13 +18,58 @@ TERMUX_PKG_SKIP_SRC_EXTRACT=true
# Vulkan functions exported by Android Vulkan Loader depending on API version
# https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/libvulkan/libvulkan.map.txt
# For now this package provides the NDK stub libvulkan.so
# The package will symbolic link system provided libvulkan.so to Termux Prefix
# if available
# For now this package provides the NDK stub libvulkan.so (Termux current minimum API verison)
# If system libvulkan.so is available, the stub will be replaced with symlink to system libvulkan.so
termux_step_host_build() {
# it doesnt make sense to set vulkan.pc version to:
# 1. vulkan-loader package version and bump this package every time the former updates
# 2. NDK version since the stubs are the same between NDK releases AFAIK and isnt related to vulkan
# so we use NDK provided vulkan header version but https://github.com/android/ndk/issues/1721
# NDK shows that there is 2 different versions of vulkan headers
cat <<- EOF > vulkan_header_version.c
#include <stdio.h>
#include "vulkan/vulkan_core.h"
int main(void) {
printf("%d.%d.%d\n",
VK_HEADER_VERSION_COMPLETE >> 22,
VK_HEADER_VERSION_COMPLETE >> 12 & 0x03ff,
VK_HEADER_VERSION_COMPLETE & 0x0fff);
return 0;
}
EOF
rm -fr ./vulkan
cp -fr "$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/vulkan" ./vulkan
cc vulkan_header_version.c -o vulkan_header_version
}
termux_step_post_make_install() {
cp -fv "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_API_LEVEL/libvulkan.so" \
install -v -Dm644 \
"$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_API_LEVEL/libvulkan.so" \
"$TERMUX_PREFIX/lib/libvulkan.so"
local vulkan_loader_version
vulkan_loader_version="$($TERMUX_PKG_HOSTBUILD_DIR/vulkan_header_version)"
if [ -z "$vulkan_loader_version" ]; then
termux_error_exit "ERROR: Host built vulkan_header_version is not printing version!"
fi
# based on https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/vulkan.pc.in
# not using "Libs.private"
cat <<- EOF > "$TERMUX_PKG_TMPDIR/vulkan.pc"
prefix=$TERMUX_PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Name: Vulkan-Loader
Description: Vulkan Loader
Version: $vulkan_loader_version
Libs: -L\${libdir} -lvulkan
Cflags: -I\${includedir}
EOF
install -Dm644 "$TERMUX_PKG_TMPDIR/vulkan.pc" "$TERMUX_PREFIX/lib/pkgconfig/vulkan.pc"
echo "INFO: Printing vulkan.pc..."
cat "$TERMUX_PREFIX/lib/pkgconfig/vulkan.pc"
}
termux_step_create_debscripts() {
@ -31,8 +77,8 @@ termux_step_create_debscripts() {
cat <<- EOF > postinst
#!$TERMUX_PREFIX/bin/sh
if [ -e /system/lib${_BITS}/libvulkan.so ]; then
echo "Symlink /system/lib${_BITS}/libvulkan.so to $TERMUX_PREFIX/lib/libvulkan.so ..."
ln -fsT "/system/lib${_BITS}/libvulkan.so" "$TERMUX_PREFIX/lib/libvulkan.so"
echo "Symlink /system/lib${_BITS}/libvulkan.so to $TERMUX_PREFIX/lib/libvulkan.so ..."
ln -fsT "/system/lib${_BITS}/libvulkan.so" "$TERMUX_PREFIX/lib/libvulkan.so"
fi
EOF

View File

@ -1,29 +1,75 @@
TERMUX_PKG_HOMEPAGE=https://ptitseb.github.io/gl4es/
TERMUX_PKG_DESCRIPTION="OpenGL driver for GLES devices"
TERMUX_PKG_LICENSE="MIT"
TERMUX_PKG_MAINTAINER="@suhan-paradkar"
TERMUX_PKG_VERSION=1.1.4
TERMUX_PKG_REVISION=2
_COMMIT=dab338dc5d16807a071454e6116faf09c37f8a31
TERMUX_PKG_MAINTAINER="@termux"
_COMMIT=1cfe8bc776b447f03ad102b9f578bfbca31b4727
_COMMIT_DATE=20220830
_COMMIT_TIME=165620
TERMUX_PKG_VERSION="1.1.4.20220830.165620g1cfe8bc7"
TERMUX_PKG_SRCURL=https://github.com/ptitSeb/gl4es.git
TERMUX_PKG_GIT_BRANCH=master
TERMUX_PKG_DEPENDS="libx11"
TERMUX_PKG_AUTO_UPDATE=true
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
-DTERMUX=ON
-DCMAKE_SYSTEM_NAME=Linux
"
# this should only be used until release new version
termux_pkg_auto_update() {
local latest_commit latest_commit_date_tz latest_commit_date latest_commit_time latest_version
latest_commit=$(curl -s https://api.github.com/repos/ptitSeb/gl4es/commits | jq .[].sha | head -1 | sed -e 's|\"||g')
if [ -z "$latest_commit" ]; then
termux_error_exit "ERROR: Unable to get latest commit from upstream"
fi
if [ "$latest_commit" = "$_COMMIT" ]; then
echo "INFO: No update needed. Already at version '$TERMUX_PKG_VERSION'."
return 0
fi
latest_commit_date_tz=$(curl -s "https://api.github.com/repos/ptitSeb/gl4es/commits/$latest_commit" | jq .commit.committer.date | sed -e 's|\"||g')
if [ -z "$latest_commit_date_tz" ]; then
termux_error_exit "ERROR: Unable to get latest commit date info"
fi
latest_commit_date=$(echo "$latest_commit_date_tz" | sed -e 's|\(.*\)T\(.*\)Z|\1|' -e 's|\-||g')
latest_commit_time=$(echo "$latest_commit_date_tz" | sed -e 's|\(.*\)T\(.*\)Z|\2|' -e 's|\:||g')
# always check this in case upstream change the version format
latest_version="1.1.4.${latest_commit_date}.${latest_commit_time}g${latest_commit:0:8}"
if ! dpkg --compare-versions "$latest_version" gt "$TERMUX_PKG_VERSION"; then
termux_error_exit "ERROR: Resulting latest version is not counted as update to the current version ($latest_version < $TERMUX_PKG_VERSION)"
fi
# unlikely to happen
if [ "$latest_commit_date" -lt "$_COMMIT_DATE" ]; then
termux_error_exit "ERROR: Upstream is older than current package version. Please report to upstream."
elif [ "$latest_commit_date" -eq "$_COMMIT_DATE" ] && [ "$latest_commit_time" -lt "$_COMMIT_TIME" ]; then
termux_error_exit "ERROR: Upstream is older than current package version. Please report to upstream."
fi
sed -i "${TERMUX_PKG_BUILDER_DIR}/build.sh" -e "s|^_COMMIT=.*|_COMMIT=${latest_commit}|"
sed -i "${TERMUX_PKG_BUILDER_DIR}/build.sh" -e "s|^_COMMIT_DATE=.*|_COMMIT_DATE=${latest_commit_date}|"
sed -i "${TERMUX_PKG_BUILDER_DIR}/build.sh" -e "s|^_COMMIT_TIME=.*|_COMMIT_TIME=${latest_commit_time}|"
# maybe save a few ms as we already done version check
termux_pkg_upgrade_version "$latest_version" --skip-version-check
}
termux_step_post_get_source() {
git pull
git reset --hard ${_COMMIT}
git fetch --unshallow
git reset --hard $_COMMIT
}
termux_step_pre_configure() {
# lets go crazy with optimization as we only build one shared library
# current highest fps output (on my A30s):
# dont use flto to avoid linking issue
# benchmark result as follows:
# -O2 -flto > -O3 -flto > -O2 > -Os > -Os -flto > -O3 > -Oz > -Oz -flto
export CFLAGS="${CFLAGS/-Oz/-O2} -flto"
export AR="llvm-ar" # remove this after NDK 23 landed
export CFLAGS="${CFLAGS/-Oz/-O2}"
}
termux_step_post_make_install() {