aboutsummaryrefslogtreecommitdiffstats
path: root/testing/rust/APKBUILD
blob: 73b358534ff553f0fa5507f23497443bca243785 (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
# 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.
_cargo_gitrev=f9e54817e53c7b9845cc7c1ede4c11e4d3e42e36  # 0.17.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"
# libffi-dev is needed just because we compile llvm with LLVM_ENABLE_FFI.
makedepends="cmake file libffi-dev libunwind-dev llvm llvm-dev
	musl-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
	dont-require-filecheck.patch
	support-dynamically-linked-musl.patch
	allow-crt-static-on-stable.patch
	static-pie.patch
	fix-linux_musl_base.patch
	llvm-with-ffi.patch
	move-py-scripts-to-share.patch
	change-rpath-to-rustlib.patch
	fix-jemalloc-musl.patch
	"
options="!check"
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"

	# 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 dependency
	rm -Rf src/llvm/

	# 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"

	./configure \
		--enable-rustbuild \
		--build="$_ctarget" \
		--host="$_ctarget" \
		--target="$_ctarget" \
		--prefix="/usr" \
		--release-channel="stable" \
		--enable-local-rust \
		--local-rust-root="$_stage0dir" \
		--llvm-root="/usr" \
		--musl-root="/usr" \
		--enable-vendor \
		--enable-llvm-link-shared \
		--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() {
	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

	# 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
97698f6b9a1eae6e181dc480599095f0aa5fcf85cdc3dc6b5340a20e1e42f585188c06074c1e35cff4393a78c8502c81d8852fcf7da674e0a7313f88155feb56  cargo-f9e54817e53c7b9845cc7c1ede4c11e4d3e42e36-x86_64-unknown-linux-musl.tar.gz
2002faf08cca3be702f25618bc17453c5e76644a6ff6b0739b642c2c0f8536ec7f09c98182aff6b2dcc87c77b0929f2f8f732b8242a8f80d94b3824c8cd0d0fe  dont-require-filecheck.patch
a87ffe129debcb9fa958c6d007ffa4a87927890030e0694ee5ab1929ea0c5a48dad86b4e8b71550dcfeda29b644dbb23d8b232bda62439f198a404cf658c68b0  support-dynamically-linked-musl.patch
57ea7651bc0b0fa5340b9c5de0492ddc8bfaf4f1003298bf27dea57ee562cdd0f3947e091b154388535ce511e001e052f12d48805f7ffece7f04178ad409623f  allow-crt-static-on-stable.patch
541aac679dfdbe5383f884e0493462dd33908308c7b294170b24339d6b9c1e723088c80764125116f24707a67eeeedadceaa9628ca6d2b8c7d0ca9253bf62135  static-pie.patch
f436fddf7ab70ca5f1424081f5b75450270b200b3d997231323863e11addf76e1d65831a7ca09e3a5b7904ce828766c1f70b08326a175890298f28e5bc8646ef  fix-linux_musl_base.patch
37416e1fa0bc0c8651cd060a645d6245ff7e2082279ab5e13495c5ee412c71915469019cfbec95a0fd9a7fc144475079a3ad16f0eba7a2f5c8dd99e0002f3225  llvm-with-ffi.patch
19cc2725d68db3e359e0e3016028374e5818a97fdba24d0103f7d1706601c8b17c4dd95a3152e64f982f98e95ad3e949acddbea8a39ed0ba8dd4f702acc2704d  move-py-scripts-to-share.patch
8d6206f8c50856724cf7b4c1854ec82547f040358a1c7d44abeacc27a5c205a963b1fec51e58ec06c68d85bd2f68a9e6e27ebe457f39e8dd043de17758f5063f  change-rpath-to-rustlib.patch
a330fa913faeadb98cb95e644f434ddef4fbbea32bcd11b6621fb9e08f7b0d8c71fae702207465489af3cf793eade0af694a8c515fc1bed49624da25103a4862  fix-jemalloc-musl.patch"