mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-24 03:35:38 +03:00
417 lines
14 KiB
Text
417 lines
14 KiB
Text
# Contributor: Rasmus Thomsen <oss@cogitri.dev>
|
|
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
|
|
# Contributor: Shiz <hi@shiz.me>
|
|
# Contributor: Jeizsm <jeizsm@gmail.com>
|
|
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
|
|
# Maintainer: psykose <alice@ayaya.dev>
|
|
pkgname=rust
|
|
pkgver=1.67.1
|
|
_llvmver=15
|
|
_bootver=1.66.0
|
|
pkgrel=0
|
|
pkgdesc="The Rust Programming Language"
|
|
url="https://www.rust-lang.org/"
|
|
arch="all"
|
|
license="Apache-2.0 AND MIT"
|
|
|
|
# gcc is needed at runtime just for linking. Someday rustc might invoke
|
|
# the linker directly, and then we'll only need binutils.
|
|
# See: https://github.com/rust-lang/rust/issues/11937
|
|
depends="$pkgname-stdlib=$pkgver-r$pkgrel gcc musl-dev"
|
|
|
|
# * Rust is self-hosted, so you need rustc (and cargo) to build rustc...
|
|
# The last revision of this abuild that does not depend on itself (uses
|
|
# prebuilt rustc and cargo) is 2e6769eb39eaff3029d8298fc02856623c563cd8.
|
|
# * Don't add libgit2-dev into make dependencies. There's no compatibility
|
|
# guarantees between libgit2-sys and arbitrary system libgit2 versions;
|
|
# when system libgit2 is upgraded to a new minor version, it may break
|
|
# cargo and since we need cargo to rebuild cargo... this already happened
|
|
# several times. For this reason we build cargo with vendored libgit2.
|
|
makedepends_build="
|
|
!libgit2-dev
|
|
cargo-bootstrap=>$_bootver
|
|
coreutils
|
|
curl-dev
|
|
file
|
|
libssh2-dev
|
|
llvm$_llvmver-dev
|
|
llvm$_llvmver-test-utils
|
|
openssl-dev>3
|
|
python3
|
|
rust-bootstrap=>$_bootver
|
|
tar
|
|
wasi-libc
|
|
xz-dev
|
|
zlib-dev
|
|
"
|
|
makedepends_host="
|
|
curl-dev
|
|
libssh2-dev
|
|
llvm$_llvmver-dev
|
|
openssl-dev>3
|
|
zlib-dev
|
|
"
|
|
|
|
# XXX: This is a hack to allow this abuild to depend on itself. Adding "rust"
|
|
# to makedepends would not work, because abuild implicitly removes $pkgname
|
|
# and $subpackages from the abuild's dependencies.
|
|
provides="rust-bootstrap=$pkgver-r$pkgrel"
|
|
# This is needed for -src that contains some testing binaries.
|
|
options="!archcheck"
|
|
|
|
case "$CARCH" in
|
|
armhf|armv7|riscv64)
|
|
# +crt-static still broken here.
|
|
options="$options !check"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
|
|
subpackages="
|
|
$pkgname-dbg
|
|
$pkgname-stdlib
|
|
$pkgname-wasm
|
|
$pkgname-analysis
|
|
$pkgname-gdb::noarch
|
|
$pkgname-lldb::noarch
|
|
$pkgname-clippy
|
|
$pkgname-doc
|
|
$pkgname-src::noarch
|
|
cargo
|
|
cargo-bash-completions:_cargo_bashcomp:noarch
|
|
cargo-zsh-completion:_cargo_zshcomp:noarch
|
|
cargo-doc:_cargo_doc:noarch
|
|
rustfmt
|
|
"
|
|
source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.xz
|
|
alpine-move-py-scripts-to-share.patch
|
|
alpine-target.patch
|
|
do-not-install-libunwind-source.patch
|
|
gcc-eh-libunwind.patch
|
|
install-template-shebang.patch
|
|
musl-fix-linux_musl_base.patch
|
|
need-rpath.patch
|
|
need-ssp_nonshared.patch
|
|
no-export-ld-library-path.patch
|
|
system-wasm-ld.patch
|
|
check-rustc
|
|
"
|
|
builddir="$srcdir/rustc-$pkgver-src"
|
|
|
|
# secfixes:
|
|
# 1.66.1-r0:
|
|
# - CVE-2022-46176
|
|
# 1.56.1-r0:
|
|
# - CVE-2021-42574
|
|
# 1.52.1-r1:
|
|
# - CVE-2021-29922
|
|
# 1.51.0-r2:
|
|
# - CVE-2020-36323
|
|
# - CVE-2021-31162
|
|
# 1.34.2-r0:
|
|
# - CVE-2019-12083
|
|
# 1.26.0-r0:
|
|
# - CVE-2019-16760
|
|
|
|
# We have to add new arches in multiple steps:
|
|
# 1. Compile with the upstream triplets, compiling alpine's triplets in
|
|
# 2. Compile again, now with our triplets selected as build/target, now that
|
|
# rustc knows about them
|
|
_build="$CBUILD"
|
|
_target="$CTARGET"
|
|
|
|
_rlibdir="usr/lib/rustlib/$_target/lib"
|
|
_sharedir="usr/share/rust"
|
|
|
|
ldpath="/$_rlibdir"
|
|
|
|
export OPENSSL_NO_VENDOR=1
|
|
export RUST_BACKTRACE=1
|
|
|
|
# rust checksums files in vendor/, but we have to patch a few files...
|
|
_clear_vendor_checksums() {
|
|
sed -i 's/\("files":{\)[^}]*/\1/' vendor/$1/.cargo-checksum.json
|
|
}
|
|
|
|
build() {
|
|
if [ "$_build" != "$_target" ]; then
|
|
export PKG_CONFIG_ALLOW_CROSS=1
|
|
fi
|
|
|
|
# absolutely do not set these here, rust "knows" what it's doing
|
|
unset CARGO_PROFILE_RELEASE_LTO
|
|
unset CARGO_PROFILE_RELEASE_OPT_LEVEL
|
|
unset CARGO_PROFILE_RELEASE_PANIC
|
|
unset CARGO_PROFILE_RELEASE_CODEGEN_UNITS
|
|
|
|
export CFLAGS="$CFLAGS -O2"
|
|
export CXXFLAGS="$CXXFLAGS -O2"
|
|
|
|
# todo: try enable lto:
|
|
# --set="rust.lto=thin"
|
|
# this fails when using the stage2 compiler with:
|
|
# thread 'main' panicked at 'range start index 1 out of range for slice of length 0', compiler/rustc_driver/src/lib.rs:988:17
|
|
# on a rustc -vV invocation. the slice is
|
|
# pub fn handle_options(args: &[String]) -> Option<getopts::Matches> {
|
|
# // Throw away the first argument, the name of the binary
|
|
# let args = &args[1..];
|
|
# which should not be null with -vV?
|
|
./configure \
|
|
--build="$_build" \
|
|
--host="$_target" \
|
|
--target="$_target,wasm32-wasi,wasm32-unknown-unknown" \
|
|
--prefix="/usr" \
|
|
--release-channel="stable" \
|
|
--enable-local-rust \
|
|
--local-rust-root="/usr" \
|
|
--llvm-root="/usr/lib/llvm$_llvmver" \
|
|
--disable-docs \
|
|
--enable-extended \
|
|
--tools="analysis,cargo,clippy,src,rustfmt" \
|
|
--enable-llvm-link-shared \
|
|
--enable-option-checking \
|
|
--enable-locked-deps \
|
|
--enable-profiler \
|
|
--enable-vendor \
|
|
--dist-compression-formats=gz \
|
|
--python="python3" \
|
|
--set="rust.musl-root=/usr" \
|
|
--set="rust.codegen-units=1" \
|
|
--set="rust.codegen-units-std=1" \
|
|
--set="rust.parallel-compiler=false" \
|
|
--set="rust.description=Alpine Linux" \
|
|
--set="target.$_target.llvm-config=/usr/lib/llvm$_llvmver/bin/llvm-config" \
|
|
--set="target.$_target.musl-root=/usr" \
|
|
--set="target.$_target.crt-static=false" \
|
|
--set="target.$_target.cc=${CROSS_COMPILE}cc" \
|
|
--set="target.$_target.cxx=${CROSS_COMPILE}c++" \
|
|
--set="target.$_target.ar=${CROSS_COMPILE}ar" \
|
|
--set="target.$_target.linker=${CROSS_COMPILE}cc" \
|
|
--set="target.$_build.musl-root=/usr" \
|
|
--set="target.$_build.crt-static=false" \
|
|
--set="target.$_build.cc=cc" \
|
|
--set="target.$_build.cxx=c++" \
|
|
--set="target.$_build.ar=ar" \
|
|
--set="target.$_build.linker=cc" \
|
|
--set="target.wasm32-unknown-unknown.sanitizers=false" \
|
|
--set="target.wasm32-unknown-unknown.profiler=false" \
|
|
--set="target.wasm32-unknown-unknown.linker=lld" \
|
|
--set="target.wasm32-wasi.sanitizers=false" \
|
|
--set="target.wasm32-wasi.profiler=false" \
|
|
--set="target.wasm32-wasi.wasi-root=/usr/share/wasi-sysroot"
|
|
|
|
# Allow warnings instead of just aborting the build
|
|
sed 's/#deny-warnings = .*/deny-warnings = false/' -i config.toml
|
|
sed 's|deny(warnings,|deny(|' -i src/bootstrap/lib.rs
|
|
|
|
python3 ./x.py dist --jobs ${JOBS:-2}
|
|
}
|
|
|
|
check() {
|
|
# At this moment lib/rustlib/$CTARGET/lib does not contain a complete
|
|
# copy of the .so libs from lib (they will be copied there during
|
|
# 'x.py install'). Thus we must set LD_LIBRARY_PATH for tests to work.
|
|
# This is related to change-rpath-to-rustlib.patch.
|
|
|
|
msg "Setting up test env..."
|
|
|
|
mkdir -p "$builddir/test-rustc"
|
|
|
|
tar xf "$builddir"/build/dist/rustc-$pkgver-$_target.tar.gz \
|
|
-C "$builddir/test-rustc" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-std-$pkgver-$_target.tar.gz \
|
|
-C "$builddir/test-rustc" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
|
|
export LD_LIBRARY_PATH="$builddir/test-rustc/lib/rustlib/$CTARGET/lib"
|
|
|
|
msg "Sanity checks..."
|
|
"$srcdir"/check-rustc "$builddir"/test-rustc/bin/rustc
|
|
|
|
# XXX: There's some problem with these tests, we will figure it out later.
|
|
# make check \
|
|
# LD_LIBRARY_PATH="$_stage0dir/lib" \
|
|
# VERBOSE=1
|
|
|
|
# these rebuild the whole compiler which takes a long time
|
|
# msg "Running tests for cargo..."
|
|
# CFG_DISABLE_CROSS_TESTS=1 python3 ./x.py test --no-fail-fast src/tools/cargo
|
|
|
|
unset LD_LIBRARY_PATH
|
|
}
|
|
|
|
package() {
|
|
mkdir -p "$pkgdir/usr"
|
|
|
|
cd "$pkgdir"
|
|
|
|
tar xf "$builddir"/build/dist/rustc-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-std-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rustc-dev-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-analysis-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-src-$pkgver.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/cargo-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/clippy-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rustfmt-$pkgver-$_target.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-std-$pkgver-wasm32-unknown-unknown.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
tar xf "$builddir"/build/dist/rust-std-$pkgver-wasm32-wasi.tar.gz \
|
|
-C "$pkgdir/usr" --strip-components=2 --exclude=manifest.in --no-same-owner
|
|
|
|
# We don't want to include stuff like rust-llvm-* tools, as we will use the
|
|
# system tools.
|
|
rm -f usr/lib/rustlib/"$_target"/bin/rust-llvm-*
|
|
|
|
# Python scripts are noarch, so move them to /usr/share.
|
|
# Requires move-py-scripts-to-share.patch to be applied.
|
|
_mv usr/lib/rustlib/etc/*.py $_sharedir/etc/
|
|
rmdir -p usr/lib/rustlib/etc 2>/dev/null || true
|
|
|
|
_mv usr/etc/bash_completion.d/cargo usr/share/bash-completion/completions/
|
|
rmdir -p usr/etc/bash_completion.d 2>/dev/null || true
|
|
|
|
_mv usr/lib/rustlib/src/rust usr/src/
|
|
ln -s ../../../src/rust usr/lib/rustlib/src/rust
|
|
|
|
# Remove some clutter.
|
|
cd "$pkgdir"/usr/lib/rustlib
|
|
rm -f components install.log manifest-* rust-installer-version uninstall.sh
|
|
if [ "$_build" != "$_target" ]; then
|
|
rm -rf "$pkgdir"/usr/lib/rustlib/$_build
|
|
fi
|
|
|
|
# for some reason the tar archive gets some root-only files for rlibs
|
|
find "$pkgdir"/usr/lib/rustlib -type f -perm -600 -exec chmod 644 {} \;
|
|
find "$pkgdir"/usr/lib/rustlib -type f -perm -700 -exec chmod 755 {} \;
|
|
}
|
|
|
|
stdlib() {
|
|
pkgdesc="Standard library for Rust (static rlibs)"
|
|
depends=
|
|
|
|
amove $_rlibdir/*.rlib
|
|
}
|
|
|
|
wasm() {
|
|
pkgdesc="WebAssembly targets for rust"
|
|
depends="rust=$pkgver-r$pkgrel lld wasi-sdk"
|
|
|
|
amove usr/lib/rustlib/wasm32-*
|
|
}
|
|
|
|
analysis() {
|
|
pkgdesc="Compiler analysis data for the Rust standard library"
|
|
depends="$pkgname-stdlib=$pkgver-r$pkgrel"
|
|
|
|
amove $_rlibdir/../analysis
|
|
}
|
|
|
|
gdb() {
|
|
pkgdesc="GDB pretty printers for Rust"
|
|
depends="$pkgname=$pkgver-r$pkgrel gdb"
|
|
|
|
amove usr/bin/rust-gdb*
|
|
amove $_sharedir/etc/gdb_*.py
|
|
}
|
|
|
|
lldb() {
|
|
pkgdesc="LLDB pretty printers for Rust"
|
|
depends="$pkgname=$pkgver-r$pkgrel lldb py3-lldb"
|
|
|
|
amove usr/bin/rust-lldb
|
|
amove $_sharedir/etc/lldb_*.py
|
|
}
|
|
|
|
clippy() {
|
|
pkgdesc="Lints to catch common mistakes and improve your Rust code"
|
|
depends="$pkgname-stdlib=$pkgver-r$pkgrel"
|
|
|
|
amove usr/bin/cargo-clippy
|
|
amove usr/bin/clippy-driver
|
|
}
|
|
|
|
src() {
|
|
pkgdesc="$pkgdesc (source code)"
|
|
depends="$pkgname=$pkgver-r$pkgrel"
|
|
license="$license OFL-1.1 GPL-3.0-or-later GPL-3.0-with-GCC-exception CC-BY-SA-3.0 LGPL-3.0"
|
|
|
|
amove usr/src
|
|
amove usr/lib/rustlib/src
|
|
}
|
|
|
|
cargo() {
|
|
pkgdesc="The Rust package manager"
|
|
license="Apache-2.0 MIT UNLICENSE"
|
|
depends="$pkgname=$pkgver-r$pkgrel"
|
|
# XXX: See comment on top-level provides=.
|
|
provides="cargo-bootstrap=$pkgver-r$pkgrel"
|
|
|
|
amove usr/bin/cargo
|
|
amove usr/libexec/cargo-credential-1password
|
|
}
|
|
|
|
rustfmt() {
|
|
pkgdesc="Rust Code Formatter"
|
|
license="Apache-2.0"
|
|
depends="cargo=$pkgver-r$pkgrel"
|
|
|
|
amove usr/bin/rustfmt
|
|
amove usr/bin/cargo-fmt
|
|
}
|
|
|
|
_cargo_bashcomp() {
|
|
pkgdesc="Bash completions for cargo"
|
|
license="Apache-2.0 MIT"
|
|
depends=""
|
|
install_if="cargo=$pkgver-r$pkgrel bash-completion"
|
|
|
|
amove usr/share/bash-completion
|
|
}
|
|
|
|
_cargo_zshcomp() {
|
|
pkgdesc="ZSH completions for cargo"
|
|
license="Apache-2.0 MIT"
|
|
depends=""
|
|
install_if="cargo=$pkgver-r$pkgrel zsh"
|
|
|
|
amove usr/share/zsh/site-functions/_cargo
|
|
}
|
|
|
|
_cargo_doc() {
|
|
pkgdesc="The Rust package manager (documentation)"
|
|
license="Apache-2.0 MIT"
|
|
install_if="docs cargo=$pkgver-r$pkgrel"
|
|
|
|
# XXX: This is hackish!
|
|
cd "$pkgdir"/../$pkgname-doc
|
|
_mv usr/share/man/man1/cargo* "$subpkgdir"/usr/share/man/man1/
|
|
}
|
|
|
|
_mv() {
|
|
local dest; for dest; do true; done # get last argument
|
|
mkdir -p "$dest"
|
|
mv "$@"
|
|
}
|
|
|
|
sha512sums="
|
|
42d77ee93b168ae139b026138fb48d925624ff436a836aa97ee235f870e61ea11643b0cf7ad20bcafda774c6cd3855a4bc10a2e2ed1c4d82c6f15158963b304d rustc-1.67.1-src.tar.xz
|
|
03a179e31c95f88a98fb1ba6b2fd0baaf9fe1a74ade76d3096fe45ddc5e453c25109355e667783d9be1bcc585445d07b7270cb3e6e403de971049714f2c6f91a alpine-move-py-scripts-to-share.patch
|
|
f87b12c6c3ccf8abc3a21d40631ed753efe313c601c5fdd5200cea16aa65878621700b6ca6b22c4f2334a8540dc7d23ef0ff9087fc65177433d56a700e56bb8c alpine-target.patch
|
|
7af23c34096f7a03c5a1b40aa07e00dd6193743c872881018a9baa900f240c6e44918e481ab5ed7787a70ef361e4aeec2a7719bcd695f52988262e23271b44e5 do-not-install-libunwind-source.patch
|
|
92916225c21742941aaf415d75d330fe2baf77a8226c076e862f4413068d5dee7b08c4b3182f69957ea9a51a0dcde145031565289015b6e3c31894fb396e4eb1 gcc-eh-libunwind.patch
|
|
7d59258d4462eba0207739a5c0c8baf1f19d9a396e5547bb4d59d700eb94d50ba6add2e523f3e94e29e993821018594625ea4ac86304fb58f7f8c82622a26ab0 install-template-shebang.patch
|
|
416ac00f70645ca3afc6eb40b3c06ac4e6c13bf8d04109616c8170093aab3c1ddb19ace5252a37895f81d4bc6669918804dfd84eb0c5fa07c9e810dbffe39354 musl-fix-linux_musl_base.patch
|
|
2d401a01d2c2db92624d672018342907a41aa4a3842708c0a2ab694af0396d568aca4835d1075f244d77c0a4c45e67f893fd175fd97cd7f758090eba9972eba6 need-rpath.patch
|
|
b722bc2787748e208abdc50a496d6b155b2d786bb28cbd5726535534e322a87c191db161d94e06154e126eaf81ca3634f10b364b7212f0f3154e5cca859980bd need-ssp_nonshared.patch
|
|
cbdb38a2701e079d362e76ff16a2549230f80bcb4dfd3561d240df331fb21d202cb720e18b97fe9b166db1f79b46fab949ce5de5e37af2ed78a10c7fe1dfcfc9 no-export-ld-library-path.patch
|
|
4ea59b28fa238b8bb0cb24847e5884b65beec5168e55fe41a1ff50e272f1cf49186ffaa71d133cebfdcb70901ea18b477d7618a1dd330ff6c08bed5af0e2bb78 system-wasm-ld.patch
|
|
c31fdfe8a9b3411576c75da46645cf0465b9053000a2ab49cf9b2f2733f679d6d33acbf236d67a20e14935d094a685453b7f1840180249f39d610fd0902c3125 check-rustc
|
|
"
|