From efc0a1cf291d6aa93ae4f07f42645df303ef932e Mon Sep 17 00:00:00 2001 From: Jia Yuan Lo Date: Sun, 24 Dec 2023 21:00:48 +0800 Subject: [PATCH] enhance(main/rust): refactor package (#18735) * add rust-demangler * drop deprecated rls * drop unnecessary x86_64-unknown-linux-gnu stage 1 build * force CI only pack tar.gz instead of both tar.gz and tar.xz * further split subpackages into rust-std-* * add subpackages rust-src, rustc-src * add TERMUX_PKG_{BREAKS,REPLACES} on rust subpackages --- packages/rust/build.sh | 74 +++++++++++++------ packages/rust/config.toml | 44 +++++++++-- packages/rust/rust-docs.subpackage.sh | 4 +- packages/rust/rust-src.subpackage.sh | 5 ++ ...st-std-aarch64-linux-android.subpackage.sh | 9 +++ ...-std-armv7-linux-androideabi.subpackage.sh | 9 +++ .../rust-std-i686-linux-android.subpackage.sh | 9 +++ ...t-std-wasm32-unknown-unknown.subpackage.sh | 7 ++ .../rust/rust-std-wasm32-wasi.subpackage.sh | 7 ++ packages/rust/rust-std-wasm32.subpackage.sh | 7 -- ...ust-std-x86-64-linux-android.subpackage.sh | 9 +++ packages/rust/rustc-dev.subpackage.sh | 4 +- packages/rust/rustc-src.subpackage.sh | 5 ++ scripts/build/setup/termux_setup_rust.sh | 11 ++- 14 files changed, 159 insertions(+), 45 deletions(-) create mode 100644 packages/rust/rust-src.subpackage.sh create mode 100644 packages/rust/rust-std-aarch64-linux-android.subpackage.sh create mode 100644 packages/rust/rust-std-armv7-linux-androideabi.subpackage.sh create mode 100644 packages/rust/rust-std-i686-linux-android.subpackage.sh create mode 100644 packages/rust/rust-std-wasm32-unknown-unknown.subpackage.sh create mode 100644 packages/rust/rust-std-wasm32-wasi.subpackage.sh delete mode 100644 packages/rust/rust-std-wasm32.subpackage.sh create mode 100644 packages/rust/rust-std-x86-64-linux-android.subpackage.sh create mode 100644 packages/rust/rustc-src.subpackage.sh diff --git a/packages/rust/build.sh b/packages/rust/build.sh index 9be707ed23..37f2ace59d 100644 --- a/packages/rust/build.sh +++ b/packages/rust/build.sh @@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Systems programming language focused on safety, speed an TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION="1.74.1" +TERMUX_PKG_REVISION=1 TERMUX_PKG_SRCURL=https://static.rust-lang.org/dist/rustc-${TERMUX_PKG_VERSION}-src.tar.xz TERMUX_PKG_SHA256=b98c09d968529212fb29eec7d6d3e9bdaa869810679b7fb86a1ca69469d75f5e _LLVM_MAJOR_VERSION=$(. $TERMUX_SCRIPTDIR/packages/libllvm/build.sh; echo $LLVM_MAJOR_VERSION) @@ -21,6 +22,8 @@ termux_step_pre_configure() { termux_setup_cmake termux_setup_rust + TERMUX_PKG_RECOMMENDS="rust-std-${CARGO_TARGET_NAME/_/-}" + local p="$TERMUX_PKG_BUILDER_DIR/src-bootstrap-cc_detect.rs.diff" echo "Applying $(basename "${p}")" sed 's|@TERMUX_PKG_API_LEVEL@|'"${TERMUX_PKG_API_LEVEL}"'|g' "${p}" \ @@ -33,8 +36,9 @@ termux_step_pre_configure() { export LZMA_VERSION=$(. $TERMUX_SCRIPTDIR/packages/liblzma/build.sh; echo $TERMUX_PKG_VERSION) # we can't use -L$PREFIX/lib since it breaks things but we need to link against libLLVM-9.so - ln -sf $PREFIX/lib/libLLVM-${LLVM_VERSION/.*/}.so $RUST_LIBDIR - ln -sf $PREFIX/lib/libLLVM-$LLVM_VERSION.so $RUST_LIBDIR + ln -fst "${RUST_LIBDIR}" \ + ${TERMUX_PREFIX}/lib/libLLVM-${LLVM_VERSION/.*/}.so \ + ${TERMUX_PREFIX}/lib/libLLVM-${LLVM_VERSION}.so # rust tries to find static library 'c++_shared' ln -sf $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++_static.a \ @@ -42,8 +46,7 @@ termux_step_pre_configure() { # https://github.com/termux/termux-packages/issues/18379 # NDK r26 multiple ld.lld: error: undefined symbol: __cxa_* - ln -fst "${RUST_LIBDIR}" \ - "${TERMUX_STANDALONE_TOOLCHAIN}/sysroot/usr/lib/${TERMUX_HOST_PLATFORM}/libc++_shared.so" + ln -fst "${RUST_LIBDIR}" "${TERMUX_PREFIX}"/lib/libc++_shared.so # https://github.com/termux/termux-packages/issues/11640 # https://github.com/termux/termux-packages/issues/11658 @@ -69,9 +72,6 @@ termux_step_pre_configure() { } termux_step_configure() { - termux_setup_cmake - termux_setup_rust - # it breaks building rust tools without doing this because it tries to find # ../lib from bin location: # this is about to get ugly but i have to make sure a rustc in a proper bin lib @@ -89,7 +89,7 @@ termux_step_configure() { sed \ -e "s|@TERMUX_PREFIX@|${TERMUX_PREFIX}|g" \ -e "s|@TERMUX_STANDALONE_TOOLCHAIN@|${TERMUX_STANDALONE_TOOLCHAIN}|g" \ - -e "s|@triple@|${CARGO_TARGET_NAME}|g" \ + -e "s|@CARGO_TARGET_NAME@|${CARGO_TARGET_NAME}|g" \ -e "s|@RUSTC@|${RUSTC}|g" \ -e "s|@CARGO@|${CARGO}|g" \ "${TERMUX_PKG_BUILDER_DIR}"/config.toml > config.toml @@ -126,22 +126,20 @@ termux_step_make_install() { # remove version suffix: beta, nightly local TERMUX_PKG_VERSION=${TERMUX_PKG_VERSION//~*} - if [ $TERMUX_ARCH = "x86_64" ]; then - mv $TERMUX_PREFIX ${TERMUX_PREFIX}a - $TERMUX_PKG_SRCDIR/x.py build --host x86_64-unknown-linux-gnu --stage 1 cargo - $TERMUX_PKG_SRCDIR/x.py build --host x86_64-unknown-linux-gnu --stage 1 rls - $TERMUX_PKG_SRCDIR/x.py build --host x86_64-unknown-linux-gnu --stage 1 rustfmt - $TERMUX_PKG_SRCDIR/x.py build --host x86_64-unknown-linux-gnu --stage 1 rustdoc - $TERMUX_PKG_SRCDIR/x.py build --host x86_64-unknown-linux-gnu --stage 1 error_index_generator - mv ${TERMUX_PREFIX}a ${TERMUX_PREFIX} - fi - - $TERMUX_PKG_SRCDIR/x.py install --stage 1 --host $CARGO_TARGET_NAME --target $CARGO_TARGET_NAME + $TERMUX_PKG_SRCDIR/x.py install --stage 1 --target aarch64-linux-android + $TERMUX_PKG_SRCDIR/x.py install --stage 1 --target armv7-linux-androideabi + $TERMUX_PKG_SRCDIR/x.py install --stage 1 --target i686-linux-android + $TERMUX_PKG_SRCDIR/x.py install --stage 1 --target x86_64-linux-android $TERMUX_PKG_SRCDIR/x.py install --stage 1 std --target wasm32-unknown-unknown $TERMUX_PKG_SRCDIR/x.py install --stage 1 std --target wasm32-wasi - $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target $CARGO_TARGET_NAME + + $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target aarch64-linux-android + $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target armv7-linux-androideabi + $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target i686-linux-android + $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target x86_64-linux-android $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target wasm32-unknown-unknown $TERMUX_PKG_SRCDIR/x.py dist rustc-dev --host $CARGO_TARGET_NAME --target wasm32-wasi + tar xvf build/dist/rustc-dev-$TERMUX_PKG_VERSION-$CARGO_TARGET_NAME.tar.gz ./rustc-dev-$TERMUX_PKG_VERSION-$CARGO_TARGET_NAME/install.sh --prefix=$TERMUX_PREFIX @@ -153,8 +151,8 @@ termux_step_make_install() { mv $TERMUX_PREFIX/lib/liblzma.so.tmp $TERMUX_PREFIX/lib/liblzma.so.$LZMA_VERSION mv "${TERMUX_PREFIX}"/lib/liblzma.a{.tmp,} || : - ln -sf rustlib/$CARGO_TARGET_NAME/lib/*.so . - ln -sf $TERMUX_PREFIX/bin/lld $TERMUX_PREFIX/bin/rust-lld + ln -fs rustlib/${CARGO_TARGET_NAME}/lib/*.so . + ln -fs lld ${TERMUX_PREFIX}/bin/rust-lld cd "$TERMUX_PREFIX/lib/rustlib" rm -rf components \ @@ -163,6 +161,38 @@ termux_step_make_install() { rust-installer-version \ manifest-* \ x86_64-unknown-linux-gnu + + cd "${TERMUX_PREFIX}/lib/rustlib/${CARGO_TARGET_NAME}/lib" + echo "INFO: ${TERMUX_PKG_BUILDDIR}/rustlib-rlib.txt" + ls *.rlib | tee "${TERMUX_PKG_BUILDDIR}/rustlib-rlib.txt" + + echo "INFO: ${TERMUX_PKG_BUILDDIR}/rustlib-so.txt" + ls *.so | tee "${TERMUX_PKG_BUILDDIR}/rustlib-so.txt" + + echo "INFO: ${TERMUX_PKG_BUILDDIR}/rustc-dev-${TERMUX_PKG_VERSION}-${CARGO_TARGET_NAME}/rustc-dev/manifest.in" + cat "${TERMUX_PKG_BUILDDIR}/rustc-dev-${TERMUX_PKG_VERSION}-${CARGO_TARGET_NAME}/rustc-dev/manifest.in" | tee "${TERMUX_PKG_BUILDDIR}/manifest.in" + + sed -e 's/^.....//' -i "${TERMUX_PKG_BUILDDIR}/manifest.in" + local _included=$(cat "${TERMUX_PKG_BUILDDIR}/manifest.in") + local _included_rlib=$(echo "${_included}" | grep '\.rlib$') + local _included_so=$(echo "${_included}" | grep '\.so$') + local _included=$(echo "${_included}" | grep -v "/rustc-src/") + local _included=$(echo "${_included}" | grep -v '\.rlib$') + local _included=$(echo "${_included}" | grep -v '\.so$') + + echo _rlib + while IFS= read -r _rlib; do + echo "${_rlib}" + local _included_rlib=$(echo "${_included_rlib}" | grep -v "${_rlib}") + done < "${TERMUX_PKG_BUILDDIR}/rustlib-rlib.txt" + echo _so + while IFS= read -r _so; do + echo "${_so}" + local _included_so=$(echo "${_included_so}" | grep -v "${_so}") + done < "${TERMUX_PKG_BUILDDIR}/rustlib-so.txt" + + export _INCLUDED=$(echo -e "${_included}\n${_included_rlib}\n${_included_so}") + echo -e "INFO: _INCLUDED:\n${_INCLUDED}" } termux_step_post_massage() { diff --git a/packages/rust/config.toml b/packages/rust/config.toml index e6f22c8418..3d977ba97e 100644 --- a/packages/rust/config.toml +++ b/packages/rust/config.toml @@ -5,18 +5,31 @@ link-shared = true [build] -host = ["@triple@"] -target = ["@triple@", "wasm32-unknown-unknown", "wasm32-wasi"] +host = ["@CARGO_TARGET_NAME@"] +target = [ + "aarch64-linux-android", + "armv7-linux-androideabi", + "i686-linux-android", + "x86_64-linux-android", + "wasm32-unknown-unknown", + "wasm32-wasi", +] rustc = "@RUSTC@" cargo = "@CARGO@" - python = "python3" extended = true +tools = [ + "cargo", + "clippy", + "rustdoc", + "rustfmt", + "rust-analyzer-proc-macro-srv", + "analysis", + "src", + "rust-demangler", +] sanitizers = false -#tools = ["cargo", "analysis", "clippy-driver" ] -tools = ["cargo", "rls", "clippy", "rustfmt", "analysis", "src", "rustdoc", "rust-analyzer-proc-macro-srv"] - [install] prefix = "@TERMUX_PREFIX@" sysconfdir = "etc" @@ -32,10 +45,24 @@ rpath = false [target.x86_64-unknown-linux-gnu] llvm-config = "/usr/bin/llvm-config-15" -[target.@triple@] +[target.aarch64-linux-android] +android-ndk = "@TERMUX_STANDALONE_TOOLCHAIN@" +llvm-config = "@TERMUX_PREFIX@/bin/llvm-config" +profiler = true + +[target.armv7-linux-androideabi] +android-ndk = "@TERMUX_STANDALONE_TOOLCHAIN@" +llvm-config = "@TERMUX_PREFIX@/bin/llvm-config" +profiler = true + +[target.i686-linux-android] +android-ndk = "@TERMUX_STANDALONE_TOOLCHAIN@" +llvm-config = "@TERMUX_PREFIX@/bin/llvm-config" +profiler = true + +[target.x86_64-linux-android] android-ndk = "@TERMUX_STANDALONE_TOOLCHAIN@" llvm-config = "@TERMUX_PREFIX@/bin/llvm-config" -ar = "llvm-ar" profiler = true [target.wasm32-wasi] @@ -43,4 +70,5 @@ wasi-root = "@TERMUX_PREFIX@/share/wasi-sysroot" [dist] src-tarball = false +compression-formats = ["gz"] #missing-tools = true diff --git a/packages/rust/rust-docs.subpackage.sh b/packages/rust/rust-docs.subpackage.sh index aeb8361b99..e95ac4deb7 100644 --- a/packages/rust/rust-docs.subpackage.sh +++ b/packages/rust/rust-docs.subpackage.sh @@ -1,3 +1,5 @@ TERMUX_SUBPKG_DESCRIPTION="Rust documentation" TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true -TERMUX_SUBPKG_INCLUDE="share/doc/rust/html" +TERMUX_SUBPKG_INCLUDE=" +share/doc/rust/html +" diff --git a/packages/rust/rust-src.subpackage.sh b/packages/rust/rust-src.subpackage.sh new file mode 100644 index 0000000000..5427cbe940 --- /dev/null +++ b/packages/rust/rust-src.subpackage.sh @@ -0,0 +1,5 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust source code files" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/src +" diff --git a/packages/rust/rust-std-aarch64-linux-android.subpackage.sh b/packages/rust/rust-std-aarch64-linux-android.subpackage.sh new file mode 100644 index 0000000000..030b80fa4c --- /dev/null +++ b/packages/rust/rust-std-aarch64-linux-android.subpackage.sh @@ -0,0 +1,9 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target aarch64-linux-android" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/aarch64-linux-android/lib/*.rlib +lib/rustlib/aarch64-linux-android/lib/libstd-*.so +lib/rustlib/aarch64-linux-android/lib/libtest-*.so +" diff --git a/packages/rust/rust-std-armv7-linux-androideabi.subpackage.sh b/packages/rust/rust-std-armv7-linux-androideabi.subpackage.sh new file mode 100644 index 0000000000..3c0c88dec9 --- /dev/null +++ b/packages/rust/rust-std-armv7-linux-androideabi.subpackage.sh @@ -0,0 +1,9 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target armv7-linux-androideabi" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/armv7-linux-androideabi/lib/*.rlib +lib/rustlib/armv7-linux-androideabi/lib/libstd-*.so +lib/rustlib/armv7-linux-androideabi/lib/libtest-*.so +" diff --git a/packages/rust/rust-std-i686-linux-android.subpackage.sh b/packages/rust/rust-std-i686-linux-android.subpackage.sh new file mode 100644 index 0000000000..d83af7e272 --- /dev/null +++ b/packages/rust/rust-std-i686-linux-android.subpackage.sh @@ -0,0 +1,9 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target i686-linux-android" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/i686-linux-android/lib/*.rlib +lib/rustlib/i686-linux-android/lib/libstd-*.so +lib/rustlib/i686-linux-android/lib/libtest-*.so +" diff --git a/packages/rust/rust-std-wasm32-unknown-unknown.subpackage.sh b/packages/rust/rust-std-wasm32-unknown-unknown.subpackage.sh new file mode 100644 index 0000000000..410a0232a8 --- /dev/null +++ b/packages/rust/rust-std-wasm32-unknown-unknown.subpackage.sh @@ -0,0 +1,7 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target wasm32-unknown-unknown" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/wasm32-unknown-unknown +" diff --git a/packages/rust/rust-std-wasm32-wasi.subpackage.sh b/packages/rust/rust-std-wasm32-wasi.subpackage.sh new file mode 100644 index 0000000000..8a05594ffc --- /dev/null +++ b/packages/rust/rust-std-wasm32-wasi.subpackage.sh @@ -0,0 +1,7 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target wasm32-wasi" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/wasm32-wasi +" diff --git a/packages/rust/rust-std-wasm32.subpackage.sh b/packages/rust/rust-std-wasm32.subpackage.sh deleted file mode 100644 index 49423b212f..0000000000 --- a/packages/rust/rust-std-wasm32.subpackage.sh +++ /dev/null @@ -1,7 +0,0 @@ -TERMUX_SUBPKG_DESCRIPTION="Rust std for target wasm32" -TERMUX_SUBPKG_DEPENDS="wasi-libc" -TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true -TERMUX_SUBPKG_INCLUDE=" -lib/rustlib/wasm32-unknown-unknown -lib/rustlib/wasm32-wasi -" diff --git a/packages/rust/rust-std-x86-64-linux-android.subpackage.sh b/packages/rust/rust-std-x86-64-linux-android.subpackage.sh new file mode 100644 index 0000000000..f081b09bbf --- /dev/null +++ b/packages/rust/rust-std-x86-64-linux-android.subpackage.sh @@ -0,0 +1,9 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust std for target x86_64-linux-android" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_BREAKS="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_REPLACES="rust (<< 1.74.1-1)" +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/x86_64-linux-android/lib/*.rlib +lib/rustlib/x86_64-linux-android/lib/libstd-*.so +lib/rustlib/x86_64-linux-android/lib/libtest-*.so +" diff --git a/packages/rust/rustc-dev.subpackage.sh b/packages/rust/rustc-dev.subpackage.sh index 1807a18fdf..fe300948f8 100644 --- a/packages/rust/rustc-dev.subpackage.sh +++ b/packages/rust/rustc-dev.subpackage.sh @@ -1,4 +1,2 @@ -TERMUX_SUBPKG_DESCRIPTION="Rust development compiler libs" -_VERSION=${TERMUX_PKG_VERSION//~*} -_INCLUDED=$(sed 's/^.....//' "${TERMUX_PKG_BUILDDIR}/rustc-dev-${_VERSION}-${CARGO_TARGET_NAME}/rustc-dev/manifest.in" | grep -v '\.so$') +TERMUX_SUBPKG_DESCRIPTION="Rust compiler development libs" TERMUX_SUBPKG_INCLUDE="${_INCLUDED}" diff --git a/packages/rust/rustc-src.subpackage.sh b/packages/rust/rustc-src.subpackage.sh new file mode 100644 index 0000000000..57323a0a0f --- /dev/null +++ b/packages/rust/rustc-src.subpackage.sh @@ -0,0 +1,5 @@ +TERMUX_SUBPKG_DESCRIPTION="Rust compiler source code files" +TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true +TERMUX_SUBPKG_INCLUDE=" +lib/rustlib/rustc-src +" diff --git a/scripts/build/setup/termux_setup_rust.sh b/scripts/build/setup/termux_setup_rust.sh index c4f32f6a03..695ebfd835 100644 --- a/scripts/build/setup/termux_setup_rust.sh +++ b/scripts/build/setup/termux_setup_rust.sh @@ -37,9 +37,12 @@ termux_setup_rust() { local ENV_NAME=CARGO_TARGET_${CARGO_TARGET_NAME^^}_LINKER ENV_NAME=${ENV_NAME//-/_} export $ENV_NAME="${CC}" - export TARGET_CFLAGS="${CFLAGS-} ${CPPFLAGS}" - # This was getting applied for the host build of Rust macros or whatever, so - # unset it. + # TARGET_CFLAGS and CFLAGS incorrectly applied globally + # for host build and other targets so set them individually + export CFLAGS_aarch64_linux_android="${CPPFLAGS}" + export CFLAGS_armv7_linux_androideabi="${CPPFLAGS}" + export CFLAGS_i686_linux_android="${CPPFLAGS}" + export CFLAGS_x86_64_linux_android="${CPPFLAGS}" unset CFLAGS if [[ -z "${TERMUX_RUST_VERSION-}" ]]; then @@ -49,7 +52,7 @@ termux_setup_rust() { TERMUX_RUST_VERSION="beta" fi - curl https://sh.rustup.rs -sSf > "${TERMUX_PKG_TMPDIR}"/rustup.sh + curl https://sh.rustup.rs -sSfo "${TERMUX_PKG_TMPDIR}"/rustup.sh sh "${TERMUX_PKG_TMPDIR}"/rustup.sh -y --default-toolchain "${TERMUX_RUST_VERSION}" export PATH="${HOME}/.cargo/bin:${PATH}"