diff --git a/packages/rust/build.sh b/packages/rust/build.sh index a2617fc8af..de7694d2ad 100644 --- a/packages/rust/build.sh +++ b/packages/rust/build.sh @@ -2,14 +2,17 @@ TERMUX_PKG_HOMEPAGE=https://www.rust-lang.org/ TERMUX_PKG_DESCRIPTION="Systems programming language focused on safety, speed and concurrency" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" -TERMUX_PKG_VERSION=1.72.1 -TERMUX_PKG_REVISION=1 -TERMUX_PKG_SRCURL=https://static.rust-lang.org/dist/rustc-$TERMUX_PKG_VERSION-src.tar.xz -TERMUX_PKG_SHA256=aea58d962ff1c19521b9f587aad88285f0fd35b6b6738b031a7a15bb1b70a7c3 +TERMUX_PKG_VERSION=1.73.0 +TERMUX_PKG_SRCURL=https://static.rust-lang.org/dist/rustc-${TERMUX_PKG_VERSION}-src.tar.xz +TERMUX_PKG_SHA256=6eaf672dbea2e6596af8c999f5e6924b9af4bb8b02166bfe0b928e68aa75ae62 _LLVM_MAJOR_VERSION=$(. $TERMUX_SCRIPTDIR/packages/libllvm/build.sh; echo $LLVM_MAJOR_VERSION) _LLVM_MAJOR_VERSION_NEXT=$((_LLVM_MAJOR_VERSION + 1)) -TERMUX_PKG_DEPENDS="libc++, clang, openssl, lld, zlib, libllvm (<< $_LLVM_MAJOR_VERSION_NEXT)" -TERMUX_PKG_RM_AFTER_INSTALL="bin/llvm-* bin/llc bin/opt" +TERMUX_PKG_DEPENDS="clang, libc++, libllvm (<< ${_LLVM_MAJOR_VERSION_NEXT}), lld, openssl, zlib" +TERMUX_PKG_RM_AFTER_INSTALL=" +bin/llc +bin/llvm-* +bin/opt +" termux_step_pre_configure() { termux_setup_cmake @@ -54,7 +57,7 @@ termux_step_pre_configure() { # https://github.com/termux/termux-packages/issues/11427 # Fresh build conflict: liblzma -> rust # ld: error: /data/data/com.termux/files/usr/lib/liblzma.a(liblzma_la-common.o) is incompatible with elf64-x86-64 - mv $TERMUX_PREFIX/lib/liblzma.a $TERMUX_PREFIX/lib/liblzma.a.tmp || true + mv "${TERMUX_PREFIX}"/lib/liblzma.a{,.tmp} || : # ld: error: undefined symbol: getloadavg # >>> referenced by rand.c @@ -78,20 +81,20 @@ termux_step_configure() { # like 30 to 40 + minutes ... so lets get it right # upstream only tests build ver one version behind $TERMUX_PKG_VERSION - local BOOTSTRAP_VERSION=1.71.1 + local BOOTSTRAP_VERSION=1.72.1 rustup install $BOOTSTRAP_VERSION rustup default $BOOTSTRAP_VERSION-x86_64-unknown-linux-gnu export PATH=$HOME/.rustup/toolchains/$BOOTSTRAP_VERSION-x86_64-unknown-linux-gnu/bin:$PATH local RUSTC=$(command -v rustc) local CARGO=$(command -v cargo) - sed "s%\\@TERMUX_PREFIX\\@%$TERMUX_PREFIX%g" \ - $TERMUX_PKG_BUILDER_DIR/config.toml \ - | sed "s%\\@TERMUX_STANDALONE_TOOLCHAIN\\@%$TERMUX_STANDALONE_TOOLCHAIN%g" \ - | sed "s%\\@triple\\@%$CARGO_TARGET_NAME%g" \ - | sed "s%\\@RUSTC\\@%$RUSTC%g" \ - | sed "s%\\@CARGO\\@%$CARGO%g" \ - > config.toml + 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|@RUSTC@|${RUSTC}|g" \ + -e "s|@CARGO@|${CARGO}|g" \ + "${TERMUX_PKG_BUILDER_DIR}"/config.toml > config.toml local env_host=$(printf $CARGO_TARGET_NAME | tr a-z A-Z | sed s/-/_/g) export ${env_host}_OPENSSL_DIR=$TERMUX_PREFIX @@ -117,6 +120,9 @@ termux_step_make() { termux_step_make_install() { unset CC CXX CPP LD CFLAGS CXXFLAGS CPPFLAGS LDFLAGS PKG_CONFIG RANLIB + # 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 @@ -140,7 +146,7 @@ termux_step_make_install() { mv $TERMUX_PREFIX/lib/libz.so.1.tmp $TERMUX_PREFIX/lib/libz.so.1 mv $TERMUX_PREFIX/lib/libz.so.tmp $TERMUX_PREFIX/lib/libz.so mv $TERMUX_PREFIX/lib/liblzma.so.tmp $TERMUX_PREFIX/lib/liblzma.so.$LZMA_VERSION - mv $TERMUX_PREFIX/lib/liblzma.a.tmp $TERMUX_PREFIX/lib/liblzma.a || true + 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 diff --git a/packages/rust/config.toml b/packages/rust/config.toml index 3a2b4775a8..1d0fa7c68c 100644 --- a/packages/rust/config.toml +++ b/packages/rust/config.toml @@ -1,5 +1,5 @@ # See documentation at -# https://github.com/rust-lang/rust/blob/master/config.toml.example +# https://github.com/rust-lang/rust/blob/master/config.example.toml [llvm] link-shared = true @@ -10,7 +10,7 @@ target = ["@triple@", "wasm32-unknown-unknown"] rustc = "@RUSTC@" cargo = "@CARGO@" -python = "python2.7" +python = "python3" extended = true sanitizers = false @@ -30,7 +30,7 @@ channel = "stable" rpath = false [target.x86_64-unknown-linux-gnu] -llvm-config = "/usr/bin/llvm-config-14" +llvm-config = "/usr/bin/llvm-config-15" [target.@triple@] android-ndk = "@TERMUX_STANDALONE_TOOLCHAIN@" diff --git a/packages/rust/rustc-dev.subpackage.sh b/packages/rust/rustc-dev.subpackage.sh index 83f5a39d79..1807a18fdf 100644 --- a/packages/rust/rustc-dev.subpackage.sh +++ b/packages/rust/rustc-dev.subpackage.sh @@ -1,3 +1,4 @@ -TERMUX_SUBPKG_DESCRIPTION="developer compiler libs" -INCLUDED=$(sed 's/^.....//' $TERMUX_PKG_BUILDDIR/rustc-dev-$TERMUX_PKG_VERSION-$CARGO_TARGET_NAME/rustc-dev/manifest.in | grep -v '\.so$' ) -TERMUX_SUBPKG_INCLUDE="$INCLUDED" +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_INCLUDE="${_INCLUDED}" diff --git a/scripts/build/setup/termux_setup_rust.sh b/scripts/build/setup/termux_setup_rust.sh index 28e2e737c0..c4f32f6a03 100644 --- a/scripts/build/setup/termux_setup_rust.sh +++ b/scripts/build/setup/termux_setup_rust.sh @@ -1,46 +1,58 @@ +# shellcheck shell=bash disable=SC1091 disable=SC2086 disable=SC2155 termux_setup_rust() { - if [ $TERMUX_ARCH = "arm" ]; then - CARGO_TARGET_NAME=armv7-linux-androideabi - else - CARGO_TARGET_NAME=$TERMUX_ARCH-linux-android + export CARGO_TARGET_NAME="${TERMUX_ARCH}-linux-android" + if [[ "${TERMUX_ARCH}" == "arm" ]]; then + CARGO_TARGET_NAME="armv7-linux-androideabi" fi - if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then - if [[ "$TERMUX_APP_PACKAGE_MANAGER" = "apt" && "$(dpkg-query -W -f '${db:Status-Status}\n' rust 2>/dev/null)" != "installed" ]] || - [[ "$TERMUX_APP_PACKAGE_MANAGER" = "pacman" && ! "$(pacman -Q rust 2>/dev/null)" ]]; then - echo "Package 'rust' is not installed." - echo "You can install it with" - echo - echo " pkg install rust" - echo - echo " pacman -S rust" - echo - echo "or build it from source with" - echo - echo " ./build-package.sh rust" - echo - echo "Note that package 'rust' is known to be problematic for building on device." + if [[ "${TERMUX_ON_DEVICE_BUILD}" == "true" ]]; then + if [[ -z "$(command -v rustc)" ]]; then + cat <<- EOL + Package 'rust' is not installed. + You can install it with + + pkg install rust + + pacman -S rust + + or build it from source with + + ./build-package.sh rust + + Note that package 'rust' is known to be problematic for building on device. + EOL exit 1 fi + local RUSTC_VERSION=$(rustc --version | awk '{ print $2 }') + if [[ -n "${TERMUX_RUST_VERSION-}" && "${TERMUX_RUST_VERSION-}" != "${RUSTC_VERSION}" ]]; then + cat <<- EOL >&2 + WARN: On device build with old rust version is not possible! + TERMUX_RUST_VERSION = ${TERMUX_RUST_VERSION} + RUSTC_VERSION = ${RUSTC_VERSION} + EOL + fi return fi local ENV_NAME=CARGO_TARGET_${CARGO_TARGET_NAME^^}_LINKER ENV_NAME=${ENV_NAME//-/_} - export $ENV_NAME=$CC - export TARGET_CFLAGS="${CFLAGS-} $CPPFLAGS" + 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. unset CFLAGS - curl https://sh.rustup.rs -sSf > $TERMUX_PKG_TMPDIR/rustup.sh - - if [ -z "${TERMUX_RUST_VERSION-}" ]; then - TERMUX_RUST_VERSION=$(bash -c ". $TERMUX_SCRIPTDIR/packages/rust/build.sh; echo \$TERMUX_PKG_VERSION") + if [[ -z "${TERMUX_RUST_VERSION-}" ]]; then + TERMUX_RUST_VERSION=$(. "${TERMUX_SCRIPTDIR}"/packages/rust/build.sh; echo ${TERMUX_PKG_VERSION}) + fi + if [[ "${TERMUX_RUST_VERSION}" == *"~beta"* ]]; then + TERMUX_RUST_VERSION="beta" fi - sh $TERMUX_PKG_TMPDIR/rustup.sh -y --default-toolchain $TERMUX_RUST_VERSION - export PATH=$HOME/.cargo/bin:$PATH + curl https://sh.rustup.rs -sSf > "${TERMUX_PKG_TMPDIR}"/rustup.sh + sh "${TERMUX_PKG_TMPDIR}"/rustup.sh -y --default-toolchain "${TERMUX_RUST_VERSION}" - rustup target add $CARGO_TARGET_NAME + export PATH="${HOME}/.cargo/bin:${PATH}" + + rustup target add "${CARGO_TARGET_NAME}" } diff --git a/scripts/setup-ubuntu.sh b/scripts/setup-ubuntu.sh index 8361c13fe3..6708636a13 100755 --- a/scripts/setup-ubuntu.sh +++ b/scripts/setup-ubuntu.sh @@ -148,9 +148,9 @@ PACKAGES+=" composer" # Needed by package rust. PACKAGES+=" libssl-dev" # Needed to build Rust -PACKAGES+=" llvm-14-dev" -PACKAGES+=" llvm-14-tools" -PACKAGES+=" clang-14" +PACKAGES+=" llvm-15-dev" +PACKAGES+=" llvm-15-tools" +PACKAGES+=" clang-15" # Needed for package smalltalk. PACKAGES+=" libsigsegv-dev"