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:
parent
54925b8247
commit
efc0a1cf29
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
TERMUX_SUBPKG_DESCRIPTION="Rust source code files"
|
||||
TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_SUBPKG_INCLUDE="
|
||||
lib/rustlib/src
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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
|
||||
"
|
|
@ -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}"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
TERMUX_SUBPKG_DESCRIPTION="Rust compiler source code files"
|
||||
TERMUX_SUBPKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_SUBPKG_INCLUDE="
|
||||
lib/rustlib/rustc-src
|
||||
"
|
|
@ -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}"
|
||||
|
|
Loading…
Reference in New Issue