0
0
Fork 0
haikuports/dev-lang/rust/rust-1.27.0.recipe

250 lines
10 KiB
Bash

SUMMARY="Modern and safe systems programming language"
DESCRIPTION="Rust is a systems programming language that runs blazingly fast, \
prevents almost all crashes*, and eliminates data races."
HOMEPAGE="https://www.rust-lang.org/"
COPYRIGHT="2018 The Rust Project Developers"
LICENSE="MIT"
REVISION="2"
cargoVersion="0.28.0"
rlsVersion="0.127.0"
rustfmtVersion="0.6.1"
SOURCE_URI="https://github.com/rust-lang/rust/archive/$portVersion.tar.gz"
CHECKSUM_SHA256="0bbca54761be5302efc6e6fdb5f4dab4e0dec24458ca7c13538b7259885f9457"
SOURCE_FILENAME="rust-$portVersion.tar.gz"
srcGitRev_2="7243155b1c3da0a980c868a87adebf00e0b33989"
SOURCE_URI_2="https://github.com/rust-lang/llvm/archive/$srcGitRev_2.tar.gz"
CHECKSUM_SHA256_2="ba1578c156e8f10a9330f8d2b8514987c74a2babaea845ac4c4a1d2d5ef379ec"
SOURCE_FILENAME_2="rust-$portVersion-llvm-$srcGitRev_2.tar.gz"
srcGitRev_3="118e078c5badd520d18b92813fd88789c8d341ab"
SOURCE_URI_3="https://github.com/rust-lang/rust-installer/archive/$srcGitRev_3.tar.gz"
CHECKSUM_SHA256_3="34fd6dd8f8e5943be3ab022cd7d0ca792ea2cfe6fb21e06d6054134fc6441892"
SOURCE_FILENAME_3="rust-$portVersion-rust-installer-$srcGitRev_3.tar.gz"
srcGitRev_4="c5fb6dbe8154732b2af8367c75a9b079b2951154"
SOURCE_URI_4="https://github.com/rust-lang/libc/archive/$srcGitRev_4.tar.gz"
CHECKSUM_SHA256_4="aa083022606be28922dfd94606dc27da11f9f397ed732d93fd70fd6a8fa82594"
SOURCE_FILENAME_4="rust-$portVersion-libc-$srcGitRev_4.tar.gz"
srcGitRev_5="748a5e6742db4a21c4c630a58087f818828e8a0a"
SOURCE_URI_5="https://github.com/rust-lang-nursery/nomicon/archive/$srcGitRev_5.tar.gz"
CHECKSUM_SHA256_5="abf8866307d51259e55fef461e7954d05cf3169001069dc9ed4ab5eb40a73abd"
SOURCE_FILENAME_5="rust-$portVersion-nomicon-$srcGitRev_5.tar.gz"
SOURCE_URI_6="https://github.com/rust-lang/cargo/archive/$cargoVersion.tar.gz"
CHECKSUM_SHA256_6="62f4269af6cd168c91a6b10ef845e6dc0f1c211605bd13d155a6a001ade026a1"
SOURCE_FILENAME_6="rust-$portVersion-cargo-$cargoVersion.tar.gz"
srcGitRev_7="134f419ee62714590b04712fe6072253bc2a7822"
SOURCE_URI_7="https://github.com/rust-lang-nursery/reference/archive/$srcGitRev_7.tar.gz"
CHECKSUM_SHA256_7="9e54405f4a6c487cba04d2e25e7026b86581038a88741ce5757b38ddfab4cb07"
SOURCE_FILENAME_7="rust-$portVersion-reference-$srcGitRev_7.tar.gz"
srcGitRev_8="f51127530d46b9acbf4747c859da185e771cfcf3"
SOURCE_URI_8="https://github.com/rust-lang/book/archive/$srcGitRev_8.tar.gz"
CHECKSUM_SHA256_8="a18b090a3a29313a9e68dbef0ca4a5e0ecb36d9eb0f244a1e6cbd33989546989"
SOURCE_FILENAME_8="rust-$portVersion-book-$srcGitRev_8.tar.gz"
srcGitRev_9="d2ade31a52a417257742de72c5936a8a342a34b5"
SOURCE_URI_9="https://github.com/rust-lang-nursery/rls/archive/$srcGitRev_9.tar.gz"
CHECKSUM_SHA256_9="5ca89b25cf636b018cb1e9862cf2272e1295874c712db23178e36a3b2dded892"
SOURCE_FILENAME_9="rust-$portVersion-rls-$rlsVersion.tar.gz"
srcGitRev_10="2a2f6d96c8dc578d2474742f14c9bab0b36b0408"
SOURCE_URI_10="https://github.com/rust-lang-nursery/compiler-builtins/archive/$srcGitRev_10.tar.gz"
CHECKSUM_SHA256_10="cebece5392d3990a4ed06af378f1e44daea0c30d1d348d1cefb7dae9a4f56bbb"
SOURCE_FILENAME_10="rust-$portVersion-compiler-builtins-$srcGitRev_10.tar.gz"
srcGitRev_11="dfd960b5f1a1751b22738fa34fd27b583f4618db"
SOURCE_URI_11="https://github.com/rust-lang/compiler-rt/archive/$srcGitRev_11.tar.gz"
CHECKSUM_SHA256_11="7384b3592a4b05857fbf4e54ff5f0ac17bb8bd982b428f348ae2cc4afd9a552c"
SOURCE_FILENAME_11="rust-$portVersion-compiler-rt-$srcGitRev_11.tar.gz"
srcGitRev_12="49279d715bc9bc979313e7c1056ada821ddc3ee2"
SOURCE_URI_12="https://github.com/rust-lang-nursery/rustfmt/archive/$srcGitRev_12.tar.gz"
CHECKSUM_SHA256_12="9708789d175ce1dd43e1623c1373629d26d583022e9e826d768d9270c4304f36"
SOURCE_FILENAME_12="rust-$portVersion-rustfmt-$rustfmtVersion.tar.gz"
srcGitRev_13="f48fed70d4447445b586a35c4ae88683542ffc72"
SOURCE_URI_13="https://github.com/solson/miri/archive/$srcGitRev_13.tar.gz"
CHECKSUM_SHA256_13="7ab3a7345cc98e96a223b92653374fe1cae2c81f90afb745e933f02eacbf7390"
SOURCE_FILENAME_13="rust-$portVersion-miri-$srcGitRev_13.tar.gz"
srcGitRev_14="eebda16e4b45f2eed4310cf7b9872cc752278163"
SOURCE_URI_14="https://github.com/rust-lang/rust-by-example/archive/$srcGitRev_14.tar.gz"
CHECKSUM_SHA256_14="be12b7ba065470a046f7e2ba3f76abd3fd6028b24393eba292d024de8164b630"
SOURCE_FILENAME_14="rust-$portVersion-rust-by-example-$srcGitRev_14.tar.gz"
srcGitRev_15="a19ca1cd91cf97777af8268a6136bd2e4648e189"
SOURCE_URI_15="https://github.com/rust-lang-nursery/stdsimd/archive/$srcGitRev_15.tar.gz"
CHECKSUM_SHA256_15="ddfb9831e8cb439545ce8180a958e57877a0cd9fc3f54305b38679f2b0dd2f68"
SOURCE_FILENAME_15="rust-$portVersion-stdsimd-$srcGitRev_15.tar.gz"
srcGitRev_16="1742229ebb7843a65c05ee495d8de5366fcc5567"
SOURCE_URI_16="https://github.com/rust-lang-nursery/rust-clippy/archive/$srcGitRev_16.tar.gz"
CHECKSUM_SHA256_16="e5b04a1dfeab2d89fc5ee4509711c381bcdca53586b73a999102e14ac8748c23"
SOURCE_FILENAME_16="rust-$portVersion-clippy-$srcGitRev_16.tar.gz"
PATCHES="rust-$portVersion.patchset"
PATCHES_2="rust-llvm-$portVersion.patchset"
ARCHITECTURES="?all !x86_gcc2"
SECONDARY_ARCHITECTURES="?x86"
PROVIDES="
rust$secondaryArchSuffix = $portVersion
cmd:cargo$secondaryArchSuffix = $cargoVersion
cmd:cargo_fmt = $cargoVersion
cmd:rls = $rlsVersion
cmd:rust_gdb = $portVersion
cmd:rust_lldb = $portVersion
cmd:rustc = $portVersion
cmd:rustdoc = $portVersion
cmd:rustfmt = $rustfmtVersion
"
REQUIRES="
haiku$secondaryArchSuffix
lib:libcrypto$secondaryArchSuffix
lib:libcurl$secondaryArchSuffix
lib:libssl$secondaryArchSuffix
lib:libz$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libcurl$secondaryArchSuffix
devel:libssl$secondaryArchSuffix
devel:libz$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:cargo$secondaryArchSuffix == $cargoVersion
cmd:cmake
cmd:cmp
cmd:file
cmd:find
cmd:gcc$secondaryArchSuffix
cmd:git
cmd:grep
cmd:ld$secondaryArchSuffix
cmd:make
cmd:pkg_config$secondaryArchSuffix
cmd:python
cmd:rustc == $portVersion
cmd:sed
cmd:tar
cmd:which
cmd:xargs
"
BUILD()
{
# Set up the source tree with all the proper submodules
rm -rf src/llvm src/tools/rust-installer src/liblibc src/doc/nomicon \
src/tools/cargo src/doc/reference src/doc/book src/tools/rls \
src/libcompiler_builtins src/tools/rustfmt src/tools/miri \
src/doc/rust-by-example src/stdsimd src/tools/clippy
ln -s $sourceDir2/llvm-$srcGitRev_2 src/llvm
ln -s $sourceDir3/rust-installer-$srcGitRev_3 src/tools/rust-installer
ln -s $sourceDir4/libc-$srcGitRev_4 src/liblibc
ln -s $sourceDir5/nomicon-$srcGitRev_5 src/doc/nomicon
ln -s $sourceDir6/cargo-$cargoVersion src/tools/cargo
ln -s $sourceDir7/reference-$srcGitRev_7 src/doc/reference
ln -s $sourceDir8/book-$srcGitRev_8 src/doc/book
ln -s $sourceDir9/rls-$srcGitRev_9 src/tools/rls
ln -s $sourceDir10/compiler-builtins-$srcGitRev_10 src/libcompiler_builtins
rm -rf src/libcompiler_builtins/compiler-rt
ln -s $sourceDir11/compiler-rt-$srcGitRev_11 src/libcompiler_builtins/compiler-rt
ln -s $sourceDir12/rustfmt-$srcGitRev_12 src/tools/rustfmt
ln -s $sourceDir13/miri-$srcGitRev_13 src/tools/miri
ln -s $sourceDir14/rust-by-example-$srcGitRev_14 src/doc/rust-by-example
ln -s $sourceDir15/stdsimd-$srcGitRev_15 src/stdsimd
ln -s $sourceDir16/rust-clippy-$srcGitRev_16 src/tools/clippy
# write the build configuration
tr -d '\t' >config.toml <<- EOL
[llvm]
targets = "X86"
experimental-targets = ""
[build]
cargo = "/$relativeBinDir/cargo"
rustc = "/boot/system/bin/rustc"
submodules = false
extended = true
tools = ["cargo", "rls", "rustfmt", "analysis"]
[install]
prefix = "$prefix"
libdir = "$relativeLibDir"
mandir = "$relativeManDir"
docdir = "$relativeDevelopDocDir"
sysconfdir = "$relativeDataDir"
[rust]
channel = "stable"
use-jemalloc = false
rpath = false
deny-warnings = false
dist-src = false
[dist]
src-tarball = false
EOL
# Disable ASLR: compiling stage 1 rustc requires a lot of RAM (about 1.5
# GB). Haiku has a per-process limit of 2GB on 32 bit systems. ASLR makes
# the available space even smaller. Disabling it will give us the space to
# compile Rust
export DISABLE_ASLR=1
# now build rust and cargo
./x.py dist
}
INSTALL()
{
# we will manually invoke the install scripts
if [ $effectiveTargetArchitecture = x86 ]; then
architecture="i686-unknown-haiku"
fi
if [ $effectiveTargetArchitecture = x86_64 ]; then
architecture="x86_64-unknown-haiku"
fi
# let's install the packages one by one
cd $sourceDir/build/tmp/dist/
for module in "rust-docs-$srcGitRev-$architecture" \
"rust-std-$srcGitRev-$architecture" \
"rustc-$srcGitRev-$architecture" \
"rust-analysis-$srcGitRev-$architecture" \
"cargo-$cargoVersion-$architecture" \
"rls-$rlsVersion-$architecture" \
"rustfmt-$rustfmtVersion-$architecture"
do
./$module/install.sh \
--prefix=$prefix \
--docdir=$developDocDir \
--libdir=$libDir \
--mandir=$manDir \
--sysconfdir=$dataDir \
--disable-ldconfig
done
# move the cargo and binaries (in case of a secondary arch)
if [ -n "$secondaryArchSuffix" ]; then
mkdir -p $binDir
mv $prefix/bin/cargo $binDir/cargo
fi
# remove zsh data, it is not used on Haiku anyway
rm -rf $prefix/share
# move the `rustlib` folder to the developLibDirs (as it is a framework of sorts)
# do create a link in $prefix/lib as that is where rustc expects things to live
# Note; this actually seems to be a bug in the Rust build system. The path
# to rustlib is hardcoded in the rustc binary, but it does allow it to be
# set to libdir_relative (see config.rs in the bootstrap tool). This variable
# is only set when the configure script is used to generate the config, not
# with config.toml
mkdir -p $developLibDir
mv $libDir/rustlib $developLibDir
ln -r -s $developLibDir/rustlib $prefix/lib/rustlib
# clean out unneccesary files created by the rust installer
rm $developLibDir/rustlib/components
rm $developLibDir/rustlib/install.log
rm $developLibDir/rustlib/manifest-*
rm $developLibDir/rustlib/rust-installer-version
rm $developLibDir/rustlib/uninstall.sh
}
TEST()
{
./x.py test
}