aboutsummaryrefslogtreecommitdiffstats
path: root/testing/rust/APKBUILD
blob: abb8f721c4c56be24fe8054fac92219de8f6800e (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
194
195
196
197
198
199
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Contributor: Shiz <hi@shiz.me>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=rust
pkgver=1.16.0
# Git revision of prebuilt Cargo to use for bootstrapping, from src/stage0.txt.
_cargo_gitrev=6e0c18cccc8b0c06fba8a8d76486f81a792fb420
_llvmver=3.9
pkgrel=4
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"
# libffi-dev is needed just because we compile llvm with LLVM_ENABLE_FFI.
makedepends="cmake file libffi-dev llvm$_llvmver-dev python2 tar zlib-dev"
subpackages="$pkgname-dbg $pkgname-stdlib
	$pkgname-gdb::noarch $pkgname-lldb::noarch $pkgname-doc"

# XXX: Rust is self-hosted, so you need rustc to build rustc... The problem is
# that Rust doesn't provide prebuilt rustc for musl yet. Thus we use binaries
# from VoidLinux for now.
# Follow https://github.com/rust-lang/rust/issues/31322.
source="https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.gz
	https://repo.voidlinux.eu/distfiles/rustc-$pkgver-x86_64-unknown-linux-musl.tar.gz
	https://repo.voidlinux.eu/distfiles/rust-std-$pkgver-x86_64-unknown-linux-musl.tar.gz
	cargo-$_cargo_gitrev-x86_64-unknown-linux-musl.tar.gz::https://s3.amazonaws.com/rust-lang-ci/cargo-builds/$_cargo_gitrev/cargo-nightly-x86_64-unknown-linux-musl.tar.gz
	musl-support-dynamic-linking.patch
	musl-fix-static-linking.patch
	musl-fix-linux_musl_base.patch
	musl-fix-jemalloc.patch
	static-pie.patch
	llvm-with-ffi.patch
	alpine-musl-dynamic-linking-by-default.patch
	alpine-allow-crt-static.patch
	alpine-move-py-scripts-to-share.patch
	alpine-change-rpath-to-rustlib.patch
	alpine-force-rpath-on-prefer-dynamic.patch
	check-rustc
	"
builddir="$srcdir/rustc-$pkgver-src"

_ctarget="$CARCH-unknown-linux-musl"
_rlibdir="usr/lib/rustlib/$_ctarget/lib"
_sharedir="usr/share/rust"
_stage0dir="$srcdir/stage0"

ldpath="/$_rlibdir"

prepare() {
	default_prepare

	cd "$builddir"

	local stage0_cargo=$(sed -En 's/^cargo:\s*(\S+)$/\1/p' src/stage0.txt)
	if [ "$_cargo_gitrev" != "$stage0_cargo" ]; then
		error "Update Cargo revision to: $stage0_cargo"; return 1
	fi

	# Don't set wrong LD_LIBRARY_PATH, we will rather set it manually when
	# invoking make.
	sed -i /LD_LIBRARY_PATH/d src/bootstrap/bootstrap.py

	# Remove bundled dependencies.
	rm -Rf src/llvm/ src/jemalloc/

	# Prepare our stage0 for bootstrapping.
	mkdir -p "$_stage0dir"
	cp -flr "$srcdir"/rustc-*$_ctarget/rustc/* \
		"$srcdir"/rust-std-*$_ctarget/rust-std-*/* \
		"$srcdir"/cargo-*$_ctarget/cargo/* \
		"$_stage0dir"/
}

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 \
		--enable-rustbuild \
		--build="$_ctarget" \
		--host="$_ctarget" \
		--target="$_ctarget" \
		--prefix="/usr" \
		--release-channel="stable" \
		--enable-local-rust \
		--local-rust-root="$_stage0dir" \
		--llvm-root="/usr/lib/llvm$_llvmver" \
		--musl-root="/usr" \
		--enable-vendor \
		--enable-llvm-link-shared \
		--disable-jemalloc \
		--disable-docs

	# Set LD_LIBRARY_PATH, so rustc in stage0 can find correct libs.
	make \
		LD_LIBRARY_PATH="$_stage0dir/lib" \
		RUST_BACKTRACE=1 \
		RUST_CRT_STATIC="false" \
		VERBOSE=1
}

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 \
#		VERBOSE=1
}

package() {
	cd "$builddir"

	make install \
		LD_LIBRARY_PATH="$_stage0dir/lib" \
		DESTDIR="$pkgdir"

	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="096b1b7406be9bc61161bb7cdd2061f2bc2174c161a31f4ed6ceecf7fc379f315fc2f7cb9f6c134ea4f8519c27bf6e5a3f712cf1e56d5785831d8c8374eb0ba5  rustc-1.16.0-src.tar.gz
e9b10d58ae5b51b09dd31a1dbf7367917bd40a05ecb4ba3e0e7ac229a0352d3ceb77de80f7c0120f553bd7904644da6bf973dbc32850b12dc91f3974846d4164  rustc-1.16.0-x86_64-unknown-linux-musl.tar.gz
54467213b2824112dec6d5a132ab01d69617a5ccaa9db15e5c8fad55dea5eb31b1b7c9ca07878901d75edd45dc84c726913bf651f3435c480a79703c074b5d90  rust-std-1.16.0-x86_64-unknown-linux-musl.tar.gz
4df33353b6be1af822220ca03f9ec5a3b6421c9b10ec17b864be586ba495c6210bac70d904b0e0b35eff62ef2c9a681ded526e5cbd37e326dc3146742aa659de  cargo-6e0c18cccc8b0c06fba8a8d76486f81a792fb420-x86_64-unknown-linux-musl.tar.gz
b0a8883e4469b60edd150c84486ab950396d757220f97bd271529576614c6c3b49456098507503832c20619d4bd74246dbc99c78116634a68a6df994793e9a94  musl-support-dynamic-linking.patch
7365da739aa03f8b8b3421311b0d4807a2481d38ed259d92f09dd65c831e3e1d25002c012e1c43363fa53462e240b29217e7d429dfa9ae33390e4f7c7cca6227  musl-fix-static-linking.patch
f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  musl-fix-linux_musl_base.patch
c913d04ef419b2b6d8e453f72894070f263c9292abf97114a51884d475d03ce5b032053f1676ba9364800b4b35e394f707995058530ad5e4122c60f65ddd3db7  musl-fix-jemalloc.patch
636eb3e1646c362851dccc850a13aa0911df74981a324738be32b333dfb8782da4ad98d164a34564d66983effaeb5b0b447057d0c974563110fa29df6384a023  static-pie.patch
dc6432293bd060d5e3a73f25870867654fae61995dcd919e244a2dc686b6107556deed8c59ca6002182bfeff5ebc1ca2b89c4028ab0fbfb79e65defe47c9b4b0  llvm-with-ffi.patch
44f3104f506531778fede64034ff5b86f782744d7fed26b393cd88590c22b7fd1df441e2c14bb44c660c54140a4093686aa35f53357f9cd795af6cfa6df1cec4  alpine-musl-dynamic-linking-by-default.patch
b00997c65d1a451fafae8b547893c5cbf03f028d2d70f6971aa670f34c2d6fc82728c740ac4a9909fc1999925ff300e4525cfec745cb9c9521e564eb166872a2  alpine-allow-crt-static.patch
2002faf08cca3be702f25618bc17453c5e76644a6ff6b0739b642c2c0f8536ec7f09c98182aff6b2dcc87c77b0929f2f8f732b8242a8f80d94b3824c8cd0d0fe  alpine-dont-require-filecheck.patch
19cc2725d68db3e359e0e3016028374e5818a97fdba24d0103f7d1706601c8b17c4dd95a3152e64f982f98e95ad3e949acddbea8a39ed0ba8dd4f702acc2704d  alpine-move-py-scripts-to-share.patch
8d6206f8c50856724cf7b4c1854ec82547f040358a1c7d44abeacc27a5c205a963b1fec51e58ec06c68d85bd2f68a9e6e27ebe457f39e8dd043de17758f5063f  alpine-change-rpath-to-rustlib.patch
f230239d8de1b69536353e5735d3bf32f42a2715aefe4863622d9ab2b25d010209ed0bb38976eaa9302bce2eca6bd162abc8cefd71f689b65b3800920a50967b  alpine-force-rpath-on-prefer-dynamic.patch
79549055dea81379c890b495c82456ab497a9179ec6702c59e11d0748bc668f47fc3d6a69c27a0545bb87c01318631dffc69260bf2d4badc75f53cbf7fad7528  check-rustc"