blob: 0613b9b5647f1bb54734d6d7e93a457c6f286a0e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Shiz <hi@shiz.me>
# Contributor: Jeizsm <jeizsm@gmail.com>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=rust
pkgver=1.24.1
_llvmver=4
_bootver=1.23.0
pkgrel=0
pkgdesc="The Rust Programming Language"
url="http://www.rust-lang.org"
arch="x86_64"
license="Apache-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 llvm$_llvmver-test-utils
python2 tar zlib-dev"
# This is needed for -src that contains some testing binaries.
options="!archcheck"
subpackages="$pkgname-dbg $pkgname-stdlib
$pkgname-gdb::noarch $pkgname-lldb::noarch $pkgname-doc $pkgname-src::noarch"
source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
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
install-template-shebang.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/
# Save untouched sources for packaging in -src subpackage.
cp -a "$builddir"/src "$srcdir"/rust-src
}
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" \
--disable-docs \
--enable-llvm-link-shared \
--enable-option-checking \
--enable-locked-deps \
--enable-vendor \
--disable-jemalloc
RUST_BACKTRACE=1 \
RUSTC_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 \
RUSTC_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 py2-lldb"
mkdir -p "$subpkgdir"
cd "$subpkgdir"
_mv "$pkgdir"/usr/bin/rust-lldb usr/bin/
_mv "$pkgdir"/$_sharedir/etc/lldb_*.py $_sharedir/etc/
}
src() {
pkgdesc="$pkgdesc (source code)"
depends="$pkgname"
license="$license OFL-1.1 GPL-3.0-or-later GPL-3.0-with-GCC-exception CC-BY-SA-3.0 LGPL-3.0"
mkdir -p "$subpkgdir"/usr/src
mv "$srcdir"/rust-src "$subpkgdir"/usr/src/rust
}
_mv() {
local dest; for dest; do true; done # get last argument
mkdir -p "$dest"
mv $@
}
sha512sums="0d99c81b3ca0992af4af0c6a729ada14c24d2563c12a7b0d40c5dfb07e14678b914d4edb003c43d1e53ca68aec199838001ff1652ca6926cbe389a09bcb9c2ed rustc-1.24.1-src.tar.gz
cee98ff6cded8a330e383b8b88423b10b7c2cdcb711b31f4685abae7a60f85869e87f3096eb2d90a83dafeeba98b6f153b5e67d88f5cacc368dc53c701fe495b musl-fix-static-linking.patch
360b0c1b6374cb356989b6f254da2dfc2ab2390c8251f0151492206b908ebf85c6ff57405394b3f46f1fc3e26f7c986bb9e924065f4c4dfa1d50fff2a99b5cd0 musl-fix-linux_musl_base.patch
dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0 llvm-with-ffi.patch
936ddccb357307b3f7f3c10aadcdc3dfbbe0ccb8cc5675969a87b7cf1a8e72f73ed5118c6cd6a1a36a377457ead998cc8c71f4176361acb4416ec16673b4c597 static-pie.patch
b5c8a4faf3571b5c79b052103639ea3b14f094ec0999963602111608afa1159219f958decf0b45dd409124b318f5e17af47b4e74207a9f1c9648a9572dc68cca need-rpath.patch
d352614e7c774e181decae210140e789de7fc090327ff371981ad28a11ce51c8c01b27c1101a24bb84d75ed2f706f67868f7dbc52196d4ccdf4ebd2d6d6b6b5e minimize-rpath.patch
498f4649163974afc4f042c43cd0c15d36784031514201a2962061f288a9336c2bc9749f8d2308b8ce3656f8097b5fc5bef505f61e2a6ed422ef4153f5339d77 alpine-move-py-scripts-to-share.patch
0542e8ffeb7ff6017aeec84d99c14802c6536433b41dafe7c8fc0c40908548228f34ef142ad6ad94235115b05f02ce157553b470b0f242292f90f3125b249e94 alpine-change-rpath-to-rustlib.patch
9b451a7c4a761ff7e5f269cd5f84e59afbaedc8ef5d1d053cd3e315ce8d99f1a25fa7291e5dacb3cfbac32b4d15518a616bd703ab28844484285929e71dd2720 alpine-target.patch
7d59258d4462eba0207739a5c0c8baf1f19d9a396e5547bb4d59d700eb94d50ba6add2e523f3e94e29e993821018594625ea4ac86304fb58f7f8c82622a26ab0 install-template-shebang.patch
79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528 check-rustc"
|