diff options
Diffstat (limited to 'testing/source/rust')
-rw-r--r-- | testing/source/rust/link_libffi.diff | 11 | ||||
-rw-r--r-- | testing/source/rust/llvm.sanitizer_platform_limits_posix.cpp.glibc-2.36.diff | 27 | ||||
-rwxr-xr-x | testing/source/rust/rust.SlackBuild | 298 | ||||
-rw-r--r-- | testing/source/rust/rust.url | 35 | ||||
-rw-r--r-- | testing/source/rust/slack-desc | 19 |
5 files changed, 390 insertions, 0 deletions
diff --git a/testing/source/rust/link_libffi.diff b/testing/source/rust/link_libffi.diff new file mode 100644 index 00000000..dd5a3e0f --- /dev/null +++ b/testing/source/rust/link_libffi.diff @@ -0,0 +1,11 @@ +--- ./compiler/rustc_llvm/build.rs.orig 2020-11-16 08:01:53.000000000 -0600 ++++ ./compiler/rustc_llvm/build.rs 2020-11-19 13:46:21.222785372 -0600 +@@ -234,6 +234,8 @@ + println!("cargo:rustc-link-lib={}={}", kind, name); + } + ++ println!("cargo:rustc-link-lib=dylib=ffi"); ++ + // LLVM ldflags + // + // If we're a cross-compile of LLVM then unfortunately we can't trust these diff --git a/testing/source/rust/llvm.sanitizer_platform_limits_posix.cpp.glibc-2.36.diff b/testing/source/rust/llvm.sanitizer_platform_limits_posix.cpp.glibc-2.36.diff new file mode 100644 index 00000000..6f68c0d8 --- /dev/null +++ b/testing/source/rust/llvm.sanitizer_platform_limits_posix.cpp.glibc-2.36.diff @@ -0,0 +1,27 @@ +--- ./src/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp.orig 2022-07-16 03:50:21.000000000 -0500 ++++ ./src/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp 2022-08-05 23:15:14.928568611 -0500 +@@ -73,7 +73,9 @@ + #include <sys/vt.h> + #include <linux/cdrom.h> + #include <linux/fd.h> ++#if SANITIZER_ANDROID + #include <linux/fs.h> ++#endif + #include <linux/hdreg.h> + #include <linux/input.h> + #include <linux/ioctl.h> +@@ -860,10 +862,10 @@ + unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT; + unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT; + #endif +- unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS; +- unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION; +- unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS; +- unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION; ++ unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long); ++ unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long); ++ unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long); ++ unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long); + unsigned IOCTL_GIO_CMAP = GIO_CMAP; + unsigned IOCTL_GIO_FONT = GIO_FONT; + unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP; diff --git a/testing/source/rust/rust.SlackBuild b/testing/source/rust/rust.SlackBuild new file mode 100755 index 00000000..de8d941c --- /dev/null +++ b/testing/source/rust/rust.SlackBuild @@ -0,0 +1,298 @@ +#!/bin/bash + +# Copyright 2017 Andrew Clemons, Wellington, New Zealand +# Copyright 2017, 2018, 2019, 2020, 2021, 2022 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2017 Stuart Winter +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=rust +SRCNAM="${PKGNAM}c" +VERSION=${VERSION:-1.64.0} +BUILD=${BUILD:-1} + +# Set this to YES to build with the system LLVM, or NO to use the bundled LLVM. +# YES is probably better (when it works...) +SYSTEM_LLVM=${SYSTEM_LLVM:-YES} + +# Bootstrap variables (might not be kept updated for latest Rust): +RSTAGE0_VERSION=${RSTAGE0_VERSION:-1.63.0} +RSTAGE0_DIR=${RSTAGE0_DIR:-2022-08-11} +CSTAGE0_VERSION=${CSTAGE0_VERSION:-1.63.0} +CSTAGE0_DIR=${CSTAGE0_DIR:-$RSTAGE0_DIR} + +# Automatically determine the architecture we're building on: +MARCH=$( uname -m ) +if [ -z "$ARCH" ]; then + case "$MARCH" in + i?86) export ARCH=i686 ;; + armv7hl) export ARCH=$MARCH ;; + arm*) export ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$MARCH ;; + esac +fi +unset MARCH + +# For compiling i686 under an x86_64 kernel: +if [ "$(uname -m)" = "x86_64" -a "$(file -L /usr/bin/gcc | grep 80386 | grep 32-bit)" != "" ]; then + ARCH=i686 +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +# If the bootstrap binaries are present, use those. Otherwise bootstrap from +# installed compiler. +if /bin/ls *-unknown-linux-gnu.tar.?z 1> /dev/null 2> /dev/null ; then + LOCAL_BOOTSTRAP=no +else + LOCAL_BOOTSTRAP=yes +fi + +# https://forge.rust-lang.org/platform-support.html +# Bootstrapping ARCH: +if [ "$ARCH" = "i586" ]; then + if [ "$LOCAL_BOOTSTRAP" = "yes" ] ; then + if rustc -Vv | grep host | grep i586 > /dev/null ; then + BARCH="$ARCH" + else + BARCH="i686" + if case "$( uname -m )" in i586) true ;; *) false ;; esac ; then + echo "rust must be bootstrapped from an i686 machine" + exit 1 + fi + fi + else + # i586 must be built on a i686 machine, since the bootstrap compiler is i686 + BARCH="i686" + if case "$( uname -m )" in i586) true ;; *) false ;; esac ; then + echo "rust must be bootstrapped from an i686 machine" + exit 1 + fi + fi + TARCH="$ARCH" +elif [ "$ARCH" = "armv7hl" ]; then + BARCH="armv7" + TARCH="$BARCH" +else + BARCH="$ARCH" + TARCH="$ARCH" +fi + +# Bootstrapping ABI: +if [ "$ARCH" = "armv7hl" ]; then + BABI="gnueabihf" +else + BABI="gnu" +fi + +TMP=${TMP:-/tmp} +OUTPUT=${OUTPUT:-/tmp} +PKG=$TMP/package-$PKGNAM + +# Not needed, as the build will automatically use as many jobs as there are +# threads. +#NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} + +if [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + LIBDIRSUFFIX="64" +elif [ "$ARCH" = "armv7hl" ]; then + LIBDIRSUFFIX="" +else + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION-src +tar xvf $CWD/$SRCNAM-$VERSION-src.tar.?z || exit 1 +cd $SRCNAM-$VERSION-src || exit 1 + +# Link with -lffi in case of using system LLVM: +if [ "${SYSTEM_LLVM}" = "YES" ]; then + zcat $CWD/link_libffi.diff.gz | patch -p1 --verbose || exit 1 +fi + +# Fix build with glibc-2.36: +zcat $CWD/llvm.sanitizer_platform_limits_posix.cpp.glibc-2.36.diff.gz | patch -p1 --verbose || exit 1 + +if [ "$LOCAL_BOOTSTRAP" != "yes" ] ; then + # rust requires bootstrapping with the previous rust version. + # versions are defined in src/stage0.txt. + mkdir -p build/cache/$RSTAGE0_DIR + cp $CWD/$PKGNAM-std-$RSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z \ + $CWD/$SRCNAM-$RSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z \ + build/cache/$RSTAGE0_DIR + mkdir -p build/cache/$CSTAGE0_DIR + cp $CWD/cargo-$CSTAGE0_VERSION-$BARCH-unknown-linux-gnu.tar.?z build/cache/$CSTAGE0_DIR +fi + +# Build configuration: +cat << EOF > config.toml +[llvm] +ccache = "/usr/bin/ccache" +link-shared = true + +[build] +build = "$BARCH-unknown-linux-$BABI" +host = ["$TARCH-unknown-linux-$BABI"] +target = ["$TARCH-unknown-linux-$BABI"] +tools = ["analysis", "cargo", "clippy", "rls", "rustfmt", "src"] +submodules = false +vendor = true +extended = true + +[install] +prefix = "/usr" +docdir = "doc/rust-$VERSION" +libdir = "lib$LIBDIRSUFFIX" +mandir = "man" + +[rust] +codegen-units = 0 +channel = "stable" +rpath = false +codegen-tests = false +ignore-git = true + +EOF + +if [ "${SYSTEM_LLVM}" = "YES" ]; then + cat << EOF >> config.toml +# Add this stuff to build with the system LLVM: +[target.i586-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.i686-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.x86_64-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[target.armv7-unknown-linux-gnueabihf] +llvm-config = "/usr/bin/llvm-config" +EOF +fi + +if [ "$LOCAL_BOOTSTRAP" = "yes" ] ; then + sed -i "s|^\(extended = true\)$|\1\nrustc = \"/usr/bin/rustc\"\ncargo = \"/usr/bin/cargo\"|" config.toml +fi + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +export PKG_CONFIG_ALLOW_CROSS=1 + +if [ "$BARCH" = "i586" ] ; then + # when bootstrapping from i586 (rust already installed), also build a i686 + # rustlib: + sed -i 's/^target =.*$/target = ["i686-unknown-linux-gnu"]/' config.toml +elif [ "$BARCH" = "i686" ] ; then + if [ "$TARCH" = "i586" ] ; then + # this will cause some messages like: + # warning: redundant linker flag specified for library `m` + # but will keep the build from falling over when doing the stage1 compiler + # linking for the i586 compiler. seems the correct flags don't get passed + # through and we end up failures like: + # error: linking with `clang` failed: exit code: 1 + # /tmp/SBo/rustc-1.20.0-src/build/i686-unknown-linux-gnu/stage1-rustc/i586-unknown-linux-gnu/release/deps/librustc_llvm-4ab259c9aed547db.so: undefined reference to `xxx` + export RUSTFLAGS="$RUSTFLAGS -C link-args=-lrt -ldl -lcurses -lpthread -lz -lm" + fi +fi + +# Build and install: +python3 ./x.py build || exit 1 +DESTDIR=$PKG python3 x.py install || exit 1 + +# Eh, none of this is all that big. Might as well leave it around as a +# reference. +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/components +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/install.log +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/rust-installer-version +#rm -f $PKG/usr/lib$LIBDIRSUFFIX/rustlib/uninstall.sh +# Make sure the paths are correct, though: +sed -i "s,/tmp/package-rust/,/,g" $PKG/usr/lib$LIBDIRSUFFIX/rustlib/install.log $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* +# And a little compression doesn't hurt either: +gzip -9 $PKG/usr/lib$LIBDIRSUFFIX/rustlib/manifest-* + +# Move bash completions to the system location: +if [ -d $PKG/etc/bash_completion.d ]; then + mkdir -p $PKG/usr/share/bash-completion + mv $PKG/etc/bash_completion.d $PKG/usr/share/bash-completion/completions + rmdir $PKG/etc 2> /dev/null +fi + +# Correct permissions on shared libraries: +find $PKG/usr/lib$LIBDIRSUFFIX -name "*.so" -exec chmod 755 "{}" \+ + +# Evidently there are a lot of duplicated libraries in this tree, so let's +# try to save some space: +( cd $PKG/usr/lib${LIBDIRSUFFIX}/rustlib/*-linux-gnu/lib && for file in *.so ; do if cmp -s $file ../../../$file ; then ln -sf ../../../$file .; fi; done ) + +# Strip ELF objects: +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Get rid of a possible duplicated libLLVM. Not only is it large, but it also +# throws an error at boot with ldconfig: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libLLVM-*.so.old + +# Commented out (for now) since we disable rpaths in config.toml: +## Remove any compiled-in RPATHs: +#find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ +# | cut -f 1 -d : | while read elfobject ; do +# patchelf --remove-rpath $elfobject || exit 1 +#done + +# Compress man pages: +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Add some documentation: +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a *.md COPYRIGHT* COPYING* LICENSE* $PKG/usr/doc/$PKGNAM-$VERSION +# Include licenses from third party vendors: +mkdir $PKG/usr/doc/$PKGNAM-$VERSION/vendor +( cd vendor + tar cf - $(find . -maxdepth 2 | grep -e README -e LICENSE -e COPYING -e CHANGELOG -e PERFORMANCE -e UPGRADE ) | ( cd $PKG/usr/doc/$PKGNAM-$VERSION/vendor ; tar xf - ) +) + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/testing/source/rust/rust.url b/testing/source/rust/rust.url new file mode 100644 index 00000000..524e5c1b --- /dev/null +++ b/testing/source/rust/rust.url @@ -0,0 +1,35 @@ +# Source code (repacked to .tar.lz): +VERSION=1.64.0 +rm -f rustc-${VERSION}-src.tar.* +lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz +lftpget https://static.rust-lang.org/dist/rustc-${VERSION}-src.tar.gz.asc +if gpg --verify rustc-${VERSION}-src.tar.gz.asc ; then + rm -f rustc-${VERSION}-src.tar.gz.asc + gzip -d rustc-*tar.gz + plzip -9 -v rustc-*tar +else + echo "FATAL ERROR: Not recompressing since GPG signature failed." + exit 1 +fi + +# Please note that the bootstrap binary packages listed below might not be kept +# updated for later versions. The Rust compiler as shipped with Slackware +# should be able to compile the next released version of Rust. +# +# To find the expected date/versions for bootstrap binaries to be able to +# update the settings below, look at src/stage0.json in the Rust sources. +exit 0 + +BOOTSTRAP_DATE=2022-08-11 +BOOTSTRAP_VERSION=1.63.0 +BOOTSTRAP_CARGO=$BOOTSTRAP_VERSION + +# i686 bootstrap: +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/cargo-${BOOTSTRAP_CARGO}-i686-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rust-std-${BOOTSTRAP_VERSION}-i686-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rustc-${BOOTSTRAP_VERSION}-i686-unknown-linux-gnu.tar.xz + +# x86_64 bootstrap: +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/cargo-${BOOTSTRAP_CARGO}-x86_64-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rust-std-${BOOTSTRAP_VERSION}-x86_64-unknown-linux-gnu.tar.xz +lftpget https://static.rust-lang.org/dist/${BOOTSTRAP_DATE}/rustc-${BOOTSTRAP_VERSION}-x86_64-unknown-linux-gnu.tar.xz diff --git a/testing/source/rust/slack-desc b/testing/source/rust/slack-desc new file mode 100644 index 00000000..924b1907 --- /dev/null +++ b/testing/source/rust/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +rust: rust (a safe, concurrent, practical language) +rust: +rust: Rust is a curly-brace, block-structured expression language. +rust: Its design is oriented toward concerns of "programming in the large", +rust: that is, of creating and maintaining boundaries - both abstract and +rust: operational - that preserve large-system integrity, availability, +rust: and concurrency. +rust: +rust: Homepage: https://rust-lang.org +rust: +rust: |