mirror of
https://github.com/termux/termux-packages.git
synced 2025-05-10 09:15:32 +00:00
- migrate to `libprotobuf` - depend on new `libandroid-stub`: https://github.com/termux/termux-packages/pull/23712
116 lines
3.5 KiB
Bash
116 lines
3.5 KiB
Bash
TERMUX_PKG_HOMEPAGE=https://github.com/Tencent/ncnn
|
|
TERMUX_PKG_DESCRIPTION="A high-performance neural network inference framework optimized for the mobile platform"
|
|
TERMUX_PKG_LICENSE="BSD 3-Clause"
|
|
TERMUX_PKG_MAINTAINER="@termux"
|
|
TERMUX_PKG_VERSION="20241226"
|
|
TERMUX_PKG_SRCURL=https://github.com/Tencent/ncnn/releases/download/${TERMUX_PKG_VERSION}/ncnn-${TERMUX_PKG_VERSION}-full-source.zip
|
|
TERMUX_PKG_SHA256=b2145f7b01422f5ee66777d1c2c29de935191ed39865193951e1a7228202a6c1
|
|
TERMUX_PKG_AUTO_UPDATE=false
|
|
TERMUX_PKG_DEPENDS="abseil-cpp, glslang, libc++, libandroid-stub, libprotobuf, vulkan-loader"
|
|
TERMUX_PKG_BUILD_DEPENDS="python, vulkan-headers, vulkan-loader-android"
|
|
TERMUX_PKG_PYTHON_COMMON_DEPS="wheel, pybind11"
|
|
TERMUX_PKG_BUILD_IN_SRC=true
|
|
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
|
|
-DNCNN_AVX=OFF
|
|
-DNCNN_BUILD_BENCHMARK=OFF
|
|
-DNCNN_BUILD_EXAMPLES=OFF
|
|
-DNCNN_BUILD_TESTS=OFF
|
|
-DNCNN_BUILD_TOOLS=OFF
|
|
-DNCNN_DISABLE_EXCEPTION=OFF
|
|
-DNCNN_DISABLE_RTTI=OFF
|
|
-DNCNN_ENABLE_LTO=ON
|
|
-DNCNN_OPENMP=ON
|
|
-DNCNN_PYTHON=ON
|
|
-DNCNN_SHARED_LIB=OFF
|
|
-DNCNN_SIMPLEOCV=ON
|
|
-DNCNN_SIMPLEOMP=ON
|
|
-DNCNN_SIMPLESTL=OFF
|
|
-DNCNN_SYSTEM_GLSLANG=ON
|
|
-DNCNN_VULKAN=ON
|
|
-DVulkan_LIBRARY=${TERMUX_PREFIX}/lib/libvulkan.so
|
|
-DVulkan_INCLUDE_DIRS=${TERMUX_PREFIX}/include
|
|
"
|
|
|
|
# The original "termux_extract_src_archive" always strips the first components
|
|
# but the source of libncnn is directly under the root directory of the zip file
|
|
termux_extract_src_archive() {
|
|
local file="$TERMUX_PKG_CACHEDIR/$(basename "$TERMUX_PKG_SRCURL")"
|
|
mkdir -p "$TERMUX_PKG_SRCDIR"
|
|
unzip -q "$file" -d "$TERMUX_PKG_SRCDIR"
|
|
}
|
|
|
|
termux_step_pre_configure() {
|
|
termux_setup_cmake
|
|
termux_setup_ninja
|
|
termux_setup_protobuf
|
|
|
|
CXXFLAGS+=" -std=c++17"
|
|
LDFLAGS+=" -fopenmp -static-openmp"
|
|
LDFLAGS+=" $("${TERMUX_SCRIPTDIR}/packages/libprotobuf/interface_link_libraries.sh")"
|
|
LDFLAGS+=" -lutf8_range -lutf8_validity"
|
|
LDFLAGS+=" -landroid -ljnigraphics -llog"
|
|
}
|
|
|
|
termux_step_post_make_install() {
|
|
# the build system can only build static or shared
|
|
# at a given time
|
|
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+="
|
|
-DNCNN_BUILD_TOOLS=ON
|
|
-DNCNN_SHARED_LIB=ON
|
|
"
|
|
termux_step_configure
|
|
termux_step_make
|
|
termux_step_make_install
|
|
|
|
pushd python
|
|
pip install --no-deps . --prefix "${TERMUX_PREFIX}"
|
|
popd
|
|
|
|
return
|
|
|
|
# below are testing tools that should not be packaged
|
|
# as they can be >100MB
|
|
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+="
|
|
-DNCNN_BUILD_BENCHMARK=ON
|
|
-DNCNN_BUILD_EXAMPLES=ON
|
|
-DNCNN_BUILD_TESTS=ON
|
|
-DNCNN_SHARED_LIB=OFF
|
|
"
|
|
termux_step_configure
|
|
termux_step_make
|
|
|
|
local tools_dir="${TERMUX_PREFIX}/lib/ncnn"
|
|
|
|
local benchmarks=$(find benchmark -mindepth 1 -maxdepth 1 -type f | sort)
|
|
for benchmark in ${benchmarks}; do
|
|
case "$(basename "${benchmark}")" in
|
|
*[Cc][Mm]ake*) continue ;;
|
|
*.cpp*) continue ;;
|
|
*.md) continue ;;
|
|
*.*) install -v -Dm644 "${benchmark}" -t "${tools_dir}/benchmark" ;;
|
|
*) install -v -Dm755 "${benchmark}" -t "${tools_dir}/benchmark" ;;
|
|
esac
|
|
done
|
|
|
|
local examples=$(find examples -mindepth 1 -maxdepth 1 -type f | sort)
|
|
for example in ${examples}; do
|
|
case "$(basename "${example}")" in
|
|
*[Cc][Mm]ake*) continue ;;
|
|
*.cpp*) continue ;;
|
|
*.*) install -v -Dm644 "${example}" -t "${tools_dir}/examples" ;;
|
|
*) install -v -Dm755 "${example}" -t "${tools_dir}/examples" ;;
|
|
esac
|
|
done
|
|
|
|
local tests=$(find tests -mindepth 1 -maxdepth 1 -type f | sort)
|
|
for test in ${tests}; do
|
|
case "$(basename "${test}")" in
|
|
*[Cc][Mm]ake*) continue ;;
|
|
*.cpp*) continue ;;
|
|
*.h) continue ;;
|
|
*.py) continue ;;
|
|
*) install -v -Dm755 "${test}" -t "${tools_dir}/tests" ;;
|
|
esac
|
|
done
|
|
}
|