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
This commit is contained in:
Jia Yuan Lo 2023-12-24 21:00:48 +08:00 committed by GitHub
parent 54925b8247
commit efc0a1cf29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 159 additions and 45 deletions

View File

@ -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() {

View File

@ -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

View File

@ -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
"

View File

@ -0,0 +1,5 @@
TERMUX_SUBPKG_DESCRIPTION="Rust source code files"
TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true
TERMUX_SUBPKG_INCLUDE="
lib/rustlib/src
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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
"

View File

@ -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}"

View File

@ -0,0 +1,5 @@
TERMUX_SUBPKG_DESCRIPTION="Rust compiler source code files"
TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true
TERMUX_SUBPKG_INCLUDE="
lib/rustlib/rustc-src
"

View File

@ -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}"