Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/build-support/rust162/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'build-support/rust162/PKGBUILD')
-rw-r--r--build-support/rust162/PKGBUILD303
1 files changed, 303 insertions, 0 deletions
diff --git a/build-support/rust162/PKGBUILD b/build-support/rust162/PKGBUILD
new file mode 100644
index 00000000..33a068d3
--- /dev/null
+++ b/build-support/rust162/PKGBUILD
@@ -0,0 +1,303 @@
+# Maintainer: Johannes Löthberg <johannes@kyriasis.com>
+# Maintainer: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
+# Contributor: Alexander F Rødseth <xyproto@archlinux.org>
+# Contributor: Daniel Micay <danielmicay@gmail.com>
+# Contributor: userwithuid <userwithuid@gmail.com>
+
+pkgbase=rust162
+pkgname=(rust162 rust162-musl rust162-wasm rust162-src)
+epoch=1
+pkgver=1.62.0
+pkgrel=1
+pkgdesc="Systems programming language focused on safety, speed and concurrency"
+url=https://www.rust-lang.org/
+arch=(i486 i686 pentium4 x86_64)
+license=(MIT Apache)
+options=(!emptydirs !strip !lto)
+depends=(gcc-libs llvm-libs curl libssh2 gcc)
+makedepends=(rust llvm libffi lib32-gcc-libs perl python cmake musl ninja
+ wasi-libc lld)
+checkdepends=(procps-ng gdb)
+source=(
+ "https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz"{,.asc}
+ 0001-cargo-Change-libexec-dir.patch
+ 0001-bootstrap-Change-libexec-dir.patch
+ 0002-compiler-Change-LLVM-targets.patch
+ 0003-compiler-Use-wasm-ld-for-wasm-targets.patch
+ remove-include-linux-fs.h.patch
+)
+sha256sums=('7d0878809b64d206825acae3eb7f60afb2212d81e3de1adf4c11c6032b36c027'
+ 'SKIP'
+ 'c901a9bb036c29ca092f7dbc8b447efdd9aa1044a902a88f9d024cb22681dc19'
+ '7080a88e44234aa363ba6321f319c8d9621382dd9581748a43847dae005e55bd'
+ '5137df0a3399e279db4c5b83ae8e99d2c1977f62aec2f90521edb02f51597064'
+ '26bf232d144b81a303ed91f6a331ddf004c5d9fefd41a11e36b61812a34459aa'
+ '34ed866e313e4580130a50118a4410d36fa0159123982521b6ef049439fc32ad')
+validpgpkeys=(108F66205EAEB0AAA8DD5E1C85AB96E6FA1BE5FE # Rust Language (Tag and Release Signing Key) <rust-key@rust-lang.org>
+ 474E22316ABF4785A88C6E8EA2C794A986419D8A) # Tom Stellard <tstellar@redhat.com>
+
+prepare() {
+ cd rustc-$pkgver-src
+
+ # Patch bootstrap and cargo so credential helpers
+ # are in /usr/lib instead of /usr/libexec
+ patch -d src/tools/cargo -Np1 < ../0001-cargo-Change-libexec-dir.patch
+ patch -Np1 -i ../0001-bootstrap-Change-libexec-dir.patch
+
+ # Use our *-pc-linux-gnu targets, making LTO with clang simpler
+ patch -Np1 -i ../0002-compiler-Change-LLVM-targets.patch
+
+ # Use our wasm-ld
+ patch -Np1 -i ../0003-compiler-Use-wasm-ld-for-wasm-targets.patch
+
+ # https://github.com/llvm/llvm-project/issues/56421
+ patch -Np1 -d src/llvm-project < ../remove-include-linux-fs.h.patch
+
+ cat >config.toml <<END
+changelog-seen = 2
+profile = "user"
+
+[llvm]
+link-shared = true
+
+[build]
+target = [
+ "x86_64-unknown-linux-gnu",
+ "i686-unknown-linux-gnu",
+ "x86_64-unknown-linux-musl",
+ "wasm32-unknown-unknown",
+ "wasm32-wasi",
+]
+cargo = "/usr/bin/cargo"
+rustc = "/usr/bin/rustc"
+rustfmt = "/usr/bin/rustfmt"
+locked-deps = true
+vendor = true
+tools = ["cargo", "rls", "clippy", "rustfmt", "analysis", "src", "rust-demangler"]
+sanitizers = true
+profiler = true
+
+# Generating docs fails with the wasm32-* targets
+docs = false
+
+[install]
+prefix = "/usr"
+
+[rust]
+debuginfo-level-std = 2
+channel = "stable"
+description = "Arch Linux $pkgbase $epoch:$pkgver-$pkgrel"
+rpath = false
+backtrace-on-ice = true
+remap-debuginfo = true
+jemalloc = true
+
+# LLVM crashes when passing an object through ThinLTO twice. This is triggered
+# when using rust code in cross-language LTO if libstd was built using ThinLTO.
+# http://blog.llvm.org/2019/09/closing-gap-cross-language-lto-between.html
+# https://github.com/rust-lang/rust/issues/54872
+codegen-units-std = 1
+
+# musl target produces warnings
+deny-warnings = false
+
+[dist]
+compression-formats = ["gz"]
+
+[target.x86_64-unknown-linux-gnu]
+llvm-config = "/usr/bin/llvm-config"
+
+[target.x86_64-unknown-linux-musl]
+sanitizers = false
+musl-root = "/usr/lib/musl"
+
+[target.wasm32-unknown-unknown]
+sanitizers = false
+profiler = false
+
+[target.wasm32-wasi]
+sanitizers = false
+profiler = false
+wasi-root = "/usr/share/wasi-sysroot"
+END
+}
+
+_pick() {
+ local p="$1" f d; shift
+ for f; do
+ d="$srcdir/$p/$f"
+ mkdir -p "$(dirname "$d")"
+ mv "$f" "$d"
+ rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
+ done
+}
+
+build() {
+ cd rustc-$pkgver-src
+
+ export RUST_BACKTRACE=1
+
+ DESTDIR="$srcdir/dest-rust" python ./x.py install -j "$(nproc)"
+
+ cd ../dest-rust
+
+ # delete unnecessary files, e.g. files only used for the uninstall script
+ rm usr/lib/rustlib/{components,install.log,rust-installer-version,uninstall.sh}
+ rm usr/lib/rustlib/manifest-*
+
+ # rustbuild always installs copies of the shared libraries to /usr/lib,
+ # overwrite them with symlinks to the per-architecture versions
+ mkdir -p usr/lib32
+ ln -srft usr/lib usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so
+ ln -srft usr/lib32 usr/lib/rustlib/i686-unknown-linux-gnu/lib/*.so
+
+ mkdir -p usr/share/bash-completion
+ mv etc/bash_completion.d usr/share/bash-completion/completions
+
+ mkdir -p usr/share/licenses/rust
+ mv -t usr/share/licenses/rust usr/share/doc/rust/{COPYRIGHT,LICENSE*}
+
+ _pick dest-i686 usr/lib/rustlib/i686-unknown-linux-gnu usr/lib32
+ _pick dest-musl usr/lib/rustlib/x86_64-unknown-linux-musl
+ _pick dest-wasm usr/lib/rustlib/wasm32-*
+ _pick dest-src usr/lib/rustlib/src
+}
+
+package_rust162() {
+ optdepends=('lldb: rust-lldb script'
+ 'gdb: rust-gdb script')
+ provides=(cargo rustfmt)
+ conflicts=(cargo rustfmt 'rust-docs<1:1.56.1-3')
+ replaces=(cargo rustfmt cargo-tree 'rust-docs<1:1.56.1-3')
+
+ cp -a dest-rust/* "$pkgdir"
+}
+
+package_lib32-rust-libs() {
+ pkgdesc="32-bit target and libraries for Rust"
+ depends=(rust lib32-gcc-libs)
+ provides=(lib32-rust)
+ conflicts=(lib32-rust)
+ replaces=(lib32-rust)
+
+ cp -a dest-i686/* "$pkgdir"
+
+ mkdir -p "$pkgdir/usr/share/licenses"
+ ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
+}
+
+package_rust162-musl() {
+ pkgdesc="Musl target for Rust"
+ depends=(rust162)
+
+ cp -a dest-musl/* "$pkgdir"
+
+ mkdir -p "$pkgdir/usr/share/licenses"
+ ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
+}
+
+package_rust162-wasm() {
+ pkgdesc="WebAssembly targets for Rust"
+ depends=(rust162 lld)
+
+ cp -a dest-wasm/* "$pkgdir"
+
+ mkdir -p "$pkgdir/usr/share/licenses"
+ ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
+}
+
+package_rust162-src() {
+ pkgdesc="Source code for the Rust standard library"
+ depends=(rust162)
+
+ cp -a dest-src/* "$pkgdir"
+
+ mkdir -p "$pkgdir/usr/share/licenses"
+ ln -s rust "$pkgdir/usr/share/licenses/$pkgname"
+}
+
+# vim:set ts=2 sw=2 et:
+# enable i686-unknown-linux-gnu target
+# and replace pentium4 (SSE2) with pentium3 (no SSE2) in the compiler spec file
+#
+# Also trying to reduce memory usage by building with
+# -debuginfo-level-std=1
+# see https://github.com/rust-lang/rust/issues/60294
+
+source+=(config.toml.patch)
+sha256sums+=('a8b42b5f47c0eaebafbb2cd1f39d2f944945cbb55e87d4dc21c7bd5b1b8964d8')
+
+eval "$(
+ declare -f prepare | \
+ sed '
+ $ i patch -p1 -i "$srcdir/config.toml.patch"
+ '
+)"
+
+# stop insanity of nproc (see FS#62952)
+#eval "$(
+# declare -f build | \
+# sed '
+# s/-j "$(nproc)"/-j1/
+# '
+#)"
+
+if [ "${CARCH}" != 'pentium4' ]; then
+ eval "$(
+ declare -f prepare | \
+ sed '
+ $ i sed -i "s/pentium4/pentium3/g" "$srcdir/rustc-$pkgver-src/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs"
+ '
+ )"
+fi
+
+# Don't move lib32 support into rust32-lib, we are on 32-bit in the end
+# and don't draw a symlink to 64-bit libraries (but to 32-bit instead)
+# move rust-musl though, also patch architecture for musl accordingly
+eval "$(
+ declare -f build | \
+ sed '
+ /mkdir.*usr\/lib32/d
+ /ln.*x86_64.*/d
+ /ln.*i686-unknown-linux-gnu.*/d
+ /_pick.*dest-i686.*/d
+ s/x86_64-unknown-linux-musl/i686-unknown-linux-musl/
+ '
+)"
+
+eval "$(
+ declare -f package_rust | \
+ sed '
+ /ln /s/x86_64-unknown-linux-gnu/i686-unknown-linux-gnu/g
+ '
+)"
+
+eval "$(
+ declare -f package_rust-musl | \
+ sed '
+ s/x86_64-unknown-linux-musl/i686-unknown-linux-musl/
+ '
+)"
+
+# remove 32-bit stuff (shouldn't that be removed automatically?)
+pkgname=(
+ $(
+ printf '%s\n' "${pkgname[@]}" | \
+ grep -v '^lib32-rust-libs'
+ )
+)
+makedepends=(${makedepends[@]//lib32-gcc-libs/})
+
+# Enable on demand, if your previous rust is broken use previous version
+# from build-support (this is preferable to using rust-bin below, but
+# requires all intermediate versions of rust to be built
+#makedepends=(${makedepends[@]//rust/})
+#makedepends+=('rust148')
+
+# Enable on demand, if your previous rust is broken use previous version
+# from build-support
+#makedepends=(${makedepends[@]//rust/})
+#makedepends+=('rust159-bin')
+
+# rust 1.61 is built against llvm13.0, so force that in as a make dependency
+makedepends+=('llvm13-libs')