# Contributor: Jakub Jirutka # Contributor: Shiz # Contributor: Jeizsm # Maintainer: Jakub Jirutka pkgname=rust pkgver=1.20.0 _llvmver=3.9 _bootver=1.19.0 pkgrel=0 pkgdesc="The Rust Programming Language (compiler)" url="http://www.rust-lang.org" arch="x86_64" license="ASL-2.0 BSD ISC 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 llvm-libunwind-dev 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 8cb3112594f10a8cee5b5412c28a846acb63167f. # * libffi-dev is needed just because we compile llvm with LLVM_ENABLE_FFI. makedepends="rust>=$_bootver cargo cmake file libffi-dev llvm$_llvmver-dev python2 tar zlib-dev" subpackages="$pkgname-dbg $pkgname-stdlib $pkgname-gdb::noarch $pkgname-lldb::noarch $pkgname-doc" source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz musl-support-dynamic-linking.patch musl-fix-static-linking.patch musl-fix-linux_musl_base.patch llvm-with-ffi.patch static-pie.patch need-rpath.patch minimize-rpath.patch alpine-move-py-scripts-to-share.patch alpine-change-rpath-to-rustlib.patch alpine-target.patch check-rustc " builddir="$srcdir/rustc-$pkgver-src" _rlibdir="usr/lib/rustlib/$CTARGET/lib" _sharedir="usr/share/rust" ldpath="/$_rlibdir" prepare() { default_prepare cd "$builddir" # Remove bundled dependencies. rm -Rf src/llvm/ # Make sure to use the system LLVM. printf '[target.%s]\nllvm_config = "/usr/lib/llvm%s/bin/llvm-config"\n' \ "$CTARGET" "$_llvmver" > config.toml } build() { cd "$builddir" # jemalloc is disabled, because it increases size of statically linked # binaries produced by rustc (stripped hello_world 186 kiB vs. 358 kiB) # for only tiny performance boost (even negative in some tests). ./configure \ --build="$CBUILD" \ --host="$CTARGET" \ --target="$CTARGET" \ --prefix="/usr" \ --release-channel="stable" \ --enable-local-rust \ --local-rust-root="/usr" \ --llvm-root="/usr/lib/llvm$_llvmver" \ --musl-root="/usr" \ --enable-vendor \ --enable-llvm-link-shared \ --disable-jemalloc \ --disable-docs RUST_BACKTRACE=1 \ RUST_CRT_STATIC="false" \ ./x.py build -v } check() { "$srcdir"/check-rustc "$builddir/build/$CTARGET/stage2/bin/rustc" # XXX: There's some problem with these tests, we will figure it out later. # cd "$builddir" # make check \ # LD_LIBRARY_PATH="$_stage0dir/lib" \ # RUST_BACKTRACE=1 \ # RUST_CRT_STATIC="false" \ # VERBOSE=1 } package() { cd "$builddir" RUST_BACKTRACE=1 \ RUST_CRT_STATIC="false" \ ./x.py dist -v local component; for component in rustc rust-std; do tar -xf "build/dist/$component-$pkgver-$CTARGET.tar.gz" ./"$component-$pkgver-$CTARGET"/install.sh --destdir="$pkgdir" --prefix=/usr --disable-ldconfig done cd "$pkgdir" # These libraries are identical to those under rustlib/. Since we have # linked rustc/rustdoc against those under rustlib/, we can remove # them. Read change-rpath-to-rustlib.patch for more info. rm -r usr/lib/*.so # These objects are for static linking with musl on non-musl systems. rm $_rlibdir/crt*.o # Shared objects should have executable flag. chmod +x $_rlibdir/*.so # 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 # Remove some clutter. cd usr/lib/rustlib rm components install.log manifest-* rust-installer-version uninstall.sh } stdlib() { pkgdesc="Standard library for Rust (static rlibs)" _mv "$pkgdir"/$_rlibdir/*.rlib "$subpkgdir"/$_rlibdir/ } gdb() { pkgdesc="GDB pretty printers for Rust" depends="$pkgname gdb" mkdir -p "$subpkgdir" cd "$subpkgdir" _mv "$pkgdir"/usr/bin/rust-gdb usr/bin/ _mv "$pkgdir"/$_sharedir/etc/gdb_*.py $_sharedir/etc/ } lldb() { pkgdesc="LLDB pretty printers for Rust" depends="$pkgname lldb py-lldb" mkdir -p "$subpkgdir" cd "$subpkgdir" _mv "$pkgdir"/usr/bin/rust-lldb usr/bin/ _mv "$pkgdir"/$_sharedir/etc/lldb_*.py $_sharedir/etc/ } _mv() { local dest; for dest; do true; done # get last argument mkdir -p "$dest" mv $@ } sha512sums="bc7dc78f4d81b7d35309d81fae2aac1f5f157eb3350e533911e79e3323a6ea056483ff0b6c63148bd8c3d070df7172374a669fbc4554e77889cfbacb5dbb46c3 rustc-1.20.0-src.tar.gz e797d4a21ffe5087e6a7c4d22302f0fbd8fdc2074195d7a0d22a8c52a1abe3269e14a3b865f26e13a4f70362922dd0dc5279d8a3d70617199705cc452181d889 musl-support-dynamic-linking.patch d4d39514eca638852307f470250fd12a21781e1e7944377744b7d50290d3a2ab3776fbdfccb7a9221f5da00ca694ac3a5b8c05f72c5e1a0c8711b684b16b1084 musl-fix-static-linking.patch 9ebfb10abb50d74ff08d257d85257ce70ac3ce834aa95a8901808497b14acf3ea898fb197de64d13554eb5feedabe9fd04fec2cc6a7bea9b1335684bfcdcd88b musl-fix-linux_musl_base.patch dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0 llvm-with-ffi.patch 5aaf6715b27b8b786740a55b91216d47985fbef3ccb0ef7e6a81696a2823671f8306143f7ecf77e66af91ef1500072524b9b4c7569508922ad5268df6080fda1 static-pie.patch ff633f2a46c683ad698d1c09c98c06ce9ee9b8d55fa5593cdd485b439ebca3273794d29b5ff32b887be8666f52913a23af6e133c782bd0c4e2c88e306dd3a494 need-rpath.patch d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb84d75ed2f706f67868f7dbc52196d4ccdf4ebd2d6d6b6b5e minimize-rpath.patch 498f4649163974afc4f042c43cd0c15d36784031514201a2962061f288a9336c2bc9749f8d2308b8ce3656f8097b5fc5bef505f61e2a6ed422ef4153f5339d77 alpine-move-py-scripts-to-share.patch 0542e8ffeb7ff6017aeec84d99c14802c6536433b41dafe7c8fc0c40908548228f34ef142ad6ad94235115b05f02ce157553b470b0f242292f90f3125b249e94 alpine-change-rpath-to-rustlib.patch 3df3fc5a8d32b47489939e1f2d8277914cea6f3cd5cacf68373d7ab97b2552356f8121e2a134b473bb4715e189ddf03a7bda95cd5f05230bdeb33a5150177d68 alpine-target.patch 79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528 check-rustc"