Compare commits
229 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5387107af | ||
|
|
505ba7a172 | ||
|
|
d464b3971e | ||
|
|
2973190c5c | ||
|
|
5c0fb2e6ed | ||
|
|
fe8cd1cd26 | ||
|
|
e487df7af6 | ||
|
|
57de9b5600 | ||
|
|
699f625a52 | ||
|
|
27d1887a1c | ||
|
|
7d53935f42 | ||
|
|
3898e8eef5 | ||
|
|
fd46706b70 | ||
|
|
46194288a2 | ||
|
|
02db49040f | ||
|
|
dd82264588 | ||
|
|
afb78a3088 | ||
|
|
94c31284cf | ||
|
|
1f86681678 | ||
|
|
02de815dfa | ||
|
|
2985fc9b12 | ||
|
|
b7b1b49752 | ||
|
|
7af0a17723 | ||
|
|
15dc2a986e | ||
|
|
38ba7ccf2e | ||
|
|
41c07421fc | ||
|
|
84d9d2da0a | ||
|
|
1f18869377 | ||
|
|
65ae954a80 | ||
|
|
0340c31a42 | ||
|
|
d364837120 | ||
|
|
43c139f131 | ||
|
|
487e670b9b | ||
|
|
6083dff0b6 | ||
|
|
03496f658f | ||
|
|
9da0d2f687 | ||
|
|
846454281e | ||
|
|
21224d76a0 | ||
|
|
06cc11b2b4 | ||
|
|
1d0e0e8343 | ||
|
|
634498e0ac | ||
|
|
ba428c19bf | ||
|
|
972fbd4582 | ||
|
|
5983744d01 | ||
|
|
95fa6c92a9 | ||
|
|
e414321228 | ||
|
|
07069a1869 | ||
|
|
5985331f33 | ||
|
|
98472fd232 | ||
|
|
f87bb05414 | ||
|
|
2ffd11b9fe | ||
|
|
1bf70b13a7 | ||
|
|
20ac8ea888 | ||
|
|
a387a5fe8f | ||
|
|
689dfe8004 | ||
|
|
864fe95722 | ||
|
|
168396820d | ||
|
|
c9a4db15ea | ||
|
|
3d70f56ae7 | ||
|
|
f4573d9c44 | ||
|
|
c72c88be92 | ||
|
|
7d6fede8ef | ||
|
|
311ea03c1f | ||
|
|
61093e260f | ||
|
|
dfa7dc1bad | ||
|
|
5afc0cc471 | ||
|
|
4e1bda643e | ||
|
|
c98312fd1d | ||
|
|
f366cff864 | ||
|
|
0827bc626b | ||
|
|
b828ccaefe | ||
|
|
19cdae76b8 | ||
|
|
87f67e6d86 | ||
|
|
f748246cae | ||
|
|
d91d726db6 | ||
|
|
957ede76f8 | ||
|
|
5d60f12957 | ||
|
|
0b6b45fbca | ||
|
|
7645b9b331 | ||
|
|
0c266200ad | ||
|
|
d2373244b8 | ||
|
|
0530d30808 | ||
|
|
e4d37ce4f1 | ||
|
|
82bf763c76 | ||
|
|
489fe195e0 | ||
|
|
ed62ea5176 | ||
|
|
8673659f6a | ||
|
|
75f4549859 | ||
|
|
91319e80f8 | ||
|
|
d0663639a0 | ||
|
|
3b28ddab2b | ||
|
|
404cbe3dcc | ||
|
|
ea888066a3 | ||
|
|
e0e7b6cefe | ||
|
|
ae7122c7e6 | ||
|
|
ce9949725c | ||
|
|
bef7c3f07e | ||
|
|
8f809476c0 | ||
|
|
ea040ab01d | ||
|
|
101e818ec5 | ||
|
|
6db046c19d | ||
|
|
e77fbb7f08 | ||
|
|
a97f66224a | ||
|
|
2536080e0b | ||
|
|
1f903865b4 | ||
|
|
7f7b3cd652 | ||
|
|
a1ca1ed06d | ||
|
|
c5b53736b7 | ||
|
|
d716587c26 | ||
|
|
1622af812d | ||
|
|
52cbdd3b24 | ||
|
|
a2c1575132 | ||
|
|
8262f3ac0f | ||
|
|
bf2c4ada41 | ||
|
|
39fd00119c | ||
|
|
1436b99692 | ||
|
|
3b954b38d1 | ||
|
|
41800bdd99 | ||
|
|
9b8d884d6b | ||
|
|
45d540de36 | ||
|
|
1cb0b64537 | ||
|
|
4eb46035c5 | ||
|
|
a78d470ed2 | ||
|
|
237a22fd17 | ||
|
|
e47bf14904 | ||
|
|
79166b9cf0 | ||
|
|
34f213d162 | ||
|
|
2247ad36aa | ||
|
|
fbf59ed6a0 | ||
|
|
e87b2d43b0 | ||
|
|
f31f0c2257 | ||
|
|
1059968d25 | ||
|
|
cb753fc536 | ||
|
|
6902ea276a | ||
|
|
8af5d4f7e9 | ||
|
|
08ac2819f8 | ||
|
|
f89057c0af | ||
|
|
0c54b5727f | ||
|
|
11f0c95763 | ||
|
|
c6ea2fe285 | ||
|
|
c8e2b6166e | ||
|
|
56ac849771 | ||
|
|
df07899855 | ||
|
|
f6c7789c95 | ||
|
|
e2d09d0362 | ||
|
|
e3140137e5 | ||
|
|
d320edc05f | ||
|
|
00429e037b | ||
|
|
da71abbef1 | ||
|
|
12725a2247 | ||
|
|
8d6c809833 | ||
|
|
cc5832d4be | ||
|
|
c4a8abed21 | ||
|
|
62b3ed7895 | ||
|
|
c5978989a7 | ||
|
|
21c12a3c3b | ||
|
|
9864e47b14 | ||
|
|
44bc6fd31f | ||
|
|
5eeb74ed5e | ||
|
|
1df6619559 | ||
|
|
02962e7c70 | ||
|
|
0a1d85272d | ||
|
|
3d0fab8860 | ||
|
|
b708837c7c | ||
|
|
ec3cbddb38 | ||
|
|
af571adabe | ||
|
|
b2e6f98f3e | ||
|
|
15bb60780a | ||
|
|
344fd5eec5 | ||
|
|
8dae8b4f85 | ||
|
|
487205331b | ||
|
|
64074c9e55 | ||
|
|
7c494d94f0 | ||
|
|
03b4c9086e | ||
|
|
7519c8a6b3 | ||
|
|
01f7eb256b | ||
|
|
b139bbc514 | ||
|
|
0992dbb4bc | ||
|
|
210642776c | ||
|
|
46cb45b44d | ||
|
|
e83b706e8e | ||
|
|
1f42bdc679 | ||
|
|
fc9645c15b | ||
|
|
69dd8a8ee3 | ||
|
|
1878ee9a1e | ||
|
|
095b0be0a6 | ||
|
|
8ceb6a47d5 | ||
|
|
2814eb8764 | ||
|
|
a67fbf2223 | ||
|
|
49d94ef0a7 | ||
|
|
d947c2e40e | ||
|
|
85471f88e5 | ||
|
|
d3ee1e59b6 | ||
|
|
1b78a65885 | ||
|
|
310cc353a1 | ||
|
|
5b451ec4af | ||
|
|
27ff9aea20 | ||
|
|
1f17e68d1e | ||
|
|
243fdbd72d | ||
|
|
4e6b8b4eca | ||
|
|
498ad2a6b9 | ||
|
|
8e0b263733 | ||
|
|
395cde5819 | ||
|
|
75c20f0bbc | ||
|
|
7b05b9c7f0 | ||
|
|
a74985c341 | ||
|
|
18c946267e | ||
|
|
9a0ea9bf40 | ||
|
|
8fe8fc5b7b | ||
|
|
d477a68dba | ||
|
|
fe8b755da0 | ||
|
|
825bf74a2e | ||
|
|
5ced950596 | ||
|
|
b13e266124 | ||
|
|
ba16b5c39e | ||
|
|
2fb76952f7 | ||
|
|
0fb90a149c | ||
|
|
95af734ac1 | ||
|
|
8f25a92000 | ||
|
|
91b165427c | ||
|
|
5f701adec8 | ||
|
|
8982df0b5c | ||
|
|
d749cbb98a | ||
|
|
f13ac9d48a | ||
|
|
61d0ab2b9e | ||
|
|
a8cd882676 | ||
|
|
a5bb44819d | ||
|
|
66c8aef3f2 | ||
|
|
347947db41 |
9
.github/ISSUE_TEMPLATE.md
vendored
Normal file
9
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
## Version(s) of meta-rust
|
||||
|
||||
## Version(s) of poky and/or oe-core
|
||||
|
||||
## Expected result
|
||||
|
||||
## Actual result
|
||||
|
||||
## Steps to reproduce
|
||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
*.pyc
|
||||
build/
|
||||
poky/
|
||||
15
Jenkinsfile
vendored
15
Jenkinsfile
vendored
@@ -8,23 +8,26 @@ for (int i = 0; i < targets.size(); i++) {
|
||||
machine_builds["$machine"] = {
|
||||
node {
|
||||
try {
|
||||
stage('Checkout') {
|
||||
stage("checkout $machine") {
|
||||
checkout scm
|
||||
}
|
||||
stage('Setup Environment') {
|
||||
stage("setup-env $machine") {
|
||||
sh "./scripts/setup-env.sh"
|
||||
}
|
||||
stage('Yocto Fetch') {
|
||||
sh "GIT_LOCAL_REF_DIR=/srv/git-cache/ ./scripts/fetch.sh jethro"
|
||||
stage("fetch $machine") {
|
||||
sh "GIT_LOCAL_REF_DIR=/srv/git-cache/ ./scripts/fetch.sh morty"
|
||||
}
|
||||
stage('Build') {
|
||||
stage("build $machine") {
|
||||
sh "MACHINE=${machine} ./scripts/build.sh"
|
||||
}
|
||||
} catch (e) {
|
||||
echo "Caught: ${e}"
|
||||
throw e
|
||||
} finally {
|
||||
stage('Cleanup Environment') {
|
||||
stage("push build cache $machine") {
|
||||
sh "./scripts/publish-build-cache.sh morty"
|
||||
}
|
||||
stage("cleanup $machine") {
|
||||
sh "./scripts/cleanup-env.sh"
|
||||
deleteDir()
|
||||
}
|
||||
|
||||
58
README.md
58
README.md
@@ -5,55 +5,51 @@ This OpenEmbedded layer provides the rust compiler, tools for building packages
|
||||
|
||||
## What works:
|
||||
|
||||
- MACHINE="beaglebone" (TARGET_SYS=arm-poky-linux-gnueabi)
|
||||
- Building rust-native, rust-cross, rust-hello-world, cargo-native
|
||||
- Running/using all of these (including rust-hello-world)
|
||||
- Building `rust-native` and `cargo-native`
|
||||
- Building Rust based projects with Cargo for the TARGET
|
||||
- e.g. `rustfmt` which is used by the CI system
|
||||
- `-buildsdk` and `-crosssdk` packages
|
||||
|
||||
## What doesn't:
|
||||
|
||||
- Probably some of the untested things
|
||||
- Using anything but x86_64 as the build environment
|
||||
- rust (built for target) issue #81
|
||||
|
||||
## What's untested:
|
||||
|
||||
- rust (built for target)
|
||||
- Other TARGETs
|
||||
- cargo (built for target)
|
||||
|
||||
## Common issues when packaging things using cargo
|
||||
## Building a rust package
|
||||
|
||||
You may run into errors similar to:
|
||||
When building a rust package in bitbake, it's usually easiest to build with
|
||||
cargo using cargo.bbclass. If the package already has a Cargo.toml file (most
|
||||
rust packages do), then it's especially easy. Otherwise you should probably
|
||||
get the code building in cargo first.
|
||||
|
||||
```
|
||||
| src/lib.rs:12:1: 12:35 error: can't find crate for `ffi`
|
||||
| src/lib.rs:12 extern crate "openssl-sys" as ffi;
|
||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
```
|
||||
Once your package builds in cargo, you can use
|
||||
[cargo-bitbake](https://github.com/cardoe/cargo-bitbake) to generate a bitbake
|
||||
recipe for it. This allows bitbake to fetch all the necessary dependent
|
||||
crates, as well as a pegged version of the crates.io index, to ensure maximum
|
||||
reproducibility.
|
||||
|
||||
Where a "-sys" crate (or other crate) is not found. These are typically caused
|
||||
by a crate's Cargo.toml including triplet-specific dependencies and then using
|
||||
the crate based on a feature (most often, `#[cfg(unix)]`). Until cargo and it's
|
||||
ecosystem get their act together, you'll need to supply patches to the
|
||||
misbehaving packages. See `recipies/cargo/cargo_*.bb` for an example of how to
|
||||
do this.
|
||||
NOTE: You will have to edit the generated recipe based on the comments
|
||||
contained within it
|
||||
|
||||
## TODO
|
||||
|
||||
- -crosssdk and -buildsdk packages
|
||||
- Upstream local rustc patches for libdir and bindir support
|
||||
- add bitbake fetch support for crates.io
|
||||
- add required cargo package registry clones in SRC_URI to prevent the need
|
||||
for network when building.
|
||||
|
||||
## Pitfalls
|
||||
|
||||
- TARGET_SYS _must_ be different from BUILD_SYS. This is due to the way configuration options are tracked for different targets.
|
||||
- TARGET_SYS _must_ be different from BUILD_SYS. This is due to the way Rust configuration options are tracked for different targets. This is the reason we use the Yocto triples instead of the native Rust triples. See rust-lang/cargo#3349.
|
||||
|
||||
## Dependencies
|
||||
|
||||
On the host:
|
||||
unknown
|
||||
- Any `-sys` packages your project might need must have RDEPENDs for
|
||||
the native library.
|
||||
|
||||
On the target:
|
||||
unknown
|
||||
- Any `-sys` packages your project might need must have RDEPENDs for
|
||||
the native library.
|
||||
|
||||
## Maintainer(s) & Patch policy
|
||||
|
||||
@@ -61,6 +57,12 @@ Open a Pull Request.
|
||||
|
||||
The master branch supports the latest master of poky. When poky creates releases, we will create a branch with the same name as the poky release. This release branch should always work with that poky release. Note that these release branches will typically be less tested than the master branch.
|
||||
|
||||
All new patches against rust, rust-llvm, and cargo must have referenced
|
||||
upstream issues or PRs opened or an explanation why the patch cannot be
|
||||
upstreamed. This cooresponds to the OpenEmbedded policy for other meta layers.
|
||||
|
||||
More info can be seen on the wiki.
|
||||
|
||||
## Copyright
|
||||
|
||||
MIT OR Apache-2.0 - Same as rust
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
inherit rust
|
||||
# add crate fetch support
|
||||
inherit crate-fetch
|
||||
inherit rust-common
|
||||
|
||||
CARGO ?= "cargo"
|
||||
# the binary we will use
|
||||
CARGO = "cargo"
|
||||
|
||||
# Where we download our registry and dependencies to
|
||||
export CARGO_HOME = "${WORKDIR}/cargo_home"
|
||||
|
||||
def cargo_base_dep(d):
|
||||
deps = ""
|
||||
if not d.getVar('INHIBIT_DEFAULT_DEPS', True) and not d.getVar('INHIBIT_CARGO_DEP', True):
|
||||
deps += " cargo-native"
|
||||
return deps
|
||||
# We need cargo to compile for the target
|
||||
BASEDEPENDS_append = " cargo-native"
|
||||
|
||||
BASEDEPENDS_append = " ${@cargo_base_dep(d)}"
|
||||
# Ensure we get the right rust variant
|
||||
DEPENDS_append_class-target = " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}"
|
||||
DEPENDS_append_class-native = " rust-native"
|
||||
|
||||
# Cargo only supports in-tree builds at the moment
|
||||
B = "${S}"
|
||||
@@ -23,82 +27,75 @@ export RUST_BACKTRACE = "1"
|
||||
# for cross compilation, so tell it we know better than it.
|
||||
export PKG_CONFIG_ALLOW_CROSS = "1"
|
||||
|
||||
EXTRA_OECARGO_PATHS ??= ""
|
||||
|
||||
cargo_do_configure () {
|
||||
# FIXME: we currently make a mess in the directory above us
|
||||
# (${WORKDIR}), which may not be ideal. Look into whether this is
|
||||
# allowed
|
||||
mkdir -p ../.cargo
|
||||
# NOTE: we cannot pass more flags via this interface, the 'linker' is
|
||||
# assumed to be a path to a binary. If flags are needed, a wrapper must
|
||||
# be used.
|
||||
echo "paths = [" >../.cargo/config
|
||||
mkdir -p ${CARGO_HOME}
|
||||
echo "paths = [" > ${CARGO_HOME}/config
|
||||
|
||||
for p in ${EXTRA_OECARGO_PATHS}; do
|
||||
printf "\"%s\"\n" "$p"
|
||||
done | sed -e 's/$/,/' >>../.cargo/config
|
||||
echo "]" >>../.cargo/config
|
||||
done | sed -e 's/$/,/' >> ${CARGO_HOME}/config
|
||||
echo "]" >> ${CARGO_HOME}/config
|
||||
|
||||
# Point cargo at our local mirror of the registry
|
||||
cat <<- EOF >> ${CARGO_HOME}/config
|
||||
[source.bitbake]
|
||||
directory = "${CARGO_HOME}/bitbake"
|
||||
|
||||
[source.crates-io]
|
||||
replace-with = "bitbake"
|
||||
local-registry = "/nonexistant"
|
||||
EOF
|
||||
|
||||
echo "[target.${HOST_SYS}]" >> ${CARGO_HOME}/config
|
||||
echo "linker = '${RUST_TARGET_CCLD}'" >> ${CARGO_HOME}/config
|
||||
if [ "${HOST_SYS}" != "${BUILD_SYS}" ]; then
|
||||
echo "[target.${BUILD_SYS}]" >> ${CARGO_HOME}/config
|
||||
echo "linker = '${RUST_BUILD_CCLD}'" >> ${CARGO_HOME}/config
|
||||
fi
|
||||
}
|
||||
|
||||
rust_cargo_patch () {
|
||||
# FIXME: if there is already an entry for this target, in an existing
|
||||
# cargo/config, this won't work.
|
||||
cd "${S}"
|
||||
cat >>Cargo.toml <<EOF
|
||||
[profile.dev]
|
||||
rpath = true
|
||||
[profile.release]
|
||||
rpath = true
|
||||
EOF
|
||||
}
|
||||
|
||||
# All the rust & cargo ecosystem assume that CC, LD, etc are a path to a single
|
||||
# command. Fixup the ones we give it so that is the case.
|
||||
# XXX: this is hard coded based on meta/conf/bitbake.conf
|
||||
# TODO: we do quite a bit very similar to this in rust.inc, see if it can be
|
||||
# generalized.
|
||||
export RUST_CC = "${CCACHE}${HOST_PREFIX}gcc"
|
||||
export RUST_CFLAGS = "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${CFLAGS}"
|
||||
export RUST_BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc"
|
||||
export RUST_BUILD_CFLAGS = "${BUILD_CC_ARCH} ${BUILD_CFLAGS}"
|
||||
|
||||
export CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release"
|
||||
RUSTFLAGS ??= ""
|
||||
CARGO_BUILD_FLAGS = "-v --target ${HOST_SYS} --release"
|
||||
|
||||
# This is based on the content of CARGO_BUILD_FLAGS and generally will need to
|
||||
# change if CARGO_BUILD_FLAGS changes.
|
||||
export CARGO_TARGET_SUBDIR="${HOST_SYS}/release"
|
||||
CARGO_TARGET_SUBDIR="${HOST_SYS}/release"
|
||||
oe_cargo_build () {
|
||||
echo "cargo: $(which cargo)"
|
||||
echo "rustc: $(which rustc)"
|
||||
bbnote ${CARGO} build ${CARGO_BUILD_FLAGS} "$@"
|
||||
export RUSTFLAGS="${RUSTFLAGS}"
|
||||
bbnote "cargo = $(which cargo)"
|
||||
bbnote "rustc = $(which rustc)"
|
||||
bbnote "${CARGO} build ${CARGO_BUILD_FLAGS} $@"
|
||||
"${CARGO}" build ${CARGO_BUILD_FLAGS} "$@"
|
||||
}
|
||||
|
||||
oe_cargo_fix_env () {
|
||||
export CC="${RUST_CC}"
|
||||
export CFLAGS="${RUST_CFLAGS}"
|
||||
export CC="${RUST_TARGET_CC}"
|
||||
export CFLAGS="${CFLAGS}"
|
||||
export AR="${AR}"
|
||||
export TARGET_CC="${RUST_CC}"
|
||||
export TARGET_CFLAGS="${RUST_CFLAGS}"
|
||||
export TARGET_CC="${RUST_TARGET_CC}"
|
||||
export TARGET_CFLAGS="${CFLAGS}"
|
||||
export TARGET_AR="${AR}"
|
||||
export HOST_CC="${RUST_BUILD_CC}"
|
||||
export HOST_CFLAGS="${RUST_BUILD_CFLAGS}"
|
||||
export HOST_CFLAGS="${BUILD_CFLAGS}"
|
||||
export HOST_AR="${BUILD_AR}"
|
||||
}
|
||||
|
||||
EXTRA_OECARGO_PATHS ??= ""
|
||||
|
||||
cargo_do_compile () {
|
||||
cd "${B}"
|
||||
oe_cargo_fix_env
|
||||
oe_cargo_build
|
||||
}
|
||||
|
||||
# All but the most simple projects will need to override this.
|
||||
cargo_do_install () {
|
||||
local have_installed=false
|
||||
install -d "${D}${bindir}"
|
||||
for tgt in "${B}/target/${CARGO_TARGET_SUBDIR}/"*; do
|
||||
if [ -f "$tgt" ] && [ -x "$tgt" ]; then
|
||||
if [[ $tgt == *.so || $tgt == *.rlib ]]; then
|
||||
install -d "${D}${rustlibdir}"
|
||||
install -m755 "$tgt" "${D}${rustlibdir}"
|
||||
have_installed=true
|
||||
elif [ -f "$tgt" ] && [ -x "$tgt" ]; then
|
||||
install -d "${D}${bindir}"
|
||||
install -m755 "$tgt" "${D}${bindir}"
|
||||
have_installed=true
|
||||
fi
|
||||
@@ -108,4 +105,4 @@ cargo_do_install () {
|
||||
fi
|
||||
}
|
||||
|
||||
EXPORT_FUNCTIONS do_compile do_install do_configure
|
||||
EXPORT_FUNCTIONS do_configure do_compile do_install
|
||||
|
||||
13
classes/crate-fetch.bbclass
Normal file
13
classes/crate-fetch.bbclass
Normal file
@@ -0,0 +1,13 @@
|
||||
#
|
||||
# crate-fetch class
|
||||
#
|
||||
# Registers 'crate' method for Bitbake fetch2.
|
||||
#
|
||||
# Adds support for following format in recipe SRC_URI:
|
||||
# crate://<packagename>/<version>
|
||||
#
|
||||
|
||||
python () {
|
||||
import crate
|
||||
bb.fetch2.methods.append( crate.Crate() )
|
||||
}
|
||||
@@ -1,15 +1,9 @@
|
||||
inherit rust
|
||||
|
||||
RUSTLIB_DEP ?= " rustlib"
|
||||
DEPENDS .= "${RUSTLIB_DEP}"
|
||||
RDEPENDS_${PN} .= "${RUSTLIB_DEP}"
|
||||
DEPENDS += "patchelf-native"
|
||||
|
||||
export rustlibdir = "${libdir}/rust"
|
||||
FILES_${PN} += "${rustlibdir}/*.so"
|
||||
FILES_${PN}-dev += "${rustlibdir}/*.rlib"
|
||||
FILES_${PN}-dbg += "${rustlibdir}/.debug"
|
||||
DEPENDS_append = " patchelf-native"
|
||||
RDEPENDS_${PN} += "${RUSTLIB_DEP}"
|
||||
|
||||
RUSTFLAGS += "-C crate_hash=${BB_TASKHASH}"
|
||||
RUSTC_ARCHFLAGS += "-C opt-level=3 -g -L ${STAGING_DIR_HOST}/${rustlibdir}"
|
||||
EXTRA_OEMAKE += 'RUSTC_ARCHFLAGS="${RUSTC_ARCHFLAGS}"'
|
||||
|
||||
@@ -34,13 +28,9 @@ OVERLAP_DEPS = "${@get_overlap_deps(d)}"
|
||||
|
||||
# Prevents multiple static copies of standard library modules
|
||||
# See https://github.com/rust-lang/rust/issues/19680
|
||||
RUSTC_FLAGS += "-C prefer-dynamic"
|
||||
RUSTC_PREFER_DYNAMIC = "-C prefer-dynamic"
|
||||
RUSTC_FLAGS += "${RUSTC_PREFER_DYNAMIC}"
|
||||
|
||||
rustlib_suffix="${TUNE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/rustlib/${HOST_SYS}/lib"
|
||||
# Native sysroot standard library path
|
||||
rustlib_src="${prefix}/lib/${rustlib_suffix}"
|
||||
# Host sysroot standard library path
|
||||
rustlib="${libdir}/${rustlib_suffix}"
|
||||
CRATE_NAME ?= "${@d.getVar('BPN', True).replace('-rs', '').replace('-', '_')}"
|
||||
BINNAME ?= "${BPN}"
|
||||
LIBNAME ?= "lib${CRATE_NAME}-rs"
|
||||
@@ -66,6 +56,11 @@ get_overlap_externs () {
|
||||
do_configure () {
|
||||
}
|
||||
|
||||
oe_runrustc () {
|
||||
bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
|
||||
"${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
|
||||
}
|
||||
|
||||
oe_compile_rust_lib () {
|
||||
[ "${CRATE_TYPE}" == "dylib" ] && suffix=so || suffix=rlib
|
||||
rm -rf ${LIBNAME}.{rlib,so}
|
||||
@@ -114,5 +109,5 @@ do_rust_bin_fixups() {
|
||||
patchelf --set-rpath '$ORIGIN:'${rustlibdir}:${rustlib} "$f"
|
||||
done
|
||||
}
|
||||
|
||||
PACKAGE_PREPROCESS_FUNCS += "do_rust_bin_fixups"
|
||||
|
||||
|
||||
116
classes/rust-common.bbclass
Normal file
116
classes/rust-common.bbclass
Normal file
@@ -0,0 +1,116 @@
|
||||
# Common variables used by all Rust builds
|
||||
export rustlibdir = "${libdir}/rust"
|
||||
FILES_${PN} += "${rustlibdir}/*.so"
|
||||
FILES_${PN}-dev += "${rustlibdir}/*.rlib"
|
||||
FILES_${PN}-dbg += "${rustlibdir}/.debug"
|
||||
|
||||
RUSTLIB = "-L ${STAGING_LIBDIR}/rust"
|
||||
RUSTFLAGS += "-C rpath ${RUSTLIB}"
|
||||
RUSTLIB_DEP ?= "libstd-rs"
|
||||
|
||||
# Responsible for taking Yocto triples and converting it to Rust triples
|
||||
|
||||
def rust_base_triple(d, thing):
|
||||
'''
|
||||
Mangle bitbake's *_SYS into something that rust might support (see
|
||||
rust/mk/cfg/* for a list)
|
||||
|
||||
Note that os is assumed to be some linux form
|
||||
'''
|
||||
|
||||
arch = d.getVar('{}_ARCH'.format(thing), True)
|
||||
# All the Yocto targets are Linux and are 'unknown'
|
||||
vendor = "-unknown"
|
||||
os = d.getVar('{}_OS'.format(thing), True)
|
||||
libc = d.getVar('TCLIBC', True)
|
||||
|
||||
# Prefix with a dash and convert glibc -> gnu
|
||||
if libc == "glibc":
|
||||
libc = "-gnu"
|
||||
elif libc == "musl":
|
||||
libc = "-musl"
|
||||
|
||||
# Don't double up musl (only appears to be the case on aarch64)
|
||||
if os == "linux-musl":
|
||||
if libc != "-musl":
|
||||
bb.fatal("{}_OS was '{}' but TCLIBC was not 'musl'".format(thing, os))
|
||||
os = "linux"
|
||||
|
||||
# This catches ARM targets and appends the necessary hard float bits
|
||||
if os == "linux-gnueabi" or os == "linux-musleabi":
|
||||
libc = bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hf', '', d)
|
||||
return arch + vendor + '-' + os + libc
|
||||
|
||||
# Naming explanation
|
||||
# Yocto
|
||||
# - BUILD_SYS - Yocto triple of the build environment
|
||||
# - HOST_SYS - What we're building for in Yocto
|
||||
# - TARGET_SYS - What we're building for in Yocto
|
||||
#
|
||||
# So when building '-native' packages BUILD_SYS == HOST_SYS == TARGET_SYS
|
||||
# When building packages for the image HOST_SYS == TARGET_SYS
|
||||
# This is a gross over simplification as there are other modes but
|
||||
# currently this is all that's supported.
|
||||
#
|
||||
# Rust
|
||||
# - TARGET - the system where the binary will run
|
||||
# - HOST - the system where the binary is being built
|
||||
#
|
||||
# Rust additionally will use two additional cases:
|
||||
# - undecorated (e.g. CC) - equivalent to TARGET
|
||||
# - triple suffix (e.g. CC_x86_64_unknown_linux_gnu) - both
|
||||
# see: https://github.com/alexcrichton/gcc-rs
|
||||
# The way that Rust's internal triples and Yocto triples are mapped together
|
||||
# its likely best to not use the triple suffix due to potential confusion.
|
||||
|
||||
RUST_BUILD_SYS = "${@rust_base_triple(d, 'BUILD')}"
|
||||
RUST_HOST_SYS = "${@rust_base_triple(d, 'HOST')}"
|
||||
RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
|
||||
|
||||
# wrappers to get around the fact that Rust needs a single
|
||||
# binary but Yocto's compiler and linker commands have
|
||||
# arguments. Technically the archiver is always one command but
|
||||
# this is necessary for builds that determine the prefix and then
|
||||
# use those commands based on the prefix.
|
||||
WRAPPER_DIR = "${WORKDIR}/wrapper"
|
||||
RUST_BUILD_CC = "${WRAPPER_DIR}/build-rust-cc"
|
||||
RUST_BUILD_CCLD = "${WRAPPER_DIR}/build-rust-ccld"
|
||||
RUST_BUILD_AR = "${WRAPPER_DIR}/build-rust-ar"
|
||||
RUST_TARGET_CC = "${WRAPPER_DIR}/target-rust-cc"
|
||||
RUST_TARGET_CCLD = "${WRAPPER_DIR}/target-rust-ccld"
|
||||
RUST_TARGET_AR = "${WRAPPER_DIR}/target-rust-ar"
|
||||
|
||||
create_wrapper () {
|
||||
file="$1"
|
||||
shift
|
||||
|
||||
cat <<- EOF > "${file}"
|
||||
#!/bin/sh
|
||||
$@ "\$@"
|
||||
EOF
|
||||
chmod +x "${file}"
|
||||
}
|
||||
|
||||
# compiler is used by gcc-rs
|
||||
# linker is used by rustc/cargo
|
||||
# archiver is used by the build of libstd-rs
|
||||
do_rust_create_wrappers () {
|
||||
mkdir -p "${WRAPPER_DIR}"
|
||||
|
||||
# Yocto Build / Rust Host compiler
|
||||
create_wrapper "${RUST_BUILD_CC}" "${BUILD_CC}"
|
||||
# Yocto Build / Rust Host linker
|
||||
create_wrapper "${RUST_BUILD_CCLD}" "${BUILD_CCLD}" "${BUILD_LDFLAGS}"
|
||||
# Yocto Build / Rust Host archiver
|
||||
create_wrapper "${RUST_BUILD_AR}" "${BUILD_AR}"
|
||||
|
||||
# Yocto Target / Rust Target compiler
|
||||
create_wrapper "${RUST_TARGET_CC}" "${CC}"
|
||||
# Yocto Target / Rust Target linker
|
||||
create_wrapper "${RUST_TARGET_CCLD}" "${CCLD}" "${LDFLAGS}"
|
||||
# Yocto Target / Rust Target archiver
|
||||
create_wrapper "${RUST_TARGET_AR}" "${AR}"
|
||||
}
|
||||
|
||||
addtask rust_create_wrappers before do_configure after do_patch
|
||||
do_rust_create_wrappers[dirs] += "${WRAPPER_DIR}"
|
||||
@@ -1,15 +0,0 @@
|
||||
# Rust installer isn't very nice and drops a bunch of junk in our filesystem,
|
||||
# clean it up after the install.
|
||||
|
||||
rust_installer_do_install () {
|
||||
rm ${D}/${libdir}/rustlib/install.log
|
||||
rm ${D}/${libdir}/rustlib/rust-installer-version
|
||||
rm ${D}/${libdir}/rustlib/uninstall.sh
|
||||
rm ${D}/${libdir}/rustlib/components
|
||||
}
|
||||
|
||||
do_install_append () {
|
||||
rust_installer_do_install
|
||||
}
|
||||
|
||||
EXPORT_FUNCTIONS rust_installer_do_install
|
||||
@@ -1,7 +1,8 @@
|
||||
inherit rust-common
|
||||
|
||||
RUSTC = "rustc"
|
||||
|
||||
# FIXME: --sysroot might be needed
|
||||
RUSTC_ARCHFLAGS += "--target=${TARGET_SYS} -C rpath -C crate_hash=${BB_TASKHASH}"
|
||||
RUSTC_ARCHFLAGS += "--target=${HOST_SYS} ${RUSTFLAGS}"
|
||||
|
||||
def rust_base_dep(d):
|
||||
# Taken from meta/classes/base.bbclass `base_dep_prepend` and modified to
|
||||
@@ -9,43 +10,13 @@ def rust_base_dep(d):
|
||||
deps = ""
|
||||
if not d.getVar('INHIBIT_DEFAULT_RUST_DEPS', True):
|
||||
if (d.getVar('HOST_SYS', True) != d.getVar('BUILD_SYS', True)):
|
||||
deps += " virtual/${TARGET_PREFIX}rust"
|
||||
deps += " virtual/${TARGET_PREFIX}rust ${RUSTLIB_DEP}"
|
||||
else:
|
||||
deps += " rust-native"
|
||||
return deps
|
||||
|
||||
DEPENDS_append = " ${@rust_base_dep(d)}"
|
||||
|
||||
def rust_base_triple(d, thing):
|
||||
'''
|
||||
Mangle bitbake's *_SYS into something that rust might support (see
|
||||
rust/mk/cfg/* for a list)
|
||||
|
||||
Note that os is assumed to be some linux form
|
||||
'''
|
||||
|
||||
arch = d.getVar('{}_ARCH'.format(thing), True)
|
||||
vendor = d.getVar('{}_VENDOR'.format(thing), True)
|
||||
os = d.getVar('{}_OS'.format(thing), True)
|
||||
|
||||
vendor = "-unknown"
|
||||
|
||||
if arch.startswith("arm"):
|
||||
if os.endswith("gnueabi"):
|
||||
os += bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hf', '', d)
|
||||
elif arch.startswith("aarch64"):
|
||||
os = "linux-gnu"
|
||||
elif arch.startswith("x86_64"):
|
||||
os = "linux-gnu"
|
||||
elif arch.startswith("i586"):
|
||||
arch = "i686"
|
||||
os = "linux-gnu"
|
||||
return arch + vendor + '-' + os
|
||||
|
||||
RUST_BUILD_SYS = "${@rust_base_triple(d, 'BUILD')}"
|
||||
RUST_HOST_SYS = "${@rust_base_triple(d, 'HOST')}"
|
||||
RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
|
||||
|
||||
# BUILD_LDFLAGS
|
||||
# ${STAGING_LIBDIR_NATIVE}
|
||||
# ${STAGING_BASE_LIBDIR_NATIVE}
|
||||
@@ -59,23 +30,6 @@ RUST_TARGET_SYS = "${@rust_base_triple(d, 'TARGET')}"
|
||||
# -L${STAGING_BASE_LIBDIR_NATIVE} \
|
||||
#"
|
||||
|
||||
RUST_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}:${STAGING_BASE_LIBDIR_NATIVE}"
|
||||
|
||||
## Note: the 'rustlib' element of this was a workaround rustc forgetting the
|
||||
## libdir it was built with. It now remembers so this should be unneeded
|
||||
#RUST_PATH_NATIVE .= ":${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/rustlib/${TARGET_SYS}/lib"
|
||||
|
||||
# FIXME: set based on whether we are native vs cross vs buildsdk, etc
|
||||
#export RUST_PATH ??= "${RUST_PATH_NATIVE}"
|
||||
|
||||
## This is builtin to rustc with the value "$libdir/rust/targets"
|
||||
# RUST_TARGET_PATH = "foo:bar"
|
||||
|
||||
oe_runrustc () {
|
||||
bbnote ${RUSTC} ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
|
||||
"${RUSTC}" ${RUSTC_ARCHFLAGS} ${RUSTC_FLAGS} "$@"
|
||||
}
|
||||
|
||||
# XXX: for some reason bitbake sets BUILD_* & TARGET_* but uses the bare
|
||||
# variables for HOST. Alias things to make it easier for us.
|
||||
HOST_LDFLAGS ?= "${LDFLAGS}"
|
||||
@@ -83,4 +37,8 @@ HOST_CFLAGS ?= "${CFLAGS}"
|
||||
HOST_CXXFLAGS ?= "${CXXFLAGS}"
|
||||
HOST_CPPFLAGS ?= "${CPPFLAGS}"
|
||||
|
||||
EXTRA_OECONF_remove = "--disable-static"
|
||||
rustlib_suffix="${TUNE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/rustlib/${HOST_SYS}/lib"
|
||||
# Native sysroot standard library path
|
||||
rustlib_src="${prefix}/lib/${rustlib_suffix}"
|
||||
# Host sysroot standard library path
|
||||
rustlib="${libdir}/${rustlib_suffix}"
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# In order to share the same source between multiple packages (.bb files), we
|
||||
# unpack and patch the X source here into a shared dir.
|
||||
#
|
||||
# Take a look at gcc-source.inc for the general structure of this
|
||||
|
||||
# We require that "SOURCE_NAME" be set
|
||||
|
||||
# nopackages.bbclass {
|
||||
deltask do_package
|
||||
deltask do_package_write_rpm
|
||||
deltask do_package_write_ipk
|
||||
deltask do_package_write_deb
|
||||
deltask do_package_qa
|
||||
deltask do_packagedata
|
||||
#}
|
||||
|
||||
deltask do_configure
|
||||
deltask do_compile
|
||||
deltask do_install
|
||||
deltask do_populate_sysroot
|
||||
deltask do_populate_lic
|
||||
deltask do_rm_work
|
||||
|
||||
|
||||
# override to get rid of '-native' or other misc
|
||||
# XXX: consider ${PR}
|
||||
PN = "${SOURCE_NAME}-source-${PV}"
|
||||
WORKDIR = "${TMPDIR}/work-shared/${SOURCE_NAME}-${PV}-${PR}"
|
||||
SSTATE_SWSPEC = "sstate:${SOURCE_NAME}::${PV}:${PR}::${SSTATE_VERSION}:"
|
||||
|
||||
STAMP = "${STAMPS_DIR}/work-shared/${SOURCE_NAME}-${PV}-${PR}"
|
||||
STAMPCLEAN = "${STAMPS_DIR}/work-shared/${SOURCE_NAME}-${PV}-*"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
DEPENDS = ""
|
||||
PACKAGES = ""
|
||||
|
||||
EXCLUDE_FROM_WORLD = "1"
|
||||
@@ -1,3 +0,0 @@
|
||||
S = "${TMPDIR}/work-shared/${SOURCE_NAME}-${PV}-${PR}"
|
||||
|
||||
do_unpack[depends] += "${SOURCE_NAME}-source-${PV}:do_patch"
|
||||
@@ -3,3 +3,5 @@ SECURITY_CFLAGS_pn-rust-native = "${SECURITY_NO_PIE_CFLAGS}"
|
||||
SECURITY_CFLAGS_pn-rust-cross-${TARGET_ARCH} = "${SECURITY_NO_PIE_CFLAGS}"
|
||||
SECURITY_CFLAGS_pn-rust = "${SECURITY_NO_PIE_CFLAGS}"
|
||||
SECURITY_CFLAGS_pn-rust-llvm = "${SECURITY_NO_PIE_CFLAGS}"
|
||||
|
||||
SECURITY_LDFLAGS_pn-rust-cross-arm = " -lssp_nonshared -lssp"
|
||||
|
||||
@@ -8,7 +8,5 @@ BBFILE_COLLECTIONS += "rust-layer"
|
||||
BBFILE_PATTERN_rust-layer := "^${LAYERDIR}/"
|
||||
BBFILE_PRIORITY_rust-layer = "7"
|
||||
|
||||
LICENSE_PATH += "${LAYERDIR}/licenses"
|
||||
|
||||
# Override security flags
|
||||
require conf/distro/include/rust_security_flags.inc
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#MACHINE ?= "edgerouter"
|
||||
#
|
||||
# This sets the default machine to be qemux86 if no other machine is selected:
|
||||
MACHINE ??= "qemux86"
|
||||
MACHINE ??= "qemux86-64"
|
||||
|
||||
#
|
||||
# Where to place downloads
|
||||
@@ -220,7 +220,7 @@ BB_DISKMON_DIRS = "\
|
||||
#file://.* http://someserver.tld/share/sstate/PATH;downloadfilename=PATH \n \
|
||||
#file://.* file:///some/local/dir/sstate/PATH"
|
||||
|
||||
SSTATE_MIRRORS ?= "file://.* http://build-cache.asterius.io/sstate/PATH;downloadfilename=PATH \n"
|
||||
SSTATE_MIRRORS ?= "file://.* http://build-cache.asterius.io/morty/sstate-cache/PATH;downloadfilename=PATH \n"
|
||||
|
||||
SOURCE_MIRROR_URL ?= "http://build-cache.asterius.io/downloads/"
|
||||
INHERIT += "own-mirrors rm_work"
|
||||
|
||||
149
lib/crate.py
Normal file
149
lib/crate.py
Normal file
@@ -0,0 +1,149 @@
|
||||
# ex:ts=4:sw=4:sts=4:et
|
||||
# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||
"""
|
||||
BitBake 'Fetch' implementation for crates.io
|
||||
"""
|
||||
|
||||
# Copyright (C) 2016 Doug Goldstein
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Based on functions from the base bb module, Copyright 2003 Holger Schurig
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import bb
|
||||
from bb.fetch2 import logger, subprocess_setup, UnpackError
|
||||
from bb.fetch2.wget import Wget
|
||||
|
||||
|
||||
class Crate(Wget):
|
||||
|
||||
"""Class to fetch crates via wget"""
|
||||
|
||||
def _cargo_bitbake_path(self, rootdir):
|
||||
return os.path.join(rootdir, "cargo_home", "bitbake")
|
||||
|
||||
def supports(self, ud, d):
|
||||
"""
|
||||
Check to see if a given url is for this fetcher
|
||||
"""
|
||||
return ud.type in ['crate']
|
||||
|
||||
def recommends_checksum(self, urldata):
|
||||
return False
|
||||
|
||||
def urldata_init(self, ud, d):
|
||||
"""
|
||||
Sets up to download the respective crate from crates.io
|
||||
"""
|
||||
|
||||
if ud.type == 'crate':
|
||||
self._crate_urldata_init(ud, d)
|
||||
|
||||
super(Crate, self).urldata_init(ud, d)
|
||||
|
||||
def _crate_urldata_init(self, ud, d):
|
||||
"""
|
||||
Sets up the download for a crate
|
||||
"""
|
||||
|
||||
# URL syntax is: crate://NAME/VERSION
|
||||
# break the URL apart by /
|
||||
parts = ud.url.split('/')
|
||||
if len(parts) < 5:
|
||||
raise bb.fetch2.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url)
|
||||
|
||||
# last field is version
|
||||
version = parts[len(parts) - 1]
|
||||
# second to last field is name
|
||||
name = parts[len(parts) - 2]
|
||||
# host (this is to allow custom crate registries to be specified
|
||||
host = '/'.join(parts[2:len(parts) - 2])
|
||||
|
||||
# if using upstream just fix it up nicely
|
||||
if host == 'crates.io':
|
||||
host = 'crates.io/api/v1/crates'
|
||||
|
||||
ud.url = "https://%s/%s/%s/download" % (host, name, version)
|
||||
ud.parm['downloadfilename'] = "%s-%s.crate" % (name, version)
|
||||
ud.parm['name'] = name
|
||||
|
||||
logger.debug(2, "Fetching %s to %s" % (ud.url, ud.parm['downloadfilename']))
|
||||
|
||||
def unpack(self, ud, rootdir, d):
|
||||
"""
|
||||
Uses the crate to build the necessary paths for cargo to utilize it
|
||||
"""
|
||||
if ud.type == 'crate':
|
||||
return self._crate_unpack(ud, rootdir, d)
|
||||
else:
|
||||
super(Crate, self).unpack(ud, rootdir, d)
|
||||
|
||||
def _crate_unpack(self, ud, rootdir, d):
|
||||
"""
|
||||
Unpacks a crate
|
||||
"""
|
||||
thefile = ud.localpath
|
||||
|
||||
# possible metadata we need to write out
|
||||
metadata = {}
|
||||
|
||||
# change to the rootdir to unpack but save the old working dir
|
||||
save_cwd = os.getcwd()
|
||||
os.chdir(rootdir)
|
||||
|
||||
pn = d.getVar('BPN', True)
|
||||
if pn == ud.parm.get('name'):
|
||||
cmd = "tar -xz --no-same-owner -f %s" % thefile
|
||||
else:
|
||||
cargo_bitbake = self._cargo_bitbake_path(rootdir)
|
||||
|
||||
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake)
|
||||
|
||||
# ensure we've got these paths made
|
||||
bb.utils.mkdirhier(cargo_bitbake)
|
||||
|
||||
# generate metadata necessary
|
||||
with open(thefile, 'rb') as f:
|
||||
# get the SHA256 of the original tarball
|
||||
tarhash = hashlib.sha256(f.read()).hexdigest()
|
||||
|
||||
metadata['files'] = {}
|
||||
metadata['package'] = tarhash
|
||||
|
||||
# path it
|
||||
path = d.getVar('PATH', True)
|
||||
if path:
|
||||
cmd = "PATH=\"%s\" %s" % (path, cmd)
|
||||
bb.note("Unpacking %s to %s/" % (thefile, os.getcwd()))
|
||||
|
||||
ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
|
||||
|
||||
os.chdir(save_cwd)
|
||||
|
||||
if ret != 0:
|
||||
raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url)
|
||||
|
||||
# if we have metadata to write out..
|
||||
if len(metadata) > 0:
|
||||
cratepath = os.path.splitext(os.path.basename(thefile))[0]
|
||||
bbpath = self._cargo_bitbake_path(rootdir)
|
||||
mdfile = '.cargo-checksum.json'
|
||||
mdpath = os.path.join(bbpath, cratepath, mdfile)
|
||||
with open(mdpath, "w") as f:
|
||||
json.dump(metadata, f)
|
||||
@@ -1,11 +0,0 @@
|
||||
LINKING EXCEPTION
|
||||
|
||||
In addition to the permissions in the GNU General Public License, the authors
|
||||
give you unlimited permission to link the compiled version of this library into
|
||||
combinations with other programs, and to distribute those combinations without
|
||||
any restriction coming from the use of this file. (The General Public License
|
||||
restrictions do apply in other respects; for example, they cover modification
|
||||
of the file, and distribution when not linked into a combined executable.)
|
||||
|
||||
|
||||
insert GPL v2 text here
|
||||
24
recipes-core/bitflags/bitflags_0.5.0.bb
Normal file
24
recipes-core/bitflags/bitflags_0.5.0.bb
Normal file
@@ -0,0 +1,24 @@
|
||||
DESCRIPTION = "A macro to generate structures which behave like bitflags."
|
||||
HOMEPAGE = "https://github.com/rust-lang-nursery/bitflags"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/rust-lang-nursery/bitflags.git;protocol=https"
|
||||
SRCREV = "41aa413a7c30d70b93b44ab5447276c381ef249e"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
LIB_SRC = "${S}/src/lib.rs"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_install_rust_lib
|
||||
}
|
||||
23
recipes-core/lazy-static/lazy-static_0.2.1.bb
Normal file
23
recipes-core/lazy-static/lazy-static_0.2.1.bb
Normal file
@@ -0,0 +1,23 @@
|
||||
DESCRIPTION = "A macro for declaring lazily evaluated statics in Rust."
|
||||
HOMEPAGE = "https://github.com/rust-lang-nursery/lazy-static.rs"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE;md5=5795ddb4df1d696d439b6667081cffc9 \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/rust-lang-nursery/lazy-static.rs.git;protocol=https"
|
||||
SRCREV = "ffe65c818474f863945ca535c0e53f3b8b848ff7"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
LIB_SRC = "${S}/src/lib.rs"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_install_rust_lib
|
||||
}
|
||||
@@ -2,20 +2,18 @@ DESCRIPTION = "A Rust library with native bindings to the types and functions co
|
||||
HOMEPAGE = "https://github.com/rust-lang/libc"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE-MIT;md5=615cc94ba6f721c4ed3d6988605e85ca \
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
# SRC_URI = "git://git@github.com:rust-lang/libc.git;protocol=https"
|
||||
# libc lives in rust-lang/rust which is a submodule of rust-lang/libc
|
||||
SRC_URI = "gitsm://github.com/rust-lang/rust.git;protocol=https"
|
||||
SRCREV = "8b7c17db2235a2a3f2c71242b11fc429a8d05a90"
|
||||
SRC_URI = "git://github.com/rust-lang/libc.git;protocol=https"
|
||||
SRCREV = "f54b9c90ee68889181472d4d4a5dd9e43d0e5318"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
LIB_SRC = "${S}/src/liblibc/lib.rs"
|
||||
LIB_SRC = "${S}/src/lib.rs"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib --cfg feature='"cargo-build"'
|
||||
@@ -7,7 +7,7 @@ DEPENDS = "libc-rs"
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/BurntSushi/rust-memchr.git;protocol=https"
|
||||
SRCREV = "a91e63378bf6f4bba5c7d88f4fe98efdcb432c99"
|
||||
SRCREV = "4f9a13f95e6e00f2847c093c56b41b9c1d58d3c4"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
5
recipes-core/num/num-integer_0.1.34.bb
Normal file
5
recipes-core/num/num-integer_0.1.34.bb
Normal file
@@ -0,0 +1,5 @@
|
||||
require num.inc
|
||||
|
||||
DEPENDS += "num-traits"
|
||||
|
||||
LIB_SRC = "${S}/integer/src/lib.rs"
|
||||
6
recipes-core/num/num-iter_0.1.34.bb
Normal file
6
recipes-core/num/num-iter_0.1.34.bb
Normal file
@@ -0,0 +1,6 @@
|
||||
require num.inc
|
||||
|
||||
DEPENDS += "num-traits"
|
||||
DEPENDS += "num-integer"
|
||||
|
||||
LIB_SRC = "${S}/iter/src/lib.rs"
|
||||
3
recipes-core/num/num-traits_0.1.34.bb
Normal file
3
recipes-core/num/num-traits_0.1.34.bb
Normal file
@@ -0,0 +1,3 @@
|
||||
require num.inc
|
||||
|
||||
LIB_SRC = "${S}/traits/src/lib.rs"
|
||||
22
recipes-core/num/num.inc
Normal file
22
recipes-core/num/num.inc
Normal file
@@ -0,0 +1,22 @@
|
||||
DESCRIPTION = "A collection of numeric types and traits for Rust, including bigint, complex, rational, range iterators, generic integers, and more!"
|
||||
HOMEPAGE = "https://github.com/rust-num/num"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/rust-num/num.git;protocol=https"
|
||||
SRCREV = "d9f08cb148cc686ec407c1e42fbd4536cde6ac82"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_install_rust_lib
|
||||
}
|
||||
9
recipes-core/num/num_0.1.34.bb
Normal file
9
recipes-core/num/num_0.1.34.bb
Normal file
@@ -0,0 +1,9 @@
|
||||
require num.inc
|
||||
|
||||
DEPENDS += "\
|
||||
num-traits \
|
||||
num-integer \
|
||||
num-iter \
|
||||
"
|
||||
|
||||
LIB_SRC = "${S}/src/lib.rs"
|
||||
@@ -10,7 +10,7 @@ DEPENDS = "libc-rs"
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/rust-lang/rand.git;protocol=https"
|
||||
SRCREV = "164659b01e6fdb4d9a8e52b7a7451e8174e91821"
|
||||
SRCREV = "f872fda5fb8fb899a837ee9eee0332076a8f5300"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "\
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/rust-lang/rustc-serialize.git;protocol=https"
|
||||
SRCREV = "376f43a4b94dbe411bd9534ab83f02fbcb5a3b04"
|
||||
SRCREV = "64b38a1f31a9af6eabf2894437aa5ccc3e457e68"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
## An excerpt from curl-sys's build script:
|
||||
#export CFLAGS := $(CFLAGS) -fPIC -ffunction-sections -fdata-sections
|
||||
#OPTS := $(OPTS) \
|
||||
# --enable-static=yes \
|
||||
# --enable-shared=no \
|
||||
# --disable-ldap --disable-ldaps --disable-ftp --disable-rtsp \
|
||||
# --disable-dict --disable-telnet --disable-tftp --disable-pop3 \
|
||||
# --disable-imap --disable-smtp --disable-gopher --disable-manual \
|
||||
# --enable-optimize --without-librtmp --without-libidn \
|
||||
# --prefix="$(OUT_DIR)"
|
||||
## Due to how rust links, we need -fPIC. Without it,
|
||||
|
||||
#EXTRA_OECONF_append = " \
|
||||
# --with-zlib \
|
||||
# --enable-static \
|
||||
# --enable-hidden-symbols \
|
||||
#"
|
||||
|
||||
#BUILD_CFLAGS += "-fPIC"
|
||||
#TARGET_CFLAGS += "-fPIC"
|
||||
|
||||
#| note: /usr/bin/ld: .../tmp/work/x86_64-linux/cargo-native/2014-11-07-r0/git/target/x86_64-unknown-linux-gnu/deps/libcurl-f3f9ef32955b72e6.rlib(r-curl-libcurl_la-openssl.o): undefined reference to symbol 'SSL_CTX_set_cipher_list'
|
||||
#| /usr/lib/libssl.so.1.0.0: error adding symbols: DSO missing from command line
|
||||
#DEPENDS_append = "openssl"
|
||||
PACKAGECONFIG = "ipv6"
|
||||
CFLAGS_append = " -fPIC"
|
||||
@@ -1,3 +0,0 @@
|
||||
require libgit2.inc
|
||||
S = "${WORKDIR}/git"
|
||||
SRC_URI = "git://github.com/libgit2/libgit2.git;protocol=https"
|
||||
@@ -1,3 +0,0 @@
|
||||
require libgit2.inc
|
||||
SRC_URI = "https://github.com/libgit2/libgit2/archive/v${PV}.tar.gz"
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
SUMMARY = "the Git linkable library"
|
||||
HOMEPAGE = "http://libgit2.github.com/"
|
||||
LICENSE = "GPL-2.0-with-linking-exception"
|
||||
|
||||
DEPENDS = "openssl zlib"
|
||||
|
||||
inherit cmake
|
||||
|
||||
# CLAR = tests, needs python-native
|
||||
EXTRA_OECMAKE = "\
|
||||
-DTHREADSAFE=ON \
|
||||
-DBUILD_CLAR=OFF \
|
||||
-DSHA1_TYPE="builtin" \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DBUILD_EXAMPLES=OFF \
|
||||
"
|
||||
|
||||
CFLAGS_append .= " -fPIC"
|
||||
|
||||
# Prior to poky commit 60d504b431fa7cdc6ded141def7ae18edb1834e5,
|
||||
# the cmake class did not define CMAKE_AR in the generated toolchain
|
||||
# file. This is needed to support building a static library.
|
||||
# See https://github.com/jmesmon/meta-rust/issues/1
|
||||
OECMAKE_AR ?= "${AR}"
|
||||
cmake_do_generate_toolchain_file_append() {
|
||||
cat >> ${WORKDIR}/toolchain.cmake <<EOF
|
||||
set( CMAKE_AR ${OECMAKE_AR} CACHE FILEPATH "Archiver" )
|
||||
EOF
|
||||
}
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,6 +0,0 @@
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=29c24df0df4c2bab5efb8d5a33a73202"
|
||||
|
||||
SRC_URI[md5sum] = "dbf516d18e176bbb131de3efccfee533"
|
||||
SRC_URI[sha256sum] = "c7f1bf99ed8aeba65a485489869e2a50f022f3cd847df85e192fc99fdd6c8b5e"
|
||||
|
||||
require libgit2-release.inc
|
||||
@@ -1,4 +0,0 @@
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=34197a479f637beb9e09e56893f48bc2"
|
||||
SRC_URI[md5sum] = "b7db3ab71dfa19fe1dc7fef76d6af216"
|
||||
SRC_URI[sha256sum] = "c7f5e2d7381dbc4d7e878013d14f9993ae8a41bd23f032718e39ffba57894029"
|
||||
require libgit2-release.inc
|
||||
@@ -1,4 +0,0 @@
|
||||
require libgit2-git.inc
|
||||
SRCREV ?= "47f37400253210f483d84fb9c2ecf44fb5986849"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=5ddd5fb64b24982b32a490dccccdabc5"
|
||||
DEFAULT_PREFERENCE = "-1"
|
||||
@@ -1,2 +0,0 @@
|
||||
# meta-oe/recipes-support/libssh2
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,3 +0,0 @@
|
||||
# cargo tries to build a shared object using several static objects, one of
|
||||
# which includes the contents of zlib (zutil.o as 'libcurl-f3f9ef32955b72e6.rlib(r-z-zutil.o)')
|
||||
CFLAGS_append = " -fPIC"
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
CARGO_SNAPSHOT = "2016-01-31/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz"
|
||||
SRC_URI[md5sum] = "52f48780b7cfadc88813766048d4d402"
|
||||
SRC_URI[sha256sum] = "1920e661bab536eba763ff6704a1d62fb20bb0f67d8c5a119e41c49510ea5fa6"
|
||||
CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz"
|
||||
SRC_URI[md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091"
|
||||
SRC_URI[sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756"
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
INHIBIT_CARGO_DEP = "1"
|
||||
|
||||
inherit cargo
|
||||
inherit patch
|
||||
inherit rust-installer
|
||||
|
||||
SUMMARY = "Cargo downloads your Rust project's dependencies and builds your project"
|
||||
HOMEPAGE = "http://crates.io"
|
||||
@@ -17,18 +14,13 @@ SRC_URI = "\
|
||||
|
||||
B = "${S}"
|
||||
|
||||
PACKAGECONFIG ??= ""
|
||||
|
||||
# Note: this does not appear to work very well due to our use of bitbake triples
|
||||
# & rust's use of cooked triples
|
||||
PACKAGECONFIG[rust-snapshot] = "--local-rust-root=${B}/rustc"
|
||||
|
||||
# Used in libgit2-sys's build.rs, needed for pkg-config to be used
|
||||
export LIBGIT2_SYS_USE_PKG_CONFIG = "1"
|
||||
|
||||
do_configure () {
|
||||
${@bb.utils.contains('PACKAGECONFIG', 'rust-snapshot', '${S}/.travis.install.deps.sh', ':', d)}
|
||||
# cargo's configure doesn't recognize --disable-static, so remove it.
|
||||
DISABLE_STATIC = ""
|
||||
|
||||
do_configure () {
|
||||
"${S}/configure" \
|
||||
"--prefix=${prefix}" \
|
||||
"--build=${BUILD_SYS}" \
|
||||
@@ -44,8 +36,6 @@ do_configure () {
|
||||
${EXTRA_OECONF} \
|
||||
|| die "Could not configure cargo"
|
||||
|
||||
# cargo downloads a cargo snapshot to build itself using cargo, we need
|
||||
# to override it's arch info.
|
||||
cargo_do_configure
|
||||
}
|
||||
|
||||
@@ -54,13 +44,13 @@ do_compile () {
|
||||
|
||||
rm -rf target/snapshot
|
||||
mkdir -p target
|
||||
cp -R ${WORKDIR}/$(basename ${CARGO_SNAPSHOT} .tar.gz)/cargo target/snapshot
|
||||
cp -R ${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo target/snapshot
|
||||
|
||||
oe_runmake ARGS="--verbose"
|
||||
oe_runmake VERBOSE=1
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_runmake DESTDIR="${D}" install
|
||||
oe_runmake prepare-image-${TARGET_SYS} IMGDIR_${TARGET_SYS}="${D}${prefix}"
|
||||
}
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
|
||||
86
recipes-devtools/cargo/cargo_0.13.0.bb
Normal file
86
recipes-devtools/cargo/cargo_0.13.0.bb
Normal file
@@ -0,0 +1,86 @@
|
||||
require cargo-snapshot.inc
|
||||
require cargo.inc
|
||||
|
||||
SRC_URI += " \
|
||||
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \
|
||||
crate://crates.io/advapi32-sys/0.2.0 \
|
||||
crate://crates.io/aho-corasick/0.5.2 \
|
||||
crate://crates.io/bitflags/0.1.1 \
|
||||
crate://crates.io/bitflags/0.7.0 \
|
||||
crate://crates.io/bufstream/0.1.2 \
|
||||
crate://crates.io/cfg-if/0.1.0 \
|
||||
crate://crates.io/cmake/0.1.17 \
|
||||
crate://crates.io/crossbeam/0.2.9 \
|
||||
crate://crates.io/curl-sys/0.2.1 \
|
||||
crate://crates.io/curl/0.3.2 \
|
||||
crate://crates.io/docopt/0.6.82 \
|
||||
crate://crates.io/env_logger/0.3.4 \
|
||||
crate://crates.io/filetime/0.1.10 \
|
||||
crate://crates.io/flate2/0.2.14 \
|
||||
crate://crates.io/fs2/0.2.5 \
|
||||
crate://crates.io/gcc/0.3.32 \
|
||||
crate://crates.io/gdi32-sys/0.2.0 \
|
||||
crate://crates.io/git2-curl/0.5.0 \
|
||||
crate://crates.io/git2/0.4.4 \
|
||||
crate://crates.io/glob/0.2.11 \
|
||||
crate://crates.io/hamcrest/0.1.0 \
|
||||
crate://crates.io/idna/0.1.0 \
|
||||
crate://crates.io/kernel32-sys/0.2.2 \
|
||||
crate://crates.io/lazy_static/0.2.1 \
|
||||
crate://crates.io/libc/0.2.15 \
|
||||
crate://crates.io/libgit2-sys/0.4.5 \
|
||||
crate://crates.io/libressl-pnacl-sys/2.1.6 \
|
||||
crate://crates.io/libssh2-sys/0.1.38 \
|
||||
crate://crates.io/libz-sys/1.0.5 \
|
||||
crate://crates.io/log/0.3.6 \
|
||||
crate://crates.io/matches/0.1.2 \
|
||||
crate://crates.io/memchr/0.1.11 \
|
||||
crate://crates.io/miniz-sys/0.1.7 \
|
||||
crate://crates.io/miow/0.1.3 \
|
||||
crate://crates.io/net2/0.2.26 \
|
||||
crate://crates.io/nom/1.2.4 \
|
||||
crate://crates.io/num-bigint/0.1.33 \
|
||||
crate://crates.io/num-complex/0.1.33 \
|
||||
crate://crates.io/num-integer/0.1.32 \
|
||||
crate://crates.io/num-iter/0.1.32 \
|
||||
crate://crates.io/num-rational/0.1.32 \
|
||||
crate://crates.io/num-traits/0.1.34 \
|
||||
crate://crates.io/num/0.1.34 \
|
||||
crate://crates.io/num_cpus/1.0.0 \
|
||||
crate://crates.io/openssl-sys-extras/0.7.14 \
|
||||
crate://crates.io/openssl-sys/0.7.14 \
|
||||
crate://crates.io/openssl/0.7.14 \
|
||||
crate://crates.io/pkg-config/0.3.8 \
|
||||
crate://crates.io/pnacl-build-helper/1.4.10 \
|
||||
crate://crates.io/rand/0.3.14 \
|
||||
crate://crates.io/regex-syntax/0.3.4 \
|
||||
crate://crates.io/regex/0.1.73 \
|
||||
crate://crates.io/rustc-serialize/0.3.19 \
|
||||
crate://crates.io/semver/0.2.3 \
|
||||
crate://crates.io/strsim/0.3.0 \
|
||||
crate://crates.io/tar/0.4.8 \
|
||||
crate://crates.io/tempdir/0.3.5 \
|
||||
crate://crates.io/term/0.4.4 \
|
||||
crate://crates.io/thread-id/2.0.0 \
|
||||
crate://crates.io/thread_local/0.2.6 \
|
||||
crate://crates.io/toml/0.2.0 \
|
||||
crate://crates.io/unicode-bidi/0.2.3 \
|
||||
crate://crates.io/unicode-normalization/0.1.2 \
|
||||
crate://crates.io/url/1.2.0 \
|
||||
crate://crates.io/user32-sys/0.2.0 \
|
||||
crate://crates.io/utf8-ranges/0.1.3 \
|
||||
crate://crates.io/winapi-build/0.1.1 \
|
||||
crate://crates.io/winapi/0.2.8 \
|
||||
crate://crates.io/ws2_32-sys/0.2.1 \
|
||||
"
|
||||
# Compatible with Rust 1.12.1
|
||||
# https://static.rust-lang.org/dist/channel-rust-1.12.1.toml
|
||||
SRCREV_cargo = "109cb7c33d426044d141457049bd0fffaca1327c"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
LIC_FILES_CHKSUM ="\
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \
|
||||
"
|
||||
85
recipes-devtools/cargo/cargo_0.16.0.bb
Normal file
85
recipes-devtools/cargo/cargo_0.16.0.bb
Normal file
@@ -0,0 +1,85 @@
|
||||
require cargo-snapshot.inc
|
||||
require cargo.inc
|
||||
|
||||
EXTRA_OECONF += "--cargo=${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo/bin/cargo"
|
||||
|
||||
SRC_URI += " \
|
||||
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo;branch=rust-1.15.1 \
|
||||
crate://crates.io/advapi32-sys/0.2.0 \
|
||||
crate://crates.io/aho-corasick/0.5.3 \
|
||||
crate://crates.io/bitflags/0.7.0 \
|
||||
crate://crates.io/bufstream/0.1.2 \
|
||||
crate://crates.io/cfg-if/0.1.0 \
|
||||
crate://crates.io/cmake/0.1.19 \
|
||||
crate://crates.io/crossbeam/0.2.10 \
|
||||
crate://crates.io/curl-sys/0.3.6 \
|
||||
crate://crates.io/curl/0.4.1 \
|
||||
crate://crates.io/docopt/0.6.86 \
|
||||
crate://crates.io/env_logger/0.3.5 \
|
||||
crate://crates.io/filetime/0.1.10 \
|
||||
crate://crates.io/flate2/0.2.14 \
|
||||
crate://crates.io/fs2/0.3.0 \
|
||||
crate://crates.io/gcc/0.3.39 \
|
||||
crate://crates.io/gdi32-sys/0.2.0 \
|
||||
crate://crates.io/git2-curl/0.7.0 \
|
||||
crate://crates.io/git2/0.6.3 \
|
||||
crate://crates.io/glob/0.2.11 \
|
||||
crate://crates.io/hamcrest/0.1.1 \
|
||||
crate://crates.io/idna/0.1.0 \
|
||||
crate://crates.io/kernel32-sys/0.2.2 \
|
||||
crate://crates.io/lazy_static/0.2.2 \
|
||||
crate://crates.io/libc/0.2.18 \
|
||||
crate://crates.io/libgit2-sys/0.6.5 \
|
||||
crate://crates.io/libssh2-sys/0.2.4 \
|
||||
crate://crates.io/libz-sys/1.0.10 \
|
||||
crate://crates.io/log/0.3.6 \
|
||||
crate://crates.io/matches/0.1.4 \
|
||||
crate://crates.io/memchr/0.1.11 \
|
||||
crate://crates.io/miniz-sys/0.1.7 \
|
||||
crate://crates.io/miow/0.1.3 \
|
||||
crate://crates.io/net2/0.2.26 \
|
||||
crate://crates.io/num-bigint/0.1.35 \
|
||||
crate://crates.io/num-complex/0.1.35 \
|
||||
crate://crates.io/num-integer/0.1.32 \
|
||||
crate://crates.io/num-iter/0.1.32 \
|
||||
crate://crates.io/num-rational/0.1.35 \
|
||||
crate://crates.io/num-traits/0.1.36 \
|
||||
crate://crates.io/num/0.1.36 \
|
||||
crate://crates.io/num_cpus/1.1.0 \
|
||||
crate://crates.io/openssl-probe/0.1.0 \
|
||||
crate://crates.io/openssl-sys/0.9.1 \
|
||||
crate://crates.io/openssl/0.9.1 \
|
||||
crate://crates.io/pkg-config/0.3.8 \
|
||||
crate://crates.io/psapi-sys/0.1.0 \
|
||||
crate://crates.io/rand/0.3.14 \
|
||||
crate://crates.io/regex-syntax/0.3.9 \
|
||||
crate://crates.io/regex/0.1.80 \
|
||||
crate://crates.io/rustc-serialize/0.3.21 \
|
||||
crate://crates.io/semver-parser/0.6.1 \
|
||||
crate://crates.io/semver/0.5.1 \
|
||||
crate://crates.io/strsim/0.5.1 \
|
||||
crate://crates.io/tar/0.4.9 \
|
||||
crate://crates.io/tempdir/0.3.5 \
|
||||
crate://crates.io/term/0.4.4 \
|
||||
crate://crates.io/thread-id/2.0.0 \
|
||||
crate://crates.io/thread_local/0.2.7 \
|
||||
crate://crates.io/toml/0.2.1 \
|
||||
crate://crates.io/unicode-bidi/0.2.3 \
|
||||
crate://crates.io/unicode-normalization/0.1.2 \
|
||||
crate://crates.io/url/1.2.3 \
|
||||
crate://crates.io/user32-sys/0.2.0 \
|
||||
crate://crates.io/utf8-ranges/0.1.3 \
|
||||
crate://crates.io/winapi-build/0.1.1 \
|
||||
crate://crates.io/winapi/0.2.8 \
|
||||
crate://crates.io/ws2_32-sys/0.2.1 \
|
||||
"
|
||||
|
||||
SRCREV_cargo = "6e0c18cccc8b0c06fba8a8d76486f81a792fb420"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
LIC_FILES_CHKSUM=" \
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \
|
||||
"
|
||||
@@ -1,57 +0,0 @@
|
||||
require cargo-snapshot.inc
|
||||
require cargo.inc
|
||||
|
||||
SRC_URI += " \
|
||||
https://github.com/rust-lang/cargo/archive/${PV}.tar.gz;name=cargo \
|
||||
file://0001-disable-cargo-snapshot-fetch.patch \
|
||||
git://github.com/rust-lang/rust-installer.git;protocol=https;name=rust-installer;destsuffix=${BP}/src/rust-installer \
|
||||
"
|
||||
SRC_URI[cargo.md5sum] = "c3002e297f125ad40b2e0279219163bc"
|
||||
SRC_URI[cargo.sha256sum] = "4cadc436be442505851f3a8e9ffff1ef10b6379101a7f8e0afa9fa80f5198f89"
|
||||
|
||||
SRCREV_rust-installer = "c37d3747da75c280237dc2d6b925078e69555499"
|
||||
|
||||
S = "${WORKDIR}/${BP}"
|
||||
|
||||
LIC_FILES_CHKSUM ="\
|
||||
file://LICENSE-MIT;md5=362255802eb5aa87810d12ddf3cfedb4 \
|
||||
file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
file://LICENSE-THIRD-PARTY;md5=892ea68b169e69cfe75097fc38a15b56 \
|
||||
"
|
||||
|
||||
## curl-rust
|
||||
SRC_URI += "\
|
||||
git://github.com/carllerche/curl-rust.git;protocol=https;destsuffix=curl-rust;name=curl-rust \
|
||||
file://curl-rust/0001-curl-sys-avoid-explicitly-linking-in-openssl.patch;patchdir=../curl-rust \
|
||||
file://curl-rust/0002-remove-per-triple-deps-on-openssl-sys.patch;patchdir=../curl-rust \
|
||||
"
|
||||
|
||||
# 0.2.14 / -sys 0.1.29
|
||||
SRCREV_curl-rust = "76172b3ebf958fcf0b10d400f19ee02486a80ee7"
|
||||
|
||||
SRCREV_FORMAT .= "_curl-rust"
|
||||
EXTRA_OECARGO_PATHS += "${WORKDIR}/curl-rust"
|
||||
|
||||
## ssh2-rs
|
||||
SRC_URI += "\
|
||||
git://github.com/alexcrichton/ssh2-rs.git;protocol=https;name=ssh2-rs;destsuffix=ssh2-rs \
|
||||
file://ssh2-rs/0001-libssh2-sys-avoid-explicitly-linking-in-openssl.patch;patchdir=../ssh2-rs \
|
||||
"
|
||||
|
||||
# 0.2.10 / -sys 0.1.34
|
||||
SRCREV_ssh2-rs = "00af6ead0c3d4b82e05bee4d9963ef3823bcf524"
|
||||
|
||||
SRCREV_FORMAT .= "_ssh2-rs"
|
||||
EXTRA_OECARGO_PATHS += "${WORKDIR}/ssh2-rs"
|
||||
|
||||
## git2-rs
|
||||
SRC_URI += "\
|
||||
git://github.com/alexcrichton/git2-rs.git;protocol=https;name=git2-rs;destsuffix=git2-rs \
|
||||
file://git2-rs/0001-libgit2-sys-avoid-blessed-triples.patch;patchdir=../git2-rs \
|
||||
"
|
||||
|
||||
# 0.3.3 / -sys 0.3.8
|
||||
SRCREV_git2-rs = "19b6873c1fad7dc93c9c2dac4cba339dacf16efa"
|
||||
|
||||
SRCREV_FORMAT .= "_git2-rs"
|
||||
EXTRA_OECARGO_PATHS += "${WORKDIR}/git2-rs"
|
||||
@@ -1,27 +0,0 @@
|
||||
From 9652ddba460f30e83f401ab1564656e7787bdea9 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Wed, 3 Feb 2016 15:59:48 -0500
|
||||
Subject: [PATCH] disable cargo snapshot fetch
|
||||
|
||||
---
|
||||
Makefile.in | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 286a593..9c66486 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -92,10 +92,6 @@ test-unit-$(1): $$(CARGO)
|
||||
endef
|
||||
$(foreach target,$(CFG_TARGET),$(eval $(call CARGO_TARGET,$(target))))
|
||||
|
||||
-$(TARGET_ROOT)/snapshot/bin/cargo$(X): src/snapshots.txt
|
||||
- $(CFG_PYTHON) src/etc/dl-snapshot.py $(CFG_BUILD)
|
||||
- touch $@
|
||||
-
|
||||
|
||||
# === Tests
|
||||
|
||||
--
|
||||
2.7.0
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
From 6d74b6af6a23e195fc54c81a9bbdb21e7d5b6414 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Sat, 12 Dec 2015 22:36:26 -0500
|
||||
Subject: [PATCH 1/2] curl-sys: avoid explicitly linking in openssl
|
||||
|
||||
linking libcurl with libssl is handled by pkg-config, not us
|
||||
This also allows non-blessed triples to work.
|
||||
---
|
||||
curl-sys/Cargo.toml | 26 --------------------------
|
||||
curl-sys/lib.rs | 2 --
|
||||
2 files changed, 28 deletions(-)
|
||||
|
||||
diff --git a/curl-sys/Cargo.toml b/curl-sys/Cargo.toml
|
||||
index bf994bf..f153039 100644
|
||||
--- a/curl-sys/Cargo.toml
|
||||
+++ b/curl-sys/Cargo.toml
|
||||
@@ -19,29 +19,3 @@ path = "lib.rs"
|
||||
[dependencies]
|
||||
libz-sys = ">= 0"
|
||||
libc = "0.2"
|
||||
-
|
||||
-# Unix platforms use OpenSSL for now to provide SSL functionality
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-linux-android.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-linux-musl.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.arm-linux-androideabi.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.aarch64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-unknown-freebsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-freebsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-bitrig.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-openbsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-dragonfly.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
diff --git a/curl-sys/lib.rs b/curl-sys/lib.rs
|
||||
index be80469..b53b445 100644
|
||||
--- a/curl-sys/lib.rs
|
||||
+++ b/curl-sys/lib.rs
|
||||
@@ -3,8 +3,6 @@
|
||||
extern crate libc;
|
||||
#[cfg(not(target_env = "msvc"))]
|
||||
extern crate libz_sys;
|
||||
-#[cfg(all(unix, not(target_os = "macos")))]
|
||||
-extern crate openssl_sys;
|
||||
|
||||
use libc::{c_void, c_int, c_char, c_uint, c_long};
|
||||
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
From 445289f4eacc5c048e4a455bb6d6a6a2b9995e88 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Sat, 12 Dec 2015 22:40:33 -0500
|
||||
Subject: [PATCH 2/2] remove per triple deps on openssl-sys
|
||||
|
||||
---
|
||||
Cargo.toml | 27 +--------------------------
|
||||
1 file changed, 1 insertion(+), 26 deletions(-)
|
||||
|
||||
diff --git a/Cargo.toml b/Cargo.toml
|
||||
index 74f63c8..28aa1fa 100644
|
||||
--- a/Cargo.toml
|
||||
+++ b/Cargo.toml
|
||||
@@ -12,36 +12,11 @@ url = "0.2.0"
|
||||
log = "0.3.0"
|
||||
libc = "0.2"
|
||||
curl-sys = { path = "curl-sys", version = "0.1.0" }
|
||||
+openssl-sys = "0.7.0"
|
||||
|
||||
[dev-dependencies]
|
||||
env_logger = "0.3.0"
|
||||
|
||||
-# Unix platforms use OpenSSL for now to provide SSL functionality
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.i686-linux-android.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-linux-musl.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.arm-linux-androideabi.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.aarch64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.i686-unknown-freebsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-freebsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-bitrig.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-openbsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-dragonfly.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-
|
||||
[[test]]
|
||||
|
||||
name = "test"
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
From 95709b3f5b1495a57043975d7100461feed46b2f Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Sat, 12 Dec 2015 22:53:37 -0500
|
||||
Subject: [PATCH] libgit2-sys: avoid blessed triples
|
||||
|
||||
---
|
||||
libgit2-sys/Cargo.toml | 22 +---------------------
|
||||
1 file changed, 1 insertion(+), 21 deletions(-)
|
||||
|
||||
diff --git a/libgit2-sys/Cargo.toml b/libgit2-sys/Cargo.toml
|
||||
index 15b28d8..3590878 100644
|
||||
--- a/libgit2-sys/Cargo.toml
|
||||
+++ b/libgit2-sys/Cargo.toml
|
||||
@@ -17,32 +17,12 @@ path = "lib.rs"
|
||||
libssh2-sys = { version = ">= 0", optional = true }
|
||||
libc = "0.2"
|
||||
libz-sys = ">= 0"
|
||||
+openssl-sys = "0.7.0"
|
||||
|
||||
[build-dependencies]
|
||||
pkg-config = "0.3"
|
||||
cmake = "0.1.2"
|
||||
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-linux-musl.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.aarch64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.i686-unknown-freebsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-freebsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-bitrig.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-openbsd.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.x86_64-unknown-dragonfly.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-
|
||||
[features]
|
||||
ssh = ["libssh2-sys"]
|
||||
https = []
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
From be07c11b438550829d82dc844e38806570232cd7 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Sat, 12 Dec 2015 22:44:14 -0500
|
||||
Subject: [PATCH] libssh2-sys: avoid explicitly linking in openssl
|
||||
|
||||
---
|
||||
libssh2-sys/Cargo.toml | 25 -------------------------
|
||||
libssh2-sys/lib.rs | 2 --
|
||||
2 files changed, 27 deletions(-)
|
||||
|
||||
diff --git a/libssh2-sys/Cargo.toml b/libssh2-sys/Cargo.toml
|
||||
index b9ecec2..78f92ac 100644
|
||||
--- a/libssh2-sys/Cargo.toml
|
||||
+++ b/libssh2-sys/Cargo.toml
|
||||
@@ -18,31 +18,6 @@ libc = "0.2"
|
||||
ws2_32-sys = ">= 0"
|
||||
winapi = "0.2"
|
||||
|
||||
-[target.i686-apple-darwin.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-apple-darwin.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.aarch64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-linux-musl.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-unknown-freebsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-freebsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-dragonfly.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-bitrig.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-openbsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-
|
||||
[build-dependencies]
|
||||
pkg-config = "0.3"
|
||||
cmake = "0.1.2"
|
||||
diff --git a/libssh2-sys/lib.rs b/libssh2-sys/lib.rs
|
||||
index bb6c46f..40af82f 100644
|
||||
--- a/libssh2-sys/lib.rs
|
||||
+++ b/libssh2-sys/lib.rs
|
||||
@@ -6,8 +6,6 @@ extern crate ws2_32;
|
||||
extern crate winapi;
|
||||
|
||||
extern crate libz_sys;
|
||||
-#[cfg(unix)]
|
||||
-extern crate openssl_sys;
|
||||
|
||||
use libc::{c_int, size_t, c_void, c_char, c_long, c_uchar, c_uint, c_ulong};
|
||||
use libc::ssize_t;
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From 3d850e1b1651a79085b994c12cdb78faa8271622 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ho=C3=A0ng=20=C4=90=E1=BB=A9c=20Hi=E1=BA=BFu?=
|
||||
<hdhoang@zahe.me>
|
||||
Date: Mon, 1 Dec 2014 11:48:14 +0700
|
||||
Subject: [PATCH] update to new io::FileType enum
|
||||
|
||||
---
|
||||
src/lib.rs | 32 ++++++++++++++++----------------
|
||||
1 file changed, 16 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/src/lib.rs b/src/lib.rs
|
||||
index 5e13b84..3e24ff2 100644
|
||||
--- a/src/lib.rs
|
||||
+++ b/src/lib.rs
|
||||
@@ -283,12 +283,12 @@ impl<W: Writer> Archive<W> {
|
||||
octal(&mut header.dev_major, 0i);
|
||||
|
||||
header.link[0] = match stat.kind {
|
||||
- io::TypeFile => b'0',
|
||||
- io::TypeDirectory => b'5',
|
||||
- io::TypeNamedPipe => b'6',
|
||||
- io::TypeBlockSpecial => b'4',
|
||||
- io::TypeSymlink => b'2',
|
||||
- io::TypeUnknown => b' ',
|
||||
+ io::FileType::RegularFile => b'0',
|
||||
+ io::FileType::Directory => b'5',
|
||||
+ io::FileType::NamedPipe => b'6',
|
||||
+ io::FileType::BlockSpecial => b'4',
|
||||
+ io::FileType::Symlink => b'2',
|
||||
+ io::FileType::Unknown => b' ',
|
||||
};
|
||||
|
||||
// Final step, calculate the checksum
|
||||
@@ -411,16 +411,16 @@ impl<'a, R> File<'a, R> {
|
||||
/// Classify the type of file that this entry represents
|
||||
pub fn classify(&self) -> io::FileType {
|
||||
match (self.header.is_ustar(), self.header.link[0]) {
|
||||
- (_, b'0') => io::TypeFile,
|
||||
- (_, b'1') => io::TypeUnknown, // need a hard link enum?
|
||||
- (_, b'2') => io::TypeSymlink,
|
||||
- (false, _) => io::TypeUnknown, // not technically valid...
|
||||
-
|
||||
- (_, b'3') => io::TypeUnknown, // character special...
|
||||
- (_, b'4') => io::TypeBlockSpecial,
|
||||
- (_, b'5') => io::TypeDirectory,
|
||||
- (_, b'6') => io::TypeNamedPipe,
|
||||
- (_, _) => io::TypeUnknown, // not technically valid...
|
||||
+ (_, b'0') => io::FileType::RegularFile,
|
||||
+ (_, b'1') => io::FileType::Unknown, // need a hard link enum?
|
||||
+ (_, b'2') => io::FileType::Symlink,
|
||||
+ (false, _) => io::FileType::Unknown, // not technically valid...
|
||||
+
|
||||
+ (_, b'3') => io::FileType::Unknown, // character special...
|
||||
+ (_, b'4') => io::FileType::BlockSpecial,
|
||||
+ (_, b'5') => io::FileType::Directory,
|
||||
+ (_, b'6') => io::FileType::NamedPipe,
|
||||
+ (_, _) => io::FileType::Unknown, // not technically valid...
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.0.4
|
||||
|
||||
28
recipes-devtools/rust/compiler-rt.inc
Normal file
28
recipes-devtools/rust/compiler-rt.inc
Normal file
@@ -0,0 +1,28 @@
|
||||
SUMMARY = "Rust compiler run-time"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://src/compiler-rt/LICENSE.TXT;md5=bf24bca27049b52e9738451aa55771d4"
|
||||
|
||||
require rust.inc
|
||||
ALLOW_EMPTY_${PN} = "1"
|
||||
|
||||
DEPENDS += "rust-llvm-native (=${PV})"
|
||||
# dev and staticdev should NOT depend on the binary package
|
||||
RDEPENDS_${PN}-dev = ""
|
||||
INSANE_SKIP_${PN}-dev = "staticdev"
|
||||
|
||||
DISABLE_STATIC = ""
|
||||
INHIBIT_DEFAULT_RUST_DEPS = "1"
|
||||
|
||||
do_compile () {
|
||||
oe_runmake ${TARGET_SYS}/rt/libcompiler-rt.a
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${libdir}
|
||||
cp ${TARGET_SYS}/rt/libcompiler-rt.a ${D}${libdir}/libcompiler-rt.a
|
||||
}
|
||||
|
||||
FILES_${PN}-dev = ""
|
||||
FILES_${PN}-staticdev = "${libdir}/*.a"
|
||||
2
recipes-devtools/rust/compiler-rt_1.12.1.bb
Normal file
2
recipes-devtools/rust/compiler-rt_1.12.1.bb
Normal file
@@ -0,0 +1,2 @@
|
||||
require compiler-rt.inc
|
||||
require rust-source-${PV}.inc
|
||||
@@ -1,7 +1,7 @@
|
||||
From 3237afb78f960c015025186166f1c0998c00c6a6 Mon Sep 17 00:00:00 2001
|
||||
From bb2d8649b2b344e0bb4b1cf94135378831735557 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Tue, 18 Nov 2014 01:40:21 -0500
|
||||
Subject: [PATCH 2/9] Target: add default target.json path:
|
||||
Subject: [PATCH 01/10] Target: add default target.json path:
|
||||
$libdir/rust/targets
|
||||
|
||||
---
|
||||
@@ -11,19 +11,19 @@ Subject: [PATCH 2/9] Target: add default target.json path:
|
||||
3 files changed, 20 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index c4697eb..4cc059b 100644
|
||||
index e988ddc..563f3ac 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -35,7 +35,7 @@ use getopts;
|
||||
use std::collections::HashMap;
|
||||
use std::env;
|
||||
@@ -42,7 +42,7 @@ use std::env;
|
||||
use std::fmt;
|
||||
use std::hash::{Hasher, SipHasher};
|
||||
use std::iter::FromIterator;
|
||||
-use std::path::PathBuf;
|
||||
+use std::path::{Path, PathBuf};
|
||||
|
||||
use llvm;
|
||||
|
||||
@@ -711,8 +711,8 @@ pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
|
||||
pub struct Config {
|
||||
pub target: Target,
|
||||
@@ -1011,8 +1011,8 @@ pub fn build_configuration(sess: &Session,
|
||||
v
|
||||
}
|
||||
|
||||
@@ -33,12 +33,12 @@ index c4697eb..4cc059b 100644
|
||||
+ let target = match Target::search(sysroot, &opts.target_triple[..]) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
panic!(sp.fatal(&format!("Error loading target specification: {}", e)));
|
||||
sp.struct_fatal(&format!("Error loading target specification: {}", e))
|
||||
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
|
||||
index 2f3af1c..6424cff 100644
|
||||
index c71253a..13b4e05 100644
|
||||
--- a/src/librustc/session/mod.rs
|
||||
+++ b/src/librustc/session/mod.rs
|
||||
@@ -429,13 +429,17 @@ pub fn build_session_(sopts: config::Options,
|
||||
@@ -395,13 +395,17 @@ pub fn build_session_(sopts: config::Options,
|
||||
codemap: Rc<codemap::CodeMap>,
|
||||
cstore: Rc<for<'a> CrateStore<'a>>)
|
||||
-> Session {
|
||||
@@ -59,19 +59,19 @@ index 2f3af1c..6424cff 100644
|
||||
let default_sysroot = match sopts.maybe_sysroot {
|
||||
Some(_) => None,
|
||||
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs
|
||||
index 5114910..636a1aa 100644
|
||||
index 18686e3..d439b59 100644
|
||||
--- a/src/librustc_back/target/mod.rs
|
||||
+++ b/src/librustc_back/target/mod.rs
|
||||
@@ -49,6 +49,8 @@ use serialize::json::Json;
|
||||
@@ -49,6 +49,8 @@ use std::collections::BTreeMap;
|
||||
use std::default::Default;
|
||||
use std::io::prelude::*;
|
||||
use syntax::abi;
|
||||
use syntax::abi::Abi;
|
||||
+use std::borrow::ToOwned;
|
||||
+use std::path::Path;
|
||||
|
||||
mod android_base;
|
||||
mod apple_base;
|
||||
@@ -366,12 +368,13 @@ impl Target {
|
||||
@@ -541,12 +543,13 @@ impl Target {
|
||||
///
|
||||
/// The error string could come from any of the APIs called, including
|
||||
/// filesystem access and JSON decoding.
|
||||
@@ -85,8 +85,8 @@ index 5114910..636a1aa 100644
|
||||
+ use std::iter::IntoIterator;
|
||||
|
||||
fn load_file(path: &Path) -> Result<Target, String> {
|
||||
let mut f = try!(File::open(path).map_err(|e| e.to_string()));
|
||||
@@ -470,8 +473,14 @@ impl Target {
|
||||
let mut f = File::open(path).map_err(|e| e.to_string())?;
|
||||
@@ -577,8 +580,14 @@ impl Target {
|
||||
.unwrap_or(OsString::new());
|
||||
|
||||
// FIXME 16351: add a sane default search path?
|
||||
@@ -103,5 +103,5 @@ index 5114910..636a1aa 100644
|
||||
if p.is_file() {
|
||||
return load_file(&p);
|
||||
--
|
||||
2.4.10
|
||||
2.10.0
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
From 3254ad1d84b177eb960219c2bce26f8980a511e1 Mon Sep 17 00:00:00 2001
|
||||
From 0829743c109a147213d06d38052662a5f2b0dd9b Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Tue, 18 Nov 2014 14:52:56 -0500
|
||||
Subject: [PATCH 3/9] mk: for stage0, use RUSTFLAGS to override target libs dir
|
||||
Subject: [PATCH 02/10] mk: for stage0, use RUSTFLAGS to override target libs
|
||||
dir
|
||||
|
||||
Setting HLIB specially for stage0 (and even more specially for windows)
|
||||
also affects the location we place TLIB. To keep the TLIBs we build in
|
||||
the place requested by configure, use '-L' and '--sysroot' to point
|
||||
stage0-rustc at the appropriate location.
|
||||
---
|
||||
mk/main.mk | 30 +++++++++++++-----------------
|
||||
1 file changed, 13 insertions(+), 17 deletions(-)
|
||||
mk/main.mk | 29 ++++++++++++-----------------
|
||||
1 file changed, 12 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/mk/main.mk b/mk/main.mk
|
||||
index 963c12f..04b3e25 100644
|
||||
index 90d3563..cdcbdf2 100644
|
||||
--- a/mk/main.mk
|
||||
+++ b/mk/main.mk
|
||||
@@ -383,32 +383,26 @@ define SREQ
|
||||
@@ -420,32 +420,26 @@ define SREQ
|
||||
HROOT$(1)_H_$(3) = $(3)/stage$(1)
|
||||
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
|
||||
|
||||
@@ -59,15 +60,7 @@ index 963c12f..04b3e25 100644
|
||||
# Preqrequisites for using the stageN compiler
|
||||
ifeq ($(1),0)
|
||||
HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))
|
||||
@@ -520,6 +514,7 @@ STAGE$(1)_T_$(2)_H_$(3) := \
|
||||
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
|
||||
--cfg $$(CFGFLAG$(1)_T_$(2)_H_$(3)) \
|
||||
$$(CFG_RUSTC_FLAGS) $$(EXTRAFLAGS_STAGE$(1)) --target=$(2)) \
|
||||
+ $$(RUSTFLAGS_S_$(1)_T_$(2)_H_$(3)) \
|
||||
$$(RUSTC_FLAGS_$(2))
|
||||
|
||||
PERF_STAGE$(1)_T_$(2)_H_$(3) := \
|
||||
@@ -528,6 +523,7 @@ PERF_STAGE$(1)_T_$(2)_H_$(3) := \
|
||||
@@ -558,6 +552,7 @@ STAGE$(1)_T_$(2)_H_$(3) := \
|
||||
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
|
||||
--cfg $$(CFGFLAG$(1)_T_$(2)_H_$(3)) \
|
||||
$$(CFG_RUSTC_FLAGS) $$(EXTRAFLAGS_STAGE$(1)) --target=$(2)) \
|
||||
@@ -76,5 +69,5 @@ index 963c12f..04b3e25 100644
|
||||
|
||||
endef
|
||||
--
|
||||
2.4.10
|
||||
2.10.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 004ddead436887fe99bfa9d0d25f6cdaf9f6148b Mon Sep 17 00:00:00 2001
|
||||
From 128503bf447e82b9e99bea8ef83294a6446036b5 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Tue, 18 Nov 2014 13:48:14 -0500
|
||||
Subject: [PATCH 4/9] mk: add missing CFG_LIBDIR_RELATIVE
|
||||
Subject: [PATCH 03/10] mk: add missing CFG_LIBDIR_RELATIVE
|
||||
|
||||
---
|
||||
mk/grammar.mk | 4 ++--
|
||||
@@ -23,5 +23,5 @@ index 0d527bd..926f247 100644
|
||||
ifeq ($(CFG_OSTYPE),apple-darwin)
|
||||
FLEX_LDFLAGS=-ll
|
||||
--
|
||||
2.4.10
|
||||
2.10.0
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
From 8b088363a61a627fd8a31318d15164113f081660 Mon Sep 17 00:00:00 2001
|
||||
From d73ce5d99346812fcf063a87b4efac54c263737d Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Wed, 3 Dec 2014 19:15:19 -0500
|
||||
Subject: [PATCH 6/9] std/thread_local: workaround for NULL __dso_handle
|
||||
Subject: [PATCH 05/10] std/thread_local: workaround for NULL __dso_handle
|
||||
|
||||
---
|
||||
src/libstd/thread/local.rs | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libstd/thread/local.rs b/src/libstd/thread/local.rs
|
||||
index ca0f103..5851127 100644
|
||||
index 152b977..3c62862 100644
|
||||
--- a/src/libstd/thread/local.rs
|
||||
+++ b/src/libstd/thread/local.rs
|
||||
@@ -324,7 +324,7 @@ pub mod elf {
|
||||
@@ -380,7 +380,7 @@ pub mod elf {
|
||||
#[linkage = "extern_weak"]
|
||||
static __cxa_thread_atexit_impl: *const libc::c_void;
|
||||
}
|
||||
@@ -21,5 +21,5 @@ index ca0f103..5851127 100644
|
||||
arg: *mut u8,
|
||||
dso_handle: *mut u8) -> libc::c_int;
|
||||
--
|
||||
2.4.10
|
||||
2.10.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 1a9ada8070bb9cd293cfb93913721c68ca0b7766 Mon Sep 17 00:00:00 2001
|
||||
From f8d4b1ea925789bca1aa6261017d63f5efa95c0f Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Mon, 2 Mar 2015 13:34:59 -0500
|
||||
Subject: [PATCH 7/9] mk/install: use disable-rewrite-paths
|
||||
Subject: [PATCH 06/10] mk/install: use disable-rewrite-paths
|
||||
|
||||
This stops the install scripts from doing work we've already handled.
|
||||
|
||||
@@ -11,7 +11,7 @@ Path rewriting is only useful for prepackaged binary installers.
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mk/install.mk b/mk/install.mk
|
||||
index af6f3ff..430add7 100644
|
||||
index d2e5449..e67650b 100644
|
||||
--- a/mk/install.mk
|
||||
+++ b/mk/install.mk
|
||||
@@ -12,7 +12,9 @@ RUN_INSTALLER = cd tmp/empty_dir && \
|
||||
@@ -26,5 +26,5 @@ index af6f3ff..430add7 100644
|
||||
install:
|
||||
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
|
||||
--
|
||||
2.4.10
|
||||
2.10.0
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
From 2a42d59c3671f3ab68d8ff49c46240842aff6eb6 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Wed, 18 Nov 2015 08:33:26 -0500
|
||||
Subject: [PATCH 07/10] Allow overriding crate_hash with -C crate_hash
|
||||
|
||||
The current crate hash is not stable from run-to-run. This causes
|
||||
problems with bitbake; it needs a guarantee that every build with the
|
||||
same input will generate compatible output, otherwise sstate won't work.
|
||||
Using -C crate_hash, we can do that by using the bitbake input hash to
|
||||
determine the crate hash; the bitbake input hash will be stable, but
|
||||
still different for different rust recipes.
|
||||
|
||||
Upstream-Status: not-appropriate
|
||||
|
||||
Upstream wants to fix it's actual object generation here. See
|
||||
https://github.com/rust-lang/rust/issues/34902 (and others) for details.
|
||||
---
|
||||
src/librustc/session/config.rs | 2 ++
|
||||
src/librustc_trans/back/link.rs | 12 +++++++++++-
|
||||
2 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index 563f3ac..52a5130 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -804,6 +804,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
||||
"choose the code model to use (rustc --print code-models for details)"),
|
||||
metadata: Vec<String> = (Vec::new(), parse_list, [TRACKED],
|
||||
"metadata to mangle symbol names with"),
|
||||
+ crate_hash: String = ("".to_string(), parse_string, [TRACKED],
|
||||
+ "override crate hash with given value"),
|
||||
extra_filename: String = ("".to_string(), parse_string, [UNTRACKED],
|
||||
"extra data to put in each output filename"),
|
||||
codegen_units: usize = (1, parse_uint, [UNTRACKED],
|
||||
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
|
||||
index 3cf2500..0e48063 100644
|
||||
--- a/src/librustc_trans/back/link.rs
|
||||
+++ b/src/librustc_trans/back/link.rs
|
||||
@@ -125,12 +125,22 @@ pub fn find_crate_name(sess: Option<&Session>,
|
||||
|
||||
}
|
||||
|
||||
+use std::hash::{Hasher, SipHasher};
|
||||
+use rustc::hir::svh::Svh;
|
||||
+
|
||||
pub fn build_link_meta<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
name: &str)
|
||||
-> LinkMeta {
|
||||
+ let crate_hash = if tcx.sess.opts.cg.crate_hash != "" {
|
||||
+ let mut state = SipHasher::new();
|
||||
+ state.write(tcx.sess.opts.cg.crate_hash.as_bytes());
|
||||
+ Svh::new(state.finish())
|
||||
+ } else {
|
||||
+ tcx.calculate_krate_hash()
|
||||
+ };
|
||||
let r = LinkMeta {
|
||||
crate_name: name.to_owned(),
|
||||
- crate_hash: tcx.calculate_krate_hash(),
|
||||
+ crate_hash: crate_hash,
|
||||
};
|
||||
info!("{:?}", r);
|
||||
return r;
|
||||
--
|
||||
2.10.0
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
From 7abedc46cad6b52d44badaf88350d41ef907cd4c Mon Sep 17 00:00:00 2001
|
||||
From 174ae38bcc197658dd0ad6bcdae2bb06112e68a2 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Wed, 18 Nov 2015 08:41:17 -0500
|
||||
Subject: [PATCH 12/12] mk/platform.mk: pass -C crate_hash to builds
|
||||
Subject: [PATCH 08/10] mk/platform.mk: pass -C crate_hash to builds
|
||||
|
||||
bitbake recipe will export FORCE_CRATE_HASH
|
||||
|
||||
Upstream-Status: not-appropriate
|
||||
---
|
||||
mk/platform.mk | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/mk/platform.mk b/mk/platform.mk
|
||||
index eb693b8..e6317b5 100644
|
||||
index d601cab..0b5e9f2 100644
|
||||
--- a/mk/platform.mk
|
||||
+++ b/mk/platform.mk
|
||||
@@ -187,6 +187,7 @@ define CFG_MAKE_TOOLCHAIN
|
||||
@@ -181,6 +181,7 @@ define CFG_MAKE_TOOLCHAIN
|
||||
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
|
||||
LINK_$(1)=$(CROSS_PREFIX_$(1))$(LINK_$(1))
|
||||
RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(LINK_$(1))) \
|
||||
-C objcopy=$$(call FIND_COMPILER,$$(OBJCOPY_$(1))) \
|
||||
+ -C crate_hash=$(FORCE_CRATE_HASH) \
|
||||
-C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
|
||||
|
||||
RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
|
||||
--
|
||||
1.9.1
|
||||
2.10.0
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
From e9c6cf5d1a9bb7f50c5e98a660217062b510928b Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Tue, 18 Nov 2014 01:40:21 -0500
|
||||
Subject: [PATCH 1/3] Target: add default target.json path:
|
||||
$libdir/rust/targets
|
||||
|
||||
---
|
||||
src/librustc/session/config.rs | 6 +++---
|
||||
src/librustc/session/mod.rs | 8 ++++++--
|
||||
src/librustc_back/target/mod.rs | 12 ++++++++++--
|
||||
3 files changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index 5e3c8bc..15fd763 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -42,7 +42,7 @@ use std::hash::Hasher;
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::collections::HashSet;
|
||||
use std::iter::FromIterator;
|
||||
-use std::path::PathBuf;
|
||||
+use std::path::{Path, PathBuf};
|
||||
|
||||
pub struct Config {
|
||||
pub target: Target,
|
||||
@@ -1001,8 +1001,8 @@ pub fn build_configuration(sess: &Session,
|
||||
user_cfg
|
||||
}
|
||||
|
||||
-pub fn build_target_config(opts: &Options, sp: &Handler) -> Config {
|
||||
- let target = match Target::search(&opts.target_triple) {
|
||||
+pub fn build_target_config(sysroot: &Path, opts: &Options, sp: &Handler) -> Config {
|
||||
+ let target = match Target::search(sysroot, &opts.target_triple[..]) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
sp.struct_fatal(&format!("Error loading target specification: {}", e))
|
||||
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
|
||||
index 91765e6..29e5e5d 100644
|
||||
--- a/src/librustc/session/mod.rs
|
||||
+++ b/src/librustc/session/mod.rs
|
||||
@@ -575,13 +575,17 @@ pub fn build_session_(sopts: config::Options,
|
||||
codemap: Rc<codemap::CodeMap>,
|
||||
cstore: Rc<for<'a> CrateStore<'a>>)
|
||||
-> Session {
|
||||
- let host = match Target::search(config::host_triple()) {
|
||||
+ let sysroot = match sopts.maybe_sysroot {
|
||||
+ Some(ref x) => PathBuf::from(x),
|
||||
+ None => filesearch::get_or_default_sysroot()
|
||||
+ };
|
||||
+ let host = match Target::search(&sysroot, config::host_triple()) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
panic!(span_diagnostic.fatal(&format!("Error loading host specification: {}", e)));
|
||||
}
|
||||
};
|
||||
- let target_cfg = config::build_target_config(&sopts, &span_diagnostic);
|
||||
+ let target_cfg = config::build_target_config(&sysroot, &sopts, &span_diagnostic);
|
||||
let p_s = parse::ParseSess::with_span_handler(span_diagnostic, codemap);
|
||||
let default_sysroot = match sopts.maybe_sysroot {
|
||||
Some(_) => None,
|
||||
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs
|
||||
index 351d469..3282dbd 100644
|
||||
--- a/src/librustc_back/target/mod.rs
|
||||
+++ b/src/librustc_back/target/mod.rs
|
||||
@@ -51,6 +51,7 @@ use std::io::prelude::*;
|
||||
use syntax::abi::{Abi, lookup as lookup_abi};
|
||||
|
||||
use PanicStrategy;
|
||||
+use std::path::Path;
|
||||
|
||||
mod android_base;
|
||||
mod apple_base;
|
||||
@@ -625,12 +626,13 @@ impl Target {
|
||||
///
|
||||
/// The error string could come from any of the APIs called, including
|
||||
/// filesystem access and JSON decoding.
|
||||
- pub fn search(target: &str) -> Result<Target, String> {
|
||||
+ pub fn search(sysroot: &Path, target: &str) -> Result<Target, String> {
|
||||
use std::env;
|
||||
use std::ffi::OsString;
|
||||
use std::fs::File;
|
||||
use std::path::{Path, PathBuf};
|
||||
use serialize::json;
|
||||
+ use std::iter::IntoIterator;
|
||||
|
||||
fn load_file(path: &Path) -> Result<Target, String> {
|
||||
let mut f = File::open(path).map_err(|e| e.to_string())?;
|
||||
@@ -661,8 +663,14 @@ impl Target {
|
||||
.unwrap_or(OsString::new());
|
||||
|
||||
// FIXME 16351: add a sane default search path?
|
||||
+ let mut default_path = sysroot.to_owned();
|
||||
+ default_path.push(env!("CFG_LIBDIR_RELATIVE"));
|
||||
+ default_path.push("rustlib");
|
||||
|
||||
- for dir in env::split_paths(&target_path) {
|
||||
+ let paths = env::split_paths(&target_path)
|
||||
+ .chain(Some(default_path).into_iter());
|
||||
+
|
||||
+ for dir in paths {
|
||||
let p = dir.join(&path);
|
||||
if p.is_file() {
|
||||
return load_file(&p);
|
||||
--
|
||||
2.10.1 (Apple Git-78)
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
From bff536002eba2ed322d329d9022ccdc77da458a3 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Wed, 3 Dec 2014 19:15:19 -0500
|
||||
Subject: [PATCH 3/3] std/thread_local: workaround for NULL __dso_handle
|
||||
|
||||
---
|
||||
src/libstd/sys/unix/fast_thread_local.rs | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libstd/sys/unix/fast_thread_local.rs b/src/libstd/sys/unix/fast_thread_local.rs
|
||||
index 0c625e7..31e7146 100644
|
||||
--- a/src/libstd/sys/unix/fast_thread_local.rs
|
||||
+++ b/src/libstd/sys/unix/fast_thread_local.rs
|
||||
@@ -110,7 +110,7 @@ unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern fn(*mut u8)) {
|
||||
#[linkage = "extern_weak"]
|
||||
static __cxa_thread_atexit_impl: *const libc::c_void;
|
||||
}
|
||||
- if !__cxa_thread_atexit_impl.is_null() {
|
||||
+ if !__cxa_thread_atexit_impl.is_null() && !__dso_handle.is_null() {
|
||||
type F = unsafe extern fn(dtor: unsafe extern fn(*mut u8),
|
||||
arg: *mut u8,
|
||||
dso_handle: *mut u8) -> libc::c_int;
|
||||
--
|
||||
2.10.1 (Apple Git-78)
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
+++ llvm/src/llvm/include/llvm/CodeGen/CommandFlags.h.orig 2016-01-18 19:18:03.847470845 +0000
|
||||
+++ llvm/src/llvm/include/llvm/CodeGen/CommandFlags.h 2016-01-18 19:18:11.211408270 +0000
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "llvm/IR/Intrinsics.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/MC/MCTargetOptionsCommandFlags.h"
|
||||
-#include "llvm//MC/SubtargetFeature.h"
|
||||
+#include "llvm/MC/SubtargetFeature.h"
|
||||
#include "llvm/Support/CodeGen.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
@@ -1,349 +0,0 @@
|
||||
From 93ef6b8b93c7695280aba7f3541bf8f1ae18c722 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Mon, 24 Nov 2014 13:10:15 -0500
|
||||
Subject: [PATCH 5/9] configure: support --bindir, and extend libdir to
|
||||
non-blessed dirs
|
||||
|
||||
Adds --bindir, and:
|
||||
|
||||
Allows --bindir and --libdir to have multiple elements in their paths
|
||||
relative to sysroot, and allows libdir to end in an arbitrary directory
|
||||
(previously it was limited to lib, lib32, and lib64).
|
||||
|
||||
Note that this assumes absolute paths start with '/', which may break
|
||||
windows platforms
|
||||
---
|
||||
configure | 44 ++++++++++++++++++++-----
|
||||
mk/host.mk | 6 +++-
|
||||
mk/main.mk | 11 +++++++
|
||||
mk/perf.mk | 4 +--
|
||||
mk/prepare.mk | 27 +++++++---------
|
||||
src/librustc/session/filesearch.rs | 66 ++++++++++++++++----------------------
|
||||
src/librustc_trans/back/link.rs | 3 +-
|
||||
7 files changed, 94 insertions(+), 67 deletions(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 287b7b3..7d53a66 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -334,6 +334,32 @@ enable_if_not_disabled() {
|
||||
fi
|
||||
}
|
||||
|
||||
+abspath () {
|
||||
+ case "$1" in
|
||||
+ /*) echo "$1" ;;
|
||||
+ *) echo "$PWD/$1" ;;
|
||||
+ esac
|
||||
+}
|
||||
+
|
||||
+relpath () {
|
||||
+ local src=$(abspath "$1")
|
||||
+ local dst=$(abspath "$2")
|
||||
+ local common=$src
|
||||
+ local result=
|
||||
+
|
||||
+ # Start by checking if the whole src is common, then strip off pack
|
||||
+ # components until we find the common element.
|
||||
+ while [ "${dst#"$common"}" = "$dst" ]; do
|
||||
+ common=$(dirname "$common")
|
||||
+ result="../$result"
|
||||
+ done
|
||||
+
|
||||
+ local down="${dst#"$common"}"
|
||||
+ result="${result}${down#/}"
|
||||
+ echo "$result"
|
||||
+}
|
||||
+
|
||||
+
|
||||
to_llvm_triple() {
|
||||
case $1 in
|
||||
i686-w64-mingw32) echo i686-pc-windows-gnu ;;
|
||||
@@ -652,18 +678,19 @@ putvar CFG_BUILD # Yes, this creates a duplicate entry, but the last one wins.
|
||||
CFG_HOST=$(to_llvm_triple $CFG_HOST)
|
||||
CFG_TARGET=$(to_llvm_triple $CFG_TARGET)
|
||||
|
||||
+CFG_LIBDIR_RELATIVE=lib
|
||||
+
|
||||
# On Windows this determines root of the subtree for target libraries.
|
||||
# Host runtime libs always go to 'bin'.
|
||||
-valopt libdir "${CFG_PREFIX}/lib" "install libraries"
|
||||
+valopt libdir "${CFG_PREFIX}/${CFG_LIBDIR_RELATIVE}" "install libraries"
|
||||
|
||||
-case "$CFG_LIBDIR" in
|
||||
- "$CFG_PREFIX"/*) CAT_INC=2;;
|
||||
- "$CFG_PREFIX"*) CAT_INC=1;;
|
||||
- *)
|
||||
- err "libdir must begin with the prefix. Use --prefix to set it accordingly.";;
|
||||
-esac
|
||||
+CFG_BINDIR_RELATIVE=bin
|
||||
+valopt bindir "${CFG_PREFIX}/${CFG_BINDIR_RELATIVE}" "install binaries"
|
||||
|
||||
-CFG_LIBDIR_RELATIVE=`echo ${CFG_LIBDIR} | cut -c$((${#CFG_PREFIX}+${CAT_INC}))-`
|
||||
+# Determine libdir and bindir relative to prefix
|
||||
+step_msg "calculating relative paths to prefix = ${CFG_PREFIX}"
|
||||
+CFG_BINDIR_RELATIVE=$(relpath "${CFG_PREFIX}" "${CFG_BINDIR}")
|
||||
+CFG_LIBDIR_RELATIVE=$(relpath "${CFG_PREFIX}" "${CFG_LIBDIR}")
|
||||
|
||||
if [ $HELP -eq 1 ]
|
||||
then
|
||||
@@ -1760,6 +1787,7 @@ putvar CFG_PREFIX
|
||||
putvar CFG_HOST
|
||||
putvar CFG_TARGET
|
||||
putvar CFG_LIBDIR_RELATIVE
|
||||
+putvar CFG_BINDIR_RELATIVE
|
||||
putvar CFG_DISABLE_MANAGE_SUBMODULES
|
||||
putvar CFG_AARCH64_LINUX_ANDROID_NDK
|
||||
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
|
||||
diff --git a/mk/host.mk b/mk/host.mk
|
||||
index 59a0095..b8e8345 100644
|
||||
--- a/mk/host.mk
|
||||
+++ b/mk/host.mk
|
||||
@@ -59,9 +59,13 @@ endef
|
||||
# $(4) - the host triple (same as $(3))
|
||||
define CP_HOST_STAGE_N
|
||||
|
||||
-ifneq ($(CFG_LIBDIR_RELATIVE),bin)
|
||||
$$(HLIB$(2)_H_$(4))/:
|
||||
@mkdir -p $$@
|
||||
+
|
||||
+# Avoid redefinition warnings if libdir==bindir
|
||||
+ifneq ($(HBIN$(2)_H_$(4)),$(HLIB$(2)_H_$(4)))
|
||||
+$$(HBIN$(2)_H_$(4))/:
|
||||
+ @mkdir -p $$@
|
||||
endif
|
||||
|
||||
endef
|
||||
diff --git a/mk/main.mk b/mk/main.mk
|
||||
index 04b3e25..ba11e5e 100644
|
||||
--- a/mk/main.mk
|
||||
+++ b/mk/main.mk
|
||||
@@ -351,7 +351,9 @@ export CFG_RELEASE_CHANNEL
|
||||
export CFG_LLVM_ROOT
|
||||
export CFG_PREFIX
|
||||
export CFG_LIBDIR
|
||||
+export CFG_BINDIR
|
||||
export CFG_LIBDIR_RELATIVE
|
||||
+export CFG_BINDIR_RELATIVE
|
||||
export CFG_DISABLE_INJECT_STD_VERSION
|
||||
ifdef CFG_DISABLE_UNSTABLE_FEATURES
|
||||
CFG_INFO := $(info cfg: disabling unstable features (CFG_DISABLE_UNSTABLE_FEATURES))
|
||||
@@ -381,7 +383,16 @@ define SREQ
|
||||
|
||||
# Destinations of artifacts for the host compiler
|
||||
HROOT$(1)_H_$(3) = $(3)/stage$(1)
|
||||
+
|
||||
+ifeq ($(1)-$(3),0-$$(CFG_BUILD))
|
||||
+# stage0 relative paths are fixed so we can bootstrap from snapshots
|
||||
+# (downloaded snapshots drop their rustc in HROOT/bin)
|
||||
+# libdir discrepancy is worked around with RUSTFLAGS below.
|
||||
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
|
||||
+else
|
||||
+HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_BINDIR_RELATIVE)
|
||||
+endif
|
||||
+
|
||||
|
||||
HLIB_RELATIVE$(1)_H_$(3) = $$(CFG_LIBDIR_RELATIVE)
|
||||
|
||||
diff --git a/mk/perf.mk b/mk/perf.mk
|
||||
index 16cbaab..f8a354c 100644
|
||||
--- a/mk/perf.mk
|
||||
+++ b/mk/perf.mk
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
|
||||
ifdef CFG_PERF_TOOL
|
||||
-rustc-perf$(X): $(CFG_BUILD)/stage2/bin/rustc$(X_$(CFG_BUILD))
|
||||
+rustc-perf$(X): $(CFG_BUILD)/stage2/$(CFG_BINDIR_RELATIVE)/rustc$(X_$(CFG_BUILD))
|
||||
@$(call E, perf compile: $@)
|
||||
$(PERF_STAGE2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) \
|
||||
-o $@ $(COMPILER_CRATE) >rustc-perf.err 2>&1
|
||||
$(Q)rm -f $(LIBRUSTC_GLOB)
|
||||
else
|
||||
-rustc-perf$(X): $(CFG_BUILD)/stage2/bin/rustc$(X_$(CFG_BUILD))
|
||||
+rustc-perf$(X): $(CFG_BUILD)/stage2/$(CFG_BINDIR_RELATIVE)/rustc$(X_$(CFG_BUILD))
|
||||
$(Q)touch $@
|
||||
endif
|
||||
|
||||
diff --git a/mk/prepare.mk b/mk/prepare.mk
|
||||
index 87a4450..c358bbc 100644
|
||||
--- a/mk/prepare.mk
|
||||
+++ b/mk/prepare.mk
|
||||
@@ -90,8 +90,6 @@ PREPARE_TOOLS = $(filter-out compiletest rustbook error-index-generator, $(TOOLS
|
||||
# $(3) is host
|
||||
# $(4) tag
|
||||
define DEF_PREPARE_HOST_TOOL
|
||||
-prepare-host-tool-$(1)-$(2)-$(3)-$(4): \
|
||||
- PREPARE_SOURCE_BIN_DIR=$$(HBIN$(2)_H_$(3))
|
||||
prepare-host-tool-$(1)-$(2)-$(3)-$(4): prepare-maybe-clean-$(4) \
|
||||
$$(foreach dep,$$(TOOL_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4)) \
|
||||
$$(HBIN$(2)_H_$(3))/$(1)$$(X_$(3)) \
|
||||
@@ -117,10 +115,8 @@ PREPARE_TAR_LIB_DIR = $(patsubst $(CFG_LIBDIR_RELATIVE)%,lib%,$(1))
|
||||
# $(3) is host
|
||||
# $(4) tag
|
||||
define DEF_PREPARE_HOST_LIB
|
||||
-prepare-host-lib-$(1)-$(2)-$(3)-$(4): \
|
||||
- PREPARE_WORKING_SOURCE_LIB_DIR=$$(HLIB$(2)_H_$(3))
|
||||
-prepare-host-lib-$(1)-$(2)-$(3)-$(4): \
|
||||
- PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(call PREPARE_TAR_LIB_DIR,$$(HLIB_RELATIVE$(2)_H_$(3)))
|
||||
+prepare-host-lib-$(1)-$(2)-$(3)-$(4): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR)
|
||||
+prepare-host-lib-$(1)-$(2)-$(3)-$(4): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR)
|
||||
prepare-host-lib-$(1)-$(2)-$(3)-$(4): prepare-maybe-clean-$(4) \
|
||||
$$(foreach dep,$$(RUST_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4)) \
|
||||
$$(HLIB$(2)_H_$(3))/stamp.$(1) \
|
||||
@@ -138,14 +134,10 @@ endef
|
||||
# $(4) tag
|
||||
define DEF_PREPARE_TARGET_N
|
||||
# Rebind PREPARE_*_LIB_DIR to point to rustlib, then install the libs for the targets
|
||||
-prepare-target-$(2)-host-$(3)-$(1)-$(4): \
|
||||
- PREPARE_WORKING_SOURCE_LIB_DIR=$$(TLIB$(1)_T_$(2)_H_$(3))
|
||||
-prepare-target-$(2)-host-$(3)-$(1)-$(4): \
|
||||
- PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR)/rustlib/$(2)/lib
|
||||
-prepare-target-$(2)-host-$(3)-$(1)-$(4): \
|
||||
- PREPARE_SOURCE_BIN_DIR=$$(TBIN$(1)_T_$(2)_H_$(3))
|
||||
-prepare-target-$(2)-host-$(3)-$(1)-$(4): \
|
||||
- PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_LIB_DIR)/rustlib/$(3)/bin
|
||||
+prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_WORKING_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_LIB_DIR)/rustlib/$(2)/lib
|
||||
+prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_LIB_DIR)/rustlib/$(2)/lib
|
||||
+prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_SOURCE_BIN_DIR=$$(PREPARE_SOURCE_LIB_DIR)/rustlib/$(3)/bin
|
||||
+prepare-target-$(2)-host-$(3)-$(1)-$(4): PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_LIB_DIR)/rustlib/$(3)/bin
|
||||
prepare-target-$(2)-host-$(3)-$(1)-$(4): prepare-maybe-clean-$(4) \
|
||||
$$(foreach crate,$$(TARGET_CRATES), \
|
||||
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate)) \
|
||||
@@ -198,9 +190,12 @@ INSTALL_DEBUGGER_SCRIPT_COMMANDS=$(if $(findstring windows,$(1)),\
|
||||
|
||||
define DEF_PREPARE
|
||||
|
||||
+prepare-base-$(1)-%: PREPARE_SOURCE_DIR=$$(PREPARE_HOST)/stage$$(PREPARE_STAGE)
|
||||
+prepare-base-$(1)-%: PREPARE_SOURCE_BIN_DIR=$$(PREPARE_SOURCE_DIR)/$$(CFG_BINDIR_RELATIVE)
|
||||
+prepare-base-$(1)-%: PREPARE_SOURCE_LIB_DIR=$$(PREPARE_SOURCE_DIR)/$$(CFG_LIBDIR_RELATIVE)
|
||||
prepare-base-$(1)-%: PREPARE_SOURCE_MAN_DIR=$$(S)/man
|
||||
-prepare-base-$(1)-%: PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_DIR)/bin
|
||||
-prepare-base-$(1)-%: PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(call PREPARE_TAR_LIB_DIR,$$(CFG_LIBDIR_RELATIVE))
|
||||
+prepare-base-$(1)-%: PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_BINDIR_RELATIVE)
|
||||
+prepare-base-$(1)-%: PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELATIVE)
|
||||
prepare-base-$(1)-%: PREPARE_DEST_MAN_DIR=$$(PREPARE_DEST_DIR)/share/man/man1
|
||||
|
||||
prepare-base-$(1)-target: prepare-target-$(1)
|
||||
diff --git a/src/librustc/session/filesearch.rs b/src/librustc/session/filesearch.rs
|
||||
index 09c6b54..00736c6 100644
|
||||
--- a/src/librustc/session/filesearch.rs
|
||||
+++ b/src/librustc/session/filesearch.rs
|
||||
@@ -124,7 +124,7 @@ impl<'a> FileSearch<'a> {
|
||||
// Returns a list of directories where target-specific tool binaries are located.
|
||||
pub fn get_tools_search_paths(&self) -> Vec<PathBuf> {
|
||||
let mut p = PathBuf::from(self.sysroot);
|
||||
- p.push(&find_libdir(self.sysroot));
|
||||
+ p.push(libdir_str());
|
||||
p.push(&rustlibdir());
|
||||
p.push(&self.triple);
|
||||
p.push("bin");
|
||||
@@ -132,8 +132,8 @@ impl<'a> FileSearch<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
-pub fn relative_target_lib_path(sysroot: &Path, target_triple: &str) -> PathBuf {
|
||||
- let mut p = PathBuf::from(&find_libdir(sysroot));
|
||||
+pub fn relative_target_lib_path(target_triple: &str) -> PathBuf {
|
||||
+ let mut p = PathBuf::from(&libdir_str());
|
||||
assert!(p.is_relative());
|
||||
p.push(&rustlibdir());
|
||||
p.push(target_triple);
|
||||
@@ -143,7 +143,19 @@ pub fn relative_target_lib_path(sysroot: &Path, target_triple: &str) -> PathBuf
|
||||
|
||||
fn make_target_lib_path(sysroot: &Path,
|
||||
target_triple: &str) -> PathBuf {
|
||||
- sysroot.join(&relative_target_lib_path(sysroot, target_triple))
|
||||
+ sysroot.join(&relative_target_lib_path(target_triple))
|
||||
+}
|
||||
+
|
||||
+pub fn bindir_relative_str() -> &'static str {
|
||||
+ env!("CFG_BINDIR_RELATIVE")
|
||||
+}
|
||||
+
|
||||
+pub fn bindir_relative_path() -> PathBuf {
|
||||
+ PathBuf::from(bindir_relative_str())
|
||||
+}
|
||||
+
|
||||
+pub fn libdir_str() -> &'static str {
|
||||
+ env!("CFG_LIBDIR_RELATIVE")
|
||||
}
|
||||
|
||||
pub fn get_or_default_sysroot() -> PathBuf {
|
||||
@@ -161,44 +173,22 @@ pub fn get_or_default_sysroot() -> PathBuf {
|
||||
}
|
||||
|
||||
match canonicalize(env::current_exe().ok()) {
|
||||
- Some(mut p) => { p.pop(); p.pop(); p }
|
||||
+ Some(mut p) => {
|
||||
+ // Remove the exe name
|
||||
+ p.pop();
|
||||
+ let mut rel = bindir_relative_path();
|
||||
+
|
||||
+ // Remove a number of elements equal to the number of elements in the bindir relative
|
||||
+ // path
|
||||
+ while rel.pop() {
|
||||
+ p.pop();
|
||||
+ }
|
||||
+ p
|
||||
+ }
|
||||
None => panic!("can't determine value for sysroot")
|
||||
}
|
||||
}
|
||||
|
||||
-// The name of the directory rustc expects libraries to be located.
|
||||
-fn find_libdir(sysroot: &Path) -> String {
|
||||
- // FIXME: This is a quick hack to make the rustc binary able to locate
|
||||
- // Rust libraries in Linux environments where libraries might be installed
|
||||
- // to lib64/lib32. This would be more foolproof by basing the sysroot off
|
||||
- // of the directory where librustc is located, rather than where the rustc
|
||||
- // binary is.
|
||||
- //If --libdir is set during configuration to the value other than
|
||||
- // "lib" (i.e. non-default), this value is used (see issue #16552).
|
||||
-
|
||||
- match option_env!("CFG_LIBDIR_RELATIVE") {
|
||||
- Some(libdir) if libdir != "lib" => return libdir.to_string(),
|
||||
- _ => if sysroot.join(&primary_libdir_name()).join(&rustlibdir()).exists() {
|
||||
- return primary_libdir_name();
|
||||
- } else {
|
||||
- return secondary_libdir_name();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- #[cfg(target_pointer_width = "64")]
|
||||
- fn primary_libdir_name() -> String {
|
||||
- "lib64".to_string()
|
||||
- }
|
||||
-
|
||||
- #[cfg(target_pointer_width = "32")]
|
||||
- fn primary_libdir_name() -> String {
|
||||
- "lib32".to_string()
|
||||
- }
|
||||
-
|
||||
- fn secondary_libdir_name() -> String {
|
||||
- "lib".to_string()
|
||||
- }
|
||||
-}
|
||||
|
||||
// The name of rustc's own place to organize libraries.
|
||||
// Used to be "rustc", now the default is "rustlib"
|
||||
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
|
||||
index ec1383f..670d637 100644
|
||||
--- a/src/librustc_trans/back/link.rs
|
||||
+++ b/src/librustc_trans/back/link.rs
|
||||
@@ -1042,11 +1042,10 @@ fn link_args(cmd: &mut Linker,
|
||||
// where extern libraries might live, based on the
|
||||
// addl_lib_search_paths
|
||||
if sess.opts.cg.rpath {
|
||||
- let sysroot = sess.sysroot();
|
||||
let target_triple = &sess.opts.target_triple;
|
||||
let mut get_install_prefix_lib_path = || {
|
||||
let install_prefix = option_env!("CFG_PREFIX").expect("CFG_PREFIX");
|
||||
- let tlib = filesearch::relative_target_lib_path(sysroot, target_triple);
|
||||
+ let tlib = filesearch::relative_target_lib_path(target_triple);
|
||||
let mut path = PathBuf::from(install_prefix);
|
||||
path.push(&tlib);
|
||||
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 8e359ae2b44fe2edd863e460346554c73f460ba7 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Tue, 7 Jul 2015 14:57:42 -0400
|
||||
Subject: [PATCH 9/9] Remove crate metadata from symbol hashing
|
||||
|
||||
---
|
||||
src/librustc_trans/back/link.rs | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
|
||||
index 670d637..4e7150e 100644
|
||||
--- a/src/librustc_trans/back/link.rs
|
||||
+++ b/src/librustc_trans/back/link.rs
|
||||
@@ -213,11 +213,6 @@ fn symbol_hash<'tcx>(tcx: &ty::ctxt<'tcx>,
|
||||
symbol_hasher.reset();
|
||||
symbol_hasher.input_str(&link_meta.crate_name);
|
||||
symbol_hasher.input_str("-");
|
||||
- symbol_hasher.input_str(link_meta.crate_hash.as_str());
|
||||
- for meta in tcx.sess.crate_metadata.borrow().iter() {
|
||||
- symbol_hasher.input_str(&meta[..]);
|
||||
- }
|
||||
- symbol_hasher.input_str("-");
|
||||
symbol_hasher.input(&tcx.sess.cstore.encode_type(tcx, t));
|
||||
// Prefix with 'h' so that it never blends into adjacent digits
|
||||
let mut hash = String::from("h");
|
||||
--
|
||||
2.4.10
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
From 04eee951641b9d9c580ee21c481bdf979dc2fe30 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Tue, 7 Jul 2015 16:49:44 -0400
|
||||
Subject: [PATCH 10/12] rustc_trans: make .note.rustc look more like debug info
|
||||
|
||||
Mark the global variable as const and private so the resulting section
|
||||
is not flagged as writable and to avoid putting an unnecessary symbol in
|
||||
the dynamic table of shared objects.
|
||||
|
||||
Unfortunately there doesn't seem to be a way to avoid the section being
|
||||
marked SHF_ALLOC when declared as a variable in LLVM. Hack around that
|
||||
by using objcopy to clear the flags on the section before the final
|
||||
link.
|
||||
|
||||
This places the section at the end of the executable so it can be
|
||||
stripped later without rearranging important code/data sections.
|
||||
---
|
||||
mk/platform.mk | 1 +
|
||||
src/librustc/session/config.rs | 2 ++
|
||||
src/librustc_back/target/mod.rs | 4 ++++
|
||||
src/librustc_trans/back/link.rs | 36 ++++++++++++++++++++++++++++++++++++
|
||||
src/librustc_trans/trans/base.rs | 3 +++
|
||||
5 files changed, 46 insertions(+)
|
||||
|
||||
diff --git a/mk/platform.mk b/mk/platform.mk
|
||||
index 5239086..eb693b8 100644
|
||||
--- a/mk/platform.mk
|
||||
+++ b/mk/platform.mk
|
||||
@@ -186,6 +186,7 @@ define CFG_MAKE_TOOLCHAIN
|
||||
AR_$(1)=$(CROSS_PREFIX_$(1))$(AR_$(1))
|
||||
LINK_$(1)=$(CROSS_PREFIX_$(1))$(LINK_$(1))
|
||||
RUSTC_CROSS_FLAGS_$(1)=-C linker=$$(call FIND_COMPILER,$$(LINK_$(1))) \
|
||||
+ -C objcopy=$$(call FIND_COMPILER,$$(OBJCOPY_$(1))) \
|
||||
-C ar=$$(call FIND_COMPILER,$$(AR_$(1))) $(RUSTC_CROSS_FLAGS_$(1))
|
||||
|
||||
RUSTC_FLAGS_$(1)=$$(RUSTC_CROSS_FLAGS_$(1)) $(RUSTC_FLAGS_$(1))
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index 4cc059b..600cb4b 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -497,6 +497,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
||||
CG_OPTIONS, cg_type_desc, cgsetters,
|
||||
ar: Option<String> = (None, parse_opt_string,
|
||||
"tool to assemble archives with"),
|
||||
+ objcopy: Option<String> = (None, parse_opt_string,
|
||||
+ "system objcopy for manipulating objects"),
|
||||
linker: Option<String> = (None, parse_opt_string,
|
||||
"system linker to link outputs with"),
|
||||
link_args: Option<Vec<String>> = (None, parse_opt_list,
|
||||
diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs
|
||||
index 636a1aa..1b87a7a 100644
|
||||
--- a/src/librustc_back/target/mod.rs
|
||||
+++ b/src/librustc_back/target/mod.rs
|
||||
@@ -118,6 +118,8 @@ pub struct TargetOptions {
|
||||
/// Linker arguments that are unconditionally passed *after* any
|
||||
/// user-defined libraries.
|
||||
pub post_link_args: Vec<String>,
|
||||
+ /// Path to objcopy. Defaults to "objcopy".
|
||||
+ pub objcopy: String,
|
||||
|
||||
/// Default CPU to pass to LLVM. Corresponds to `llc -mcpu=$cpu`. Defaults
|
||||
/// to "default".
|
||||
@@ -213,6 +215,7 @@ impl Default for TargetOptions {
|
||||
ar: option_env!("CFG_DEFAULT_AR").unwrap_or("ar").to_string(),
|
||||
pre_link_args: Vec::new(),
|
||||
post_link_args: Vec::new(),
|
||||
+ objcopy: "objcopy".to_string(),
|
||||
cpu: "generic".to_string(),
|
||||
features: "".to_string(),
|
||||
dynamic_linking: false,
|
||||
@@ -331,6 +334,7 @@ impl Target {
|
||||
key!(cpu);
|
||||
key!(ar);
|
||||
key!(linker);
|
||||
+ key!(objcopy);
|
||||
key!(relocation_model);
|
||||
key!(code_model);
|
||||
key!(dll_prefix);
|
||||
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
|
||||
index 4e7150e..0d8a125 100644
|
||||
--- a/src/librustc_trans/back/link.rs
|
||||
+++ b/src/librustc_trans/back/link.rs
|
||||
@@ -394,6 +394,13 @@ fn command_path(sess: &Session) -> OsString {
|
||||
env::join_paths(new_path).unwrap()
|
||||
}
|
||||
|
||||
+pub fn get_objcopy_prog(sess: &Session) -> String {
|
||||
+ match sess.opts.cg.objcopy {
|
||||
+ Some(ref objcopy) => return objcopy.to_string(),
|
||||
+ None => sess.target.target.options.objcopy.clone(),
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
pub fn remove(sess: &Session, path: &Path) {
|
||||
match fs::remove_file(path) {
|
||||
Ok(..) => {}
|
||||
@@ -928,6 +935,32 @@ fn link_natively(sess: &Session, dylib: bool,
|
||||
}
|
||||
}
|
||||
|
||||
+fn fix_meta_section_attributes(sess: &Session, meta_name: &PathBuf) {
|
||||
+ // First, fix up the note section attributes. We want the SHF_ALLOC and
|
||||
+ // SHF_WRITE flags to be unset so the section will get placed near the
|
||||
+ // end along with the debug info. This allows the section to be
|
||||
+ // stripped later without renumbering important sections that
|
||||
+ // contain code and data.
|
||||
+ let objcopy = get_objcopy_prog(sess);
|
||||
+ let mut o_cmd = Command::new(&objcopy);
|
||||
+ o_cmd.arg("--rename-section")
|
||||
+ .arg(".note.rustc=.note.rustc,contents,noload,readonly")
|
||||
+ .arg(&meta_name);
|
||||
+ // Invoke objcopy
|
||||
+ info!("{:?}", o_cmd);
|
||||
+ match o_cmd.status() {
|
||||
+ Ok(exitstatus) => {
|
||||
+ if !exitstatus.success() {
|
||||
+ sess.err(&format!("objcopy failed with exit code {:?}", exitstatus.code()));
|
||||
+ }
|
||||
+ },
|
||||
+ Err(exitstatus) => {
|
||||
+ sess.err(&format!("objcopy failed: {}", exitstatus));
|
||||
+ }
|
||||
+ }
|
||||
+ sess.abort_if_errors();
|
||||
+}
|
||||
+
|
||||
fn link_args(cmd: &mut Linker,
|
||||
sess: &Session,
|
||||
dylib: bool,
|
||||
@@ -960,6 +993,9 @@ fn link_args(cmd: &mut Linker,
|
||||
// executable. This metadata is in a separate object file from the main
|
||||
// object file, so we link that in here.
|
||||
if dylib {
|
||||
+ let meta_name = outputs.with_extension("metadata.o");
|
||||
+
|
||||
+ fix_meta_section_attributes(sess, &meta_name);
|
||||
cmd.add_object(&outputs.with_extension("metadata.o"));
|
||||
}
|
||||
|
||||
diff --git a/src/librustc_trans/trans/base.rs b/src/librustc_trans/trans/base.rs
|
||||
index 4c619f8..2b68767 100644
|
||||
--- a/src/librustc_trans/trans/base.rs
|
||||
+++ b/src/librustc_trans/trans/base.rs
|
||||
@@ -2924,6 +2924,9 @@ pub fn write_metadata<'a, 'tcx>(cx: &SharedCrateContext<'a, 'tcx>,
|
||||
};
|
||||
unsafe {
|
||||
llvm::LLVMSetInitializer(llglobal, llconst);
|
||||
+ llvm::LLVMSetGlobalConstant(llglobal, llvm::True);
|
||||
+ llvm::LLVMSetUnnamedAddr(llglobal, llvm::True);
|
||||
+ llvm::SetLinkage(llglobal, llvm::Linkage::PrivateLinkage);
|
||||
let name =
|
||||
cx.tcx().sess.cstore.metadata_section_name(&cx.sess().target.target);
|
||||
let name = CString::new(name).unwrap();
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
From b6805ab1099ca824bb516da4f1825a7e4ce30153 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Wed, 18 Nov 2015 08:33:26 -0500
|
||||
Subject: [PATCH 11/12] Allow overriding crate_hash with -C crate_hash
|
||||
|
||||
The current crate hash is not stable from run-to-run. This causes
|
||||
problems with bitbake; it needs a guarantee that every build with the
|
||||
same input will generate compatible output, otherwise sstate won't work.
|
||||
Using -C crate_hash, we can do that by using the bitbake input hash to
|
||||
determine the crate hash; the bitbake input hash will be stable, but
|
||||
still different for different rust recipes.
|
||||
---
|
||||
src/librustc/session/config.rs | 2 ++
|
||||
src/librustc_trans/back/link.rs | 28 ++++++++++++++++++++++++++--
|
||||
2 files changed, 28 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index 600cb4b..3570e78 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -537,6 +537,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
||||
"choose the code model to use (llc -code-model for details)"),
|
||||
metadata: Vec<String> = (Vec::new(), parse_list,
|
||||
"metadata to mangle symbol names with"),
|
||||
+ crate_hash: String = ("".to_string(), parse_string,
|
||||
+ "override crate hash with given value"),
|
||||
extra_filename: String = ("".to_string(), parse_string,
|
||||
"extra data to put in each output filename"),
|
||||
codegen_units: usize = (1, parse_uint,
|
||||
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
|
||||
index 0d8a125..9917a1e 100644
|
||||
--- a/src/librustc_trans/back/link.rs
|
||||
+++ b/src/librustc_trans/back/link.rs
|
||||
@@ -45,7 +45,7 @@ use std::str;
|
||||
use flate;
|
||||
use serialize::hex::ToHex;
|
||||
use syntax::ast;
|
||||
-use syntax::codemap::Span;
|
||||
+use syntax::codemap::{Span,BytePos,NO_EXPANSION};
|
||||
use syntax::parse::token::{self, InternedString};
|
||||
use syntax::attr::AttrMetaMethods;
|
||||
|
||||
@@ -186,9 +186,33 @@ pub fn build_link_meta(sess: &Session,
|
||||
krate: &hir::Crate,
|
||||
name: &str)
|
||||
-> LinkMeta {
|
||||
+ use std::collections::BTreeMap;
|
||||
+ let crate_hash = if sess.opts.cg.crate_hash != "" {
|
||||
+ let dummy_span = Span {
|
||||
+ lo: BytePos(0),
|
||||
+ hi: BytePos(0),
|
||||
+ expn_id: NO_EXPANSION
|
||||
+ };
|
||||
+ let dummy_module = hir::Mod {
|
||||
+ inner: dummy_span,
|
||||
+ item_ids: hir::HirVec::new()
|
||||
+ };
|
||||
+ let dummy_krate = hir::Crate {
|
||||
+ module: dummy_module,
|
||||
+ attrs: hir::HirVec::new(),
|
||||
+ config: hir::CrateConfig::new(),
|
||||
+ span: dummy_span,
|
||||
+ exported_macros: hir::HirVec::new(),
|
||||
+ items: BTreeMap::new()
|
||||
+ };
|
||||
+
|
||||
+ Svh::calculate(&vec!(sess.opts.cg.crate_hash.clone()), &dummy_krate)
|
||||
+ } else {
|
||||
+ Svh::calculate(&sess.opts.cg.metadata, krate)
|
||||
+ };
|
||||
let r = LinkMeta {
|
||||
crate_name: name.to_owned(),
|
||||
- crate_hash: Svh::calculate(&sess.opts.cg.metadata, krate),
|
||||
+ crate_hash: crate_hash,
|
||||
};
|
||||
info!("{:?}", r);
|
||||
return r;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
From f3e8bd9ab353d4b3d7432a02e37a22eed24b5e57 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Thu, 4 Feb 2016 10:44:23 -0500
|
||||
Subject: [PATCH] mk: allow changing the platform configuration source
|
||||
directory
|
||||
|
||||
---
|
||||
configure | 4 +++-
|
||||
mk/platform.mk | 2 +-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 7d53a66..5d40516 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -671,6 +671,7 @@ valopt_nosave local-rust-root "/usr/local" "set prefix for local rust binary"
|
||||
valopt_nosave host "${CFG_BUILD}" "GNUs ./configure syntax LLVM host triples"
|
||||
valopt_nosave target "${CFG_HOST}" "GNUs ./configure syntax LLVM target triples"
|
||||
valopt_nosave mandir "${CFG_PREFIX}/share/man" "install man pages in PATH"
|
||||
+valopt_nosave platform-cfg "${CFG_SRC_DIR}/mk/cfg" "Location platform configuration for non-rust code"
|
||||
|
||||
# Temporarily support old triples until buildbots get updated
|
||||
CFG_BUILD=$(to_llvm_triple $CFG_BUILD)
|
||||
@@ -1127,7 +1128,7 @@ CFG_MANDIR=${CFG_MANDIR%/}
|
||||
CFG_HOST="$(echo $CFG_HOST | tr ',' ' ')"
|
||||
CFG_TARGET="$(echo $CFG_TARGET | tr ',' ' ')"
|
||||
CFG_SUPPORTED_TARGET=""
|
||||
-for target_file in ${CFG_SRC_DIR}mk/cfg/*.mk; do
|
||||
+for target_file in ${CFG_PLATFORM_CFG}/*.mk; do
|
||||
CFG_SUPPORTED_TARGET="${CFG_SUPPORTED_TARGET} $(basename "$target_file" .mk)"
|
||||
done
|
||||
|
||||
@@ -1795,6 +1796,7 @@ putvar CFG_I686_LINUX_ANDROID_NDK
|
||||
putvar CFG_NACL_CROSS_PATH
|
||||
putvar CFG_MANDIR
|
||||
putvar CFG_USING_LIBCPP
|
||||
+putvar CFG_PLATFORM_CFG
|
||||
|
||||
# Avoid spurious warnings from clang by feeding it original source on
|
||||
# ccache-miss rather than preprocessed input.
|
||||
diff --git a/mk/platform.mk b/mk/platform.mk
|
||||
index e6317b5..68a20e1 100644
|
||||
--- a/mk/platform.mk
|
||||
+++ b/mk/platform.mk
|
||||
@@ -114,7 +114,7 @@ $(foreach cvar,CC CXX CPP CFLAGS CXXFLAGS CPPFLAGS, \
|
||||
|
||||
CFG_RLIB_GLOB=lib$(1)-*.rlib
|
||||
|
||||
-include $(wildcard $(CFG_SRC_DIR)mk/cfg/*.mk)
|
||||
+include $(wildcard $(CFG_PLATFORM_CFG)/*.mk)
|
||||
|
||||
define ADD_INSTALLED_OBJECTS
|
||||
INSTALLED_OBJECTS_$(1) += $$(CFG_INSTALLED_OBJECTS_$(1))
|
||||
--
|
||||
2.7.0
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
diff --git a/src/libstd/rand/os.rs b/src/libstd/rand/os.rs
|
||||
index 92c3bf8..b9fd014 100644
|
||||
--- a/src/libstd/rand/os.rs
|
||||
+++ b/src/libstd/rand/os.rs
|
||||
@@ -46,8 +46,10 @@
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
const NR_GETRANDOM: libc::c_long = 278;
|
||||
|
||||
+ const GRND_NONBLOCK: libc::c_uint = 0x0001;
|
||||
+
|
||||
unsafe {
|
||||
- libc::syscall(NR_GETRANDOM, buf.as_mut_ptr(), buf.len(), 0)
|
||||
+ libc::syscall(NR_GETRANDOM, buf.as_mut_ptr(), buf.len(), GRND_NONBLOCK)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +71,10 @@
|
||||
let err = errno() as libc::c_int;
|
||||
if err == libc::EINTR {
|
||||
continue;
|
||||
+ } else if err == libc::EAGAIN {
|
||||
+ let mut reader_rng = ReaderRng::new(File::open("/dev/urandom").unwrap());
|
||||
+ reader_rng.fill_bytes(&mut v[read..]);
|
||||
+ read += v.len() as usize;
|
||||
} else {
|
||||
panic!("unexpected getrandom error: {}", err);
|
||||
}
|
||||
|
||||
25
recipes-devtools/rust/libstd-rs.inc
Normal file
25
recipes-devtools/rust/libstd-rs.inc
Normal file
@@ -0,0 +1,25 @@
|
||||
SUMMARY = "Rust standard libaries"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
|
||||
|
||||
RUSTLIB_DEP = ""
|
||||
inherit cargo
|
||||
|
||||
# Needed so cargo can find libbacktrace
|
||||
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
|
||||
|
||||
do_compile_prepend () {
|
||||
cd ${S}/src/rustc/std_shim
|
||||
export CARGO_TARGET_DIR="${B}"
|
||||
# For Rust 1.12.1 and lower
|
||||
export RUSTC_BOOTSTRAP_KEY="${RS_KEY}"
|
||||
# For Rust 1.13.0 and newer
|
||||
export RUSTC_BOOTSTRAP="1"
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${rustlibdir}
|
||||
cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir}
|
||||
}
|
||||
11
recipes-devtools/rust/libstd-rs_1.12.1.bb
Normal file
11
recipes-devtools/rust/libstd-rs_1.12.1.bb
Normal file
@@ -0,0 +1,11 @@
|
||||
require rust-source-${PV}.inc
|
||||
require libstd-rs.inc
|
||||
|
||||
SRC_URI += "\
|
||||
crate://crates.io/gcc/0.3.27 \
|
||||
"
|
||||
|
||||
# not necessary from Rust 1.15.x and newer as its built
|
||||
# as a cargo crate with libstd
|
||||
DEPENDS += "compiler-rt (=${PV})"
|
||||
|
||||
19
recipes-devtools/rust/libstd-rs_1.15.1.bb
Normal file
19
recipes-devtools/rust/libstd-rs_1.15.1.bb
Normal file
@@ -0,0 +1,19 @@
|
||||
require rust-source-${PV}.inc
|
||||
require libstd-rs.inc
|
||||
|
||||
EXTRA_OECONF = "--disable-rustbuild"
|
||||
|
||||
CARGO_BUILD_FLAGS += "--features 'jemalloc panic-unwind'"
|
||||
|
||||
SRC_URI += "\
|
||||
crate://crates.io/cmake/0.1.18 \
|
||||
crate://crates.io/env_logger/0.3.5 \
|
||||
crate://crates.io/filetime/0.1.10 \
|
||||
crate://crates.io/gcc/0.3.40 \
|
||||
crate://crates.io/getopts/0.2.14 \
|
||||
crate://crates.io/libc/0.2.17 \
|
||||
crate://crates.io/log/0.3.6 \
|
||||
crate://crates.io/num_cpus/0.2.13 \
|
||||
crate://crates.io/rustc-serialize/0.3.19 \
|
||||
crate://crates.io/toml/0.1.30 \
|
||||
"
|
||||
@@ -10,6 +10,7 @@ INHIBIT_DEFAULT_RUST_DEPS = "1"
|
||||
# the bits we need explicitly.
|
||||
DEPENDS += "rust-llvm-native"
|
||||
DEPENDS += "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}compilerlibs virtual/libc"
|
||||
DEPENDS += "rust-native"
|
||||
|
||||
PROVIDES = "virtual/${TARGET_PREFIX}rust"
|
||||
PN = "rust-cross-${TARGET_ARCH}"
|
||||
@@ -31,14 +32,18 @@ BUILD_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib"
|
||||
# We need the same thing for the calls to the compiler when building the runtime crap
|
||||
TARGET_CC_ARCH_append = " --sysroot=${STAGING_DIR_TARGET}"
|
||||
|
||||
# cross.bbclass is "helpful" and overrides our do_install. Tell it not to.
|
||||
do_install () {
|
||||
rust_do_install
|
||||
do_configure () {
|
||||
}
|
||||
|
||||
# using host-strip on target .so files generated by this recipie causes build errors.
|
||||
# for now, disable stripping.
|
||||
# A better (but more complex) approach would be to mimic gcc-runtime and build
|
||||
# the target.so files in a seperate .bb file.
|
||||
INHIBIT_PACKAGE_STRIP = "1"
|
||||
INHIBIT_SYSROOT_STRIP = "1"
|
||||
do_compile () {
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${prefix}/${base_libdir_native}/rustlib
|
||||
cp ${WORKDIR}/targets/${TARGET_SYS}.json ${D}${prefix}/${base_libdir_native}/rustlib
|
||||
}
|
||||
|
||||
rust_cross_sysroot_preprocess() {
|
||||
sysroot_stage_dir ${D}${prefix}/${base_libdir_native}/rustlib ${SYSROOT_DESTDIR}${prefix}/${base_libdir_native}/rustlib
|
||||
}
|
||||
SYSROOT_PREPROCESS_FUNCS += "rust_cross_sysroot_preprocess"
|
||||
2
recipes-devtools/rust/rust-cross_1.12.1.bb
Normal file
2
recipes-devtools/rust/rust-cross_1.12.1.bb
Normal file
@@ -0,0 +1,2 @@
|
||||
require rust-cross.inc
|
||||
require rust-source-${PV}.inc
|
||||
2
recipes-devtools/rust/rust-cross_1.15.1.bb
Normal file
2
recipes-devtools/rust/rust-cross_1.15.1.bb
Normal file
@@ -0,0 +1,2 @@
|
||||
require rust-cross.inc
|
||||
require rust-source-${PV}.inc
|
||||
@@ -1,3 +0,0 @@
|
||||
require rust-llvm.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa"
|
||||
@@ -1,38 +1,115 @@
|
||||
require rust-shared-source.inc
|
||||
|
||||
SUMMARY = "LLVM compiler framework (packaged with rust)"
|
||||
LICENSE = "NCSA"
|
||||
|
||||
S .= "/src/llvm"
|
||||
S = "${RUSTSRC}/src/llvm"
|
||||
|
||||
inherit autotools
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=b99eb43c934ceebecab85c6b9b1a08be"
|
||||
|
||||
EXTRA_OECONF += "--enable-targets=x86,x86_64,arm,aarch64,mips,powerpc"
|
||||
EXTRA_OECONF += "--enable-optimized"
|
||||
EXTRA_OECONF += "--disable-assertions"
|
||||
EXTRA_OECONF += "--disable-docs"
|
||||
EXTRA_OECONF += "--enable-bindings=none"
|
||||
EXTRA_OECONF += "--disable-terminfo"
|
||||
EXTRA_OECONF += "--disable-zlib"
|
||||
EXTRA_OECONF += "--disable-libffi"
|
||||
EXTRA_OECONF += "--enable-keep-symbols"
|
||||
inherit cmake pythonnative
|
||||
|
||||
PACKAGES += "${PN}-data"
|
||||
EXTRA_OECMAKE = " \
|
||||
-DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;PowerPC' \
|
||||
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
||||
-DLLVM_BUILD_DOCS=OFF \
|
||||
-DLLVM_ENABLE_TERMINFO=OFF \
|
||||
-DLLVM_ENABLE_ZLIB=OFF \
|
||||
-DLLVM_ENABLE_FFI=OFF \
|
||||
-DLLVM_INSTALL_UTILS=ON \
|
||||
-DLLVM_BUILD_TOOLS=ON \
|
||||
-DLLVM_BUILD_EXAMPLES=OFF \
|
||||
-DLLVM_INCLUDE_EXAMPLES=OFF \
|
||||
-DLLVM_BUILD_TESTS=OFF \
|
||||
-DLLVM_INCLUDE_TESTS=OFF \
|
||||
-DLLVM_TARGET_ARCH=${TARGET_ARCH} \
|
||||
"
|
||||
|
||||
# Add the extra locations to avoid the complaints about unpackaged files
|
||||
FILES_${PN}-data = "${datadir}"
|
||||
FILES_${PN}-dev += "${libdir}"
|
||||
# The debug symbols are huge here (>2GB) so suppress them since they
|
||||
# provide almost no value. If you really need them then override this
|
||||
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
|
||||
|
||||
do_install_append () {
|
||||
# Remove the debug info (>2 GB) as part of normal operation
|
||||
rm -rf ${D}${bindir}/.debug
|
||||
EXTRA_OECMAKE_append_class-target = "\
|
||||
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/native_toolchain.cmake' \
|
||||
"
|
||||
|
||||
cd ${D}${bindir} || bbfatal "failed to cd ${D}${bindir}"
|
||||
ln -s *-llc llc
|
||||
for i in *-llvm-* *-llc *-lli *-FileCheck; do
|
||||
link=$(echo $i | sed -e "s/${TARGET_SYS}-\(.*\)/\1/")
|
||||
ln -sf "$i" "${link}" || bbfatal "failed to symlink ${link}"
|
||||
done
|
||||
do_generate_native_toolchain_file() {
|
||||
cat > ${WORKDIR}/native_toolchain.cmake <<EOF
|
||||
set( CMAKE_SYSTEM_NAME `echo ${BUILD_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` )
|
||||
set( CMAKE_SYSTEM_PROCESSOR ${BUILD_ARCH} )
|
||||
set( CMAKE_C_COMPILER ${BUILD_CC} )
|
||||
set( CMAKE_CXX_COMPILER ${BUILD_CXX} )
|
||||
set( CMAKE_ASM_COMPILER ${BUILD_AS} )
|
||||
set( CMAKE_AR ${BUILD_AR} CACHE FILEPATH "Archiver" )
|
||||
set( CMAKE_C_FLAGS "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" CACHE STRING "CFLAGS" )
|
||||
set( CMAKE_CXX_FLAGS "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS}" CACHE STRING "CXXFLAGS" )
|
||||
set( CMAKE_ASM_FLAGS "${BUILD_CC_ARCH} ${BUILD_CFLAGS}" CACHE STRING "ASM FLAGS" )
|
||||
set( CMAKE_C_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CFLAGS} -DNDEBUG" CACHE STRING "CFLAGS for release" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CXXFLAGS} -DNDEBUG" CACHE STRING "CXXFLAGS for release" )
|
||||
set( CMAKE_ASM_FLAGS_RELEASE "${SELECTED_OPTIMIZATION} ${BUILD_CFLAGS} -DNDEBUG" CACHE STRING "ASM FLAGS for release" )
|
||||
set( CMAKE_C_LINK_FLAGS "${BUILD_CC_ARCH} ${BUILD_CPPFLAGS} ${BUILD_LDFLAGS}" CACHE STRING "LDFLAGS" )
|
||||
set( CMAKE_CXX_LINK_FLAGS "${BUILD_CC_ARCH} ${BUILD_CXXFLAGS} ${BUILD_LDFLAGS}" CACHE STRING "LDFLAGS" )
|
||||
|
||||
# only search in the paths provided so cmake doesnt pick
|
||||
# up libraries and tools from the native build machine
|
||||
set( CMAKE_FIND_ROOT_PATH ${STAGING_DIR_HOST} ${STAGING_DIR_NATIVE} ${CROSS_DIR} ${OECMAKE_PERLNATIVE_DIR} ${OECMAKE_EXTRA_ROOT_PATH} ${EXTERNAL_TOOLCHAIN})
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY )
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
|
||||
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
|
||||
|
||||
# Use native cmake modules
|
||||
set( CMAKE_MODULE_PATH ${STAGING_DATADIR}/cmake/Modules/ )
|
||||
|
||||
# add for non /usr/lib libdir, e.g. /usr/lib64
|
||||
set( CMAKE_LIBRARY_PATH ${libdir} ${base_libdir})
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
addtask generate_native_toolchain_file after do_patch before do_configure
|
||||
|
||||
do_configure_prepend_class-native() {
|
||||
# Use host paths for native tools
|
||||
sed -i -e '/CMAKE_FIND_ROOT_PATH_MODE/d' ${WORKDIR}/toolchain.cmake
|
||||
}
|
||||
|
||||
do_compile_prepend_class-target() {
|
||||
# Fix paths in llvm-config
|
||||
sed -i "s|sys::path::parent_path(CurrentPath))\.str()|sys::path::parent_path(sys::path::parent_path(CurrentPath))).str()|g" ${S}/tools/llvm-config/llvm-config.cpp
|
||||
|
||||
# Fix the hardcoded libdir in llvm-config
|
||||
sed -i 's:/lib\>:/${baselib}:g' ${S}/tools/llvm-config/llvm-config.cpp
|
||||
}
|
||||
|
||||
do_compile() {
|
||||
oe_runmake NATIVE_LIB_LLVMTABLEGEN
|
||||
oe_runmake NativeLLVMConfig
|
||||
oe_runmake
|
||||
}
|
||||
|
||||
do_install_append_class-target() {
|
||||
# Disable checks on the native tools, since these should came from the native recipe
|
||||
sed -i -e 's/\(.*APPEND.*_IMPORT_CHECK_FILES_FOR_.*{_IMPORT_PREFIX}\/bin\/.*\)/#\1/' ${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake
|
||||
}
|
||||
|
||||
SYSROOT_PREPROCESS_FUNCS_append_class-target = " llvm_sysroot_preprocess"
|
||||
SYSROOT_PREPROCESS_FUNCS_append_class-native = " llvm_native_sysroot_preprocess"
|
||||
|
||||
llvm_sysroot_preprocess() {
|
||||
install -d ${SYSROOT_DESTDIR}${bindir}
|
||||
cp ${B}/NATIVE/bin/llvm-config ${SYSROOT_DESTDIR}/${bindir} || bbfatal "missing llvm-config"
|
||||
cp ${B}/NATIVE/bin/llvm-tblgen ${SYSROOT_DESTDIR}/${bindir} || bbfatal "missing llvm-tblgen"
|
||||
}
|
||||
|
||||
llvm_native_sysroot_preprocess() {
|
||||
sysroot_stage_dir ${D}${STAGING_DIR_NATIVE}/usr/libexec ${SYSROOT_DESTDIR}${bindir}
|
||||
}
|
||||
|
||||
PACKAGES =+ "${PN}-bugpointpasses ${PN}-llvmhello ${PN}-liblto"
|
||||
|
||||
# Add the extra locations to avoid the complaints about unpackaged files
|
||||
FILES_${PN} += "${libdir}/libLLVM*.so"
|
||||
FILES_${PN}-dev += "${datadir}/llvm"
|
||||
FILES_${PN}-bugpointpasses = "${libdir}/BugpointPasses.so"
|
||||
FILES_${PN}-llvmhello = "${libdir}/LLVMHello.so"
|
||||
FILES_${PN}-liblto = "${libdir}/libLTO.so"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
|
||||
16
recipes-devtools/rust/rust-llvm_1.12.1.bb
Normal file
16
recipes-devtools/rust/rust-llvm_1.12.1.bb
Normal file
@@ -0,0 +1,16 @@
|
||||
require rust-source-${PV}.inc
|
||||
require rust-llvm.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=43fdaa303c1c5589ad60f4ffc6a0b9ce"
|
||||
|
||||
do_install_prepend () {
|
||||
# the install does a sed on this without installing the file
|
||||
# we don't need it for anything
|
||||
mkdir -p "${D}/usr/share/llvm/cmake"
|
||||
touch "${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake"
|
||||
}
|
||||
|
||||
do_install_append () {
|
||||
# we don't need any of this stuff to build Rust
|
||||
rm -rf "${D}/usr/lib/cmake"
|
||||
}
|
||||
14
recipes-devtools/rust/rust-llvm_1.15.1.bb
Normal file
14
recipes-devtools/rust/rust-llvm_1.15.1.bb
Normal file
@@ -0,0 +1,14 @@
|
||||
require rust-source-${PV}.inc
|
||||
require rust-llvm.inc
|
||||
|
||||
do_install_prepend () {
|
||||
# the install does a sed on this without installing the file
|
||||
# we don't need it for anything
|
||||
mkdir -p "${D}/usr/share/llvm/cmake"
|
||||
touch "${D}/usr/share/llvm/cmake/LLVMExports-noconfig.cmake"
|
||||
}
|
||||
|
||||
do_install_append () {
|
||||
# we don't need any of this stuff to build Rust
|
||||
rm -rf "${D}/usr/lib/cmake"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
SRC_URI = "\
|
||||
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
inherit shared-source-use
|
||||
require rust-version.inc
|
||||
S .= "/rustc-${PV}"
|
||||
@@ -1,14 +0,0 @@
|
||||
## snapshot info taken from rust/src/snapshots.txt
|
||||
## TODO: find a way to add additional SRC_URIs based on the contents of an
|
||||
## earlier SRC_URI.
|
||||
RS_DATE = "2015-12-18"
|
||||
RS_SRCHASH = "3391630"
|
||||
# linux-x86_64
|
||||
RS_ARCH = "linux-x86_64"
|
||||
RS_HASH = "97e2a5eb8904962df8596e95d6e5d9b574d73bf4"
|
||||
|
||||
RUST_SNAPSHOT = "rust-stage0-${RS_DATE}-${RS_SRCHASH}-${RS_ARCH}-${RS_HASH}.tar.bz2"
|
||||
|
||||
SRC_URI[rust-snapshot.md5sum] = "5c29eb06c8b6ce6ff52f544f31efabe1"
|
||||
SRC_URI[rust-snapshot.sha256sum] = "a8dc5203673ce43f47316beb02ee0c427edb7bbde2ab5fc662a06b52db2950e7"
|
||||
|
||||
25
recipes-devtools/rust/rust-source-1.12.1.inc
Normal file
25
recipes-devtools/rust/rust-source-1.12.1.inc
Normal file
@@ -0,0 +1,25 @@
|
||||
# Specifics for Rust 1.12.1
|
||||
|
||||
## This is information on the rust-snapshot (binary) used to build our current release.
|
||||
## snapshot info is taken from rust/src/stage0.txt
|
||||
## TODO: find a way to add additional SRC_URIs based on the contents of an
|
||||
## earlier SRC_URI.
|
||||
RS_VERSION = "1.11.0"
|
||||
RS_KEY = "5c6cf767"
|
||||
|
||||
RUST_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}"
|
||||
|
||||
# These are x86_64-unknown-linux-gnu hashes, how can we add more?
|
||||
SRC_URI[rust-snapshot.md5sum] = "b83d7a1a90c2d80bef97a518022948c8"
|
||||
SRC_URI[rust-snapshot.sha256sum] = "e9d27a72900da33c1bbd0e59dd42fd6414c6bcdfa33593fb7c7360068406394a"
|
||||
|
||||
SRC_URI += "\
|
||||
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
|
||||
"
|
||||
SRC_URI[rust.md5sum] = "82db5a9cb9a051bf8ece2f5174cb273b"
|
||||
SRC_URI[rust.sha256sum] = "97913ae4cb255618aaacd1a534b11f343634b040b32656250d09d8d9ec02d3dc"
|
||||
|
||||
# later versions of rust change the directory that they unextract to
|
||||
RUSTSRC = "${WORKDIR}/rustc-${PV}"
|
||||
# set this as our default
|
||||
S = "${RUSTSRC}"
|
||||
24
recipes-devtools/rust/rust-source-1.15.1.inc
Normal file
24
recipes-devtools/rust/rust-source-1.15.1.inc
Normal file
@@ -0,0 +1,24 @@
|
||||
# Specifics for Rust 1.15.1
|
||||
|
||||
## This is information on the rust-snapshot (binary) used to build our current release.
|
||||
## snapshot info is taken from rust/src/stage0.txt
|
||||
## TODO: find a way to add additional SRC_URIs based on the contents of an
|
||||
## earlier SRC_URI.
|
||||
RS_VERSION = "1.14.0"
|
||||
|
||||
RUST_SNAPSHOT = "rustc-${RS_VERSION}-${RUST_BUILD_SYS}"
|
||||
|
||||
# These are x86_64-unknown-linux-gnu hashes, how can we add more?
|
||||
SRC_URI[rust-snapshot.md5sum] = "f178d9d6aad0f87c451f4b2f93170633"
|
||||
SRC_URI[rust-snapshot.sha256sum] = "0eeec4211aa872f24c220200a0c2b095bbfc9c0f737c1c5df2555967c8f36787"
|
||||
|
||||
SRC_URI += "\
|
||||
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
|
||||
"
|
||||
SRC_URI[rust.md5sum] = "5bbfff5ef8857a73d120616546a7fd29"
|
||||
SRC_URI[rust.sha256sum] = "2e7daad418a830b45b977cd7ecf181b65f30f73df63ff36e124ea5fe5d1af327"
|
||||
|
||||
# later versions of rust change the directory that they unextract to
|
||||
RUSTSRC = "${WORKDIR}/rustc-${PV}-src"
|
||||
# set this as our default
|
||||
S = "${RUSTSRC}"
|
||||
@@ -1,30 +0,0 @@
|
||||
# In order to share the same source between multiple packages (.bb files), we
|
||||
# unpack and patch the rustc source here into a shared dir.
|
||||
#
|
||||
# Take a look at gcc-source.inc for the general structure of this
|
||||
|
||||
inherit shared-source-provide
|
||||
|
||||
require rust-version.inc
|
||||
require rust-release.inc
|
||||
|
||||
SRC_URI[rust.md5sum] = "15f1c204580017838301c5c8568e8f3f"
|
||||
SRC_URI[rust.sha256sum] = "6df96059d87b718676d9cd879672e4e22418b6093396b4ccb5b5b66df37bf13a"
|
||||
LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=eb87dba71cb424233bcce88db3ae2f1a"
|
||||
|
||||
SRC_URI_append = "\
|
||||
file://rust/0002-Target-add-default-target.json-path-libdir-rust-targ.patch \
|
||||
file://rust/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch \
|
||||
file://rust/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch \
|
||||
file://rust/0005-configure-support-bindir-and-extend-libdir-to-non-bl.patch \
|
||||
file://rust/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch \
|
||||
file://rust/0007-mk-install-use-disable-rewrite-paths.patch \
|
||||
file://rust/0009-Remove-crate-metadata-from-symbol-hashing.patch \
|
||||
file://rust/0010-rustc_trans-make-.note.rustc-look-more-like-debug-in.patch \
|
||||
file://rust/0011-Allow-overriding-crate_hash-with-C-crate_hash.patch \
|
||||
file://rust/0012-mk-platform.mk-pass-C-crate_hash-to-builds.patch \
|
||||
file://rust/0013-mk-allow-changing-the-platform-configuration-source-.patch \
|
||||
file://rust-llvm/0000-rust-llvm-remove-extra-slash.patch \
|
||||
file://rust-installer/0001-add-option-to-disable-rewriting-of-install-paths.patch;patchdir=src/rust-installer \
|
||||
file://rust/fix-urandom-during-init.patch \
|
||||
"
|
||||
@@ -1,6 +0,0 @@
|
||||
# Note: if you adjust this, you'll also need to change the hashes in
|
||||
# rust-source.bb
|
||||
SOURCE_NAME = "rust"
|
||||
PV = "1.7.0"
|
||||
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
@@ -1,10 +0,0 @@
|
||||
require rust.inc
|
||||
|
||||
DEPENDS += "rust-llvm"
|
||||
|
||||
# Otherwise we'll depend on what we provide
|
||||
INHIBIT_DEFAULT_RUST_DEPS_class-native = "1"
|
||||
# We don't need to depend on gcc-native because yocto assumes it exists
|
||||
PROVIDES_class-native = "virtual/${TARGET_PREFIX}rust"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,32 +1,17 @@
|
||||
# ex: sts=4 et sw=4 ts=8
|
||||
inherit rust
|
||||
inherit rust-installer
|
||||
require rust-shared-source.inc
|
||||
require rust-snapshot-2015-12-18.inc
|
||||
|
||||
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=9c5a05eab0ffc3590e50db38c51d1425"
|
||||
|
||||
SUMMARY = "Rust compiler and runtime libaries"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
|
||||
|
||||
B = "${WORKDIR}/build"
|
||||
inherit rust
|
||||
|
||||
SRC_URI = "\
|
||||
https://static.rust-lang.org/dist/${RUST_SNAPSHOT}.tar.gz;name=rust-snapshot \
|
||||
"
|
||||
|
||||
DEPENDS += "file-native"
|
||||
|
||||
# Avoid having the default bitbake.conf disable sub-make parallelization
|
||||
EXTRA_OEMAKE = ""
|
||||
|
||||
PACKAGECONFIG ??= ""
|
||||
|
||||
# Controls whether we use the local rust to build.
|
||||
# By default, we use the rust-snapshot. In some cases (non-supported host
|
||||
# systems) this may not be possible. In other cases, it might be desirable
|
||||
# to have rust-cross built using rust-native.
|
||||
PACKAGECONFIG[local-rust] = ""
|
||||
|
||||
SRC_URI += "${@bb.utils.contains('PACKAGECONFIG', 'local-rust', '', 'https://static.rust-lang.org/stage0-snapshots/${RUST_SNAPSHOT};unpack=0;name=rust-snapshot', d)}"
|
||||
|
||||
# We generate local targets, and need to be able to locate them
|
||||
export RUST_TARGET_PATH="${WORKDIR}/targets/"
|
||||
|
||||
@@ -126,47 +111,35 @@ def llvm_features_from_cc_arch(d):
|
||||
return ','.join(f)
|
||||
|
||||
## arm-unknown-linux-gnueabihf
|
||||
DATA_LAYOUT[arm] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
LLVM_TARGET[arm] = "${RUST_TARGET_SYS}"
|
||||
TARGET_ENDIAN[arm] = "little"
|
||||
TARGET_POINTER_WIDTH[arm] = "32"
|
||||
FEATURES[arm] = "+v6,+vfp2"
|
||||
PRE_LINK_ARGS[arm] = "-Wl,--as-needed"
|
||||
POST_LINK_ARGS[arm] = "-lssp"
|
||||
|
||||
## aarch64-unknown-linux-gnu
|
||||
DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
||||
LLVM_TARGET[aarch64] = "aarch64-unknown-linux-gnu"
|
||||
TARGET_ENDIAN[aarch64] = "little"
|
||||
TARGET_POINTER_WIDTH[aarch64] = "64"
|
||||
PRE_LINK_ARGS[aarch64] = "-Wl,--as-needed"
|
||||
|
||||
## x86_64-unknown-linux-gnu
|
||||
DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
LLVM_TARGET[x86_64] = "x86_64-unknown-linux-gnu"
|
||||
TARGET_ENDIAN[x86_64] = "little"
|
||||
TARGET_POINTER_WIDTH[x86_64] = "64"
|
||||
PRE_LINK_ARGS[x86_64] = "-Wl,--as-needed -m64"
|
||||
|
||||
## i686-unknown-linux-gnu
|
||||
DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
|
||||
LLVM_TARGET[i686] = "i686-unknown-linux-gnu"
|
||||
TARGET_ENDIAN[i686] = "little"
|
||||
TARGET_POINTER_WIDTH[i686] = "32"
|
||||
PRE_LINK_ARGS[i686] = "-Wl,--as-needed -m32"
|
||||
|
||||
## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-gnu above
|
||||
DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
|
||||
LLVM_TARGET[i586] = "i586-unknown-linux-gnu"
|
||||
TARGET_ENDIAN[i586] = "little"
|
||||
TARGET_POINTER_WIDTH[i586] = "32"
|
||||
PRE_LINK_ARGS[i586] = "-Wl,--as-needed -m32"
|
||||
|
||||
TARGET_PRE_LINK_ARGS = "${TARGET_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
|
||||
BUILD_PRE_LINK_ARGS = "${BUILD_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
|
||||
HOST_PRE_LINK_ARGS = "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
|
||||
|
||||
# These LDFLAGS have '-L' options in them. We need these to come last so they
|
||||
# don't screw up the link order and pull in the wrong rust build/version.
|
||||
# TODO: may want to strip out all the '-L' flags entirely here
|
||||
TARGET_POST_LINK_ARGS = "${TARGET_LDFLAGS}"
|
||||
BUILD_POST_LINK_ARGS = "${BUILD_LDFLAGS}"
|
||||
HOST_POST_LINK_ARGS = "${HOST_LDFLAGS}"
|
||||
|
||||
def arch_for(d, thing):
|
||||
return d.getVar('{}_ARCH'.format(thing), True)
|
||||
@@ -202,7 +175,7 @@ def arch_to_rust_target_arch(arch):
|
||||
|
||||
# generates our target CPU value
|
||||
def llvm_cpu(d):
|
||||
cpu = d.getVar('TUNE_PKGARCH', True)
|
||||
cpu = d.getVar('PACKAGE_ARCH', True)
|
||||
target = d.getVar('TRANSLATED_TARGET_ARCH', True)
|
||||
|
||||
trans = {}
|
||||
@@ -217,29 +190,11 @@ def llvm_cpu(d):
|
||||
except:
|
||||
return trans.get(target, "generic")
|
||||
|
||||
def post_link_args_for(d, thing, arch):
|
||||
post_link_args = (d.getVar('{}_POST_LINK_ARGS'.format(thing), True) or "").split()
|
||||
post_link_args.extend((d.getVarFlag('POST_LINK_ARGS', arch, True) or "").split())
|
||||
return post_link_args
|
||||
|
||||
def pre_link_args_for(d, thing, arch):
|
||||
ldflags = (d.getVar('{}_PRE_LINK_ARGS'.format(thing), True) or "").split()
|
||||
ldflags.extend((d.getVarFlag('PRE_LINK_ARGS', arch, True) or "").split())
|
||||
return ldflags
|
||||
|
||||
def ldflags_for(d, thing, arch):
|
||||
a = pre_link_args_for(d, thing, arch)
|
||||
a.extend(post_link_args_for(d, thing, arch))
|
||||
return a
|
||||
|
||||
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
|
||||
TARGET_LLVM_FEATURES = "${@llvm_features_from_tune(d)} ${@llvm_features_from_cc_arch(d)}"
|
||||
TARGET_LLVM_CPU_class-cross="${@llvm_cpu(d)}"
|
||||
TARGET_LLVM_FEATURES_class-cross = "${@llvm_features_from_tune(d)} ${@llvm_features_from_cc_arch(d)}"
|
||||
|
||||
# class-native implies TARGET=HOST, and TUNE_FEATURES only describes the real
|
||||
# (original) target.
|
||||
TARGET_LLVM_CPU="${@llvm_cpu(d)}"
|
||||
TARGET_LLVM_FEATURES_class-native = "${@llvm_features_from_cc_arch(d)}"
|
||||
|
||||
def rust_gen_target(d, thing, wd):
|
||||
@@ -249,14 +204,17 @@ def rust_gen_target(d, thing, wd):
|
||||
prefix = prefix_for(d, thing)
|
||||
|
||||
features = ""
|
||||
cpu = "generic"
|
||||
if thing is "TARGET":
|
||||
features = d.getVar('TARGET_LLVM_FEATURES', True) or ""
|
||||
cpu = d.getVar('TARGET_LLVM_CPU', True)
|
||||
features = features or d.getVarFlag('FEATURES', arch, True) or ""
|
||||
features = features.strip()
|
||||
|
||||
# build tspec
|
||||
tspec = {}
|
||||
tspec['llvm-target'] = d.getVarFlag('LLVM_TARGET', arch, True)
|
||||
tspec['data-layout'] = d.getVarFlag('DATA_LAYOUT', arch, True)
|
||||
tspec['target-pointer-width'] = d.getVarFlag('TARGET_POINTER_WIDTH', arch, True)
|
||||
tspec['target-word-size'] = tspec['target-pointer-width']
|
||||
tspec['target-endian'] = d.getVarFlag('TARGET_ENDIAN', arch, True)
|
||||
@@ -266,7 +224,7 @@ def rust_gen_target(d, thing, wd):
|
||||
tspec['linker'] = "{}{}gcc".format(d.getVar('CCACHE', True), prefix)
|
||||
tspec['objcopy'] = "{}objcopy".format(prefix)
|
||||
tspec['ar'] = "{}ar".format(prefix)
|
||||
tspec['cpu'] = d.getVar('TARGET_LLVM_CPU', True)
|
||||
tspec['cpu'] = cpu
|
||||
if features is not "":
|
||||
tspec['features'] = features
|
||||
tspec['dynamic-linking'] = True
|
||||
@@ -276,8 +234,6 @@ def rust_gen_target(d, thing, wd):
|
||||
tspec['has-rpath'] = True
|
||||
tspec['has-elf-tls'] = True
|
||||
tspec['position-independent-executables'] = True
|
||||
tspec['pre-link-args'] = pre_link_args_for(d, thing, arch)
|
||||
tspec['post-link-args'] = post_link_args_for(d, thing, arch)
|
||||
|
||||
# write out the target spec json file
|
||||
with open(wd + sys + '.json', 'w') as f:
|
||||
@@ -308,6 +264,7 @@ def rust_gen_mk_cfg(d, thing):
|
||||
Note that the configure process also depends on the existence of #1, so we
|
||||
have to run this before do_configure
|
||||
'''
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
rust_base_sys = rust_base_triple(d, thing)
|
||||
@@ -315,13 +272,22 @@ def rust_gen_mk_cfg(d, thing):
|
||||
sys = sys_for(d, thing)
|
||||
prefix = prefix_for(d, thing)
|
||||
llvm_target = d.getVarFlag('LLVM_TARGET', arch, True)
|
||||
ldflags = ' '.join(ldflags_for(d, thing, arch))
|
||||
ldflags = d.getVar('LDFLAGS', True) + d.getVar('HOST_CC_ARCH', True) + d.getVar('TOOLCHAIN_OPTIONS', True)
|
||||
|
||||
b = d.getVar('WORKDIR', True) + '/mk-cfg/'
|
||||
o = open(b + sys_for(d, thing) + '.mk', 'w')
|
||||
i = open(d.getVar('S', True) + '/mk/cfg/' + rust_base_sys + '.mk', 'r')
|
||||
b = os.path.join(d.getVar('S', True), 'mk', 'cfg')
|
||||
o = open(os.path.join(b, sys_for(d, thing) + '.mk'), 'w')
|
||||
i = open(os.path.join(b, rust_base_sys + '.mk'), 'r')
|
||||
|
||||
r = subprocess.call(['sed',
|
||||
# CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
|
||||
# wide range of targets (not just HOST). Yocto's settings for them will
|
||||
# be inappropriate, avoid having random targets try to use them, we'll
|
||||
# add as needed.
|
||||
'-e', 's/$(CFLAGS)//',
|
||||
'-e', 's/$(CXXFLAGS)//',
|
||||
'-e', 's/$(CPPFLAGS)//',
|
||||
'-e', 's/$(LDFLAGS)//',
|
||||
|
||||
# update all triplets to the new one
|
||||
'-e', 's/{}/{}/g'.format(rust_base_sys, sys),
|
||||
|
||||
@@ -352,6 +318,13 @@ def rust_gen_mk_cfg(d, thing):
|
||||
if r:
|
||||
raise Exception
|
||||
o.write("OBJCOPY_{} := {}objcopy\n".format(sys, prefix))
|
||||
# Note: this isn't how this variable is supposed to be used, but for
|
||||
# non-msvc platforms nothing else touches it.
|
||||
# These are the only extra flags passed to the rustllvm (c++ code) build.
|
||||
# These are only used for host (even though we emit them for all targets)
|
||||
# Without this, there are link failures due to GLIBC_CXX11_ABI issues in
|
||||
# certain setups.
|
||||
o.write("EXTRA_RUSTLLVM_CXXFLAGS_{} := {}\n".format(sys, cxxflags_for(d, thing)))
|
||||
o.close()
|
||||
i.close()
|
||||
|
||||
@@ -361,48 +334,17 @@ python do_rust_arch_fixup () {
|
||||
rust_gen_mk_cfg(d, thing)
|
||||
}
|
||||
addtask rust_arch_fixup before do_configure after do_patch
|
||||
do_rust_arch_fixup[dirs] += "${WORKDIR}/mk-cfg"
|
||||
|
||||
llvmdir = "${STAGING_DIR_NATIVE}/${prefix_native}"
|
||||
do_rust_arch_fixup[dirs] += "${S}/mk/cfg"
|
||||
|
||||
# prevent the rust-installer scripts from calling ldconfig
|
||||
export CFG_DISABLE_LDCONFIG="notempty"
|
||||
|
||||
# rust's configure doesn't recognize --disable-static, so remove it.
|
||||
DISABLE_STATIC = ""
|
||||
|
||||
do_configure () {
|
||||
# Note: when we adjust the generated targets, rust doesn't rebuild (even
|
||||
# when it should), so for now we need to remove the build dir to keep
|
||||
# things in sync.
|
||||
cd "${WORKDIR}"
|
||||
rm -rf "${B}/"
|
||||
mkdir -p "${B}/"
|
||||
cd "${B}"
|
||||
|
||||
# FIXME: target_prefix vs prefix, see cross.bbclass
|
||||
|
||||
# CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
|
||||
# wide range of targets (not just HOST). Yocto's settings for them will
|
||||
# be inappropriate, avoid using.
|
||||
unset CFLAGS
|
||||
unset LDFLAGS
|
||||
unset CXXFLAGS
|
||||
unset CPPFLAGS
|
||||
|
||||
# FIXME: this path to rustc (via `which rustc`) may not be quite right in the case
|
||||
# where we're reinstalling the compiler. May want to try for a real
|
||||
# path based on bitbake vars
|
||||
# Also will be wrong when relative libdir and/or bindir aren't 'bin' and 'lib'.
|
||||
local_maybe_enable=disable
|
||||
local_rust_root=/not/set/do/not/use
|
||||
if which rustc >/dev/null 2>&1; then
|
||||
local_rustc=$(which rustc)
|
||||
if [ -n "$local_rustc" ]; then
|
||||
local_rust_root=$(dirname $(dirname $local_rustc))
|
||||
if [ -e "$local_rust_root/bin/rustc" ]; then
|
||||
local_maybe_enable=enable
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# - rpath is required otherwise rustc fails to resolve symbols
|
||||
# - submodule management is done by bitbake's fetching
|
||||
${S}/configure \
|
||||
@@ -413,7 +355,7 @@ do_configure () {
|
||||
"--enable-optimize" \
|
||||
"--enable-optimize-cxx" \
|
||||
"--disable-llvm-version-check" \
|
||||
"--llvm-root=${llvmdir}" \
|
||||
"--llvm-root=${STAGING_DIR_NATIVE}/${prefix_native}" \
|
||||
"--enable-optimize-tests" \
|
||||
"--release-channel=stable" \
|
||||
"--prefix=${prefix}" \
|
||||
@@ -426,15 +368,13 @@ do_configure () {
|
||||
"--infodir=${infodir}" \
|
||||
"--mandir=${mandir}" \
|
||||
"--libdir=${libdir}" \
|
||||
"--bindir=${bindir}" \
|
||||
"--platform-cfg=${WORKDIR}/mk-cfg/" \
|
||||
${@bb.utils.contains('PACKAGECONFIG', 'local-rust', '--$local_maybe_enable-local-rust --local-rust-root=$local_rust_root', '--local-rust-root=/not/a/dir', d)} \
|
||||
"--enable-local-rust" \
|
||||
"--local-rust-root=${WORKDIR}/${RUST_SNAPSHOT}/rustc" \
|
||||
${EXTRA_OECONF}
|
||||
}
|
||||
|
||||
rust_runmake () {
|
||||
echo "COMPILE ${PN}" "$@"
|
||||
env
|
||||
|
||||
# CFLAGS, LDFLAGS, CXXFLAGS, CPPFLAGS are used by rust's build for a
|
||||
# wide range of targets (not just TARGET). Yocto's settings for them will
|
||||
@@ -448,22 +388,12 @@ rust_runmake () {
|
||||
}
|
||||
|
||||
do_compile () {
|
||||
if ${@bb.utils.contains('PACKAGECONFIG', 'local-rust', 'false', 'true', d)}; then
|
||||
mkdir -p dl
|
||||
cp -f ${WORKDIR}/${RUST_SNAPSHOT} dl
|
||||
fi
|
||||
rust_runmake
|
||||
}
|
||||
|
||||
rust_do_install () {
|
||||
rust_runmake DESTDIR="${D}" install
|
||||
|
||||
# Rust's install.sh doesn't mark executables as executable because
|
||||
# we're using a custom bindir, do it ourselves.
|
||||
chmod +x "${D}/${bindir}/rustc"
|
||||
chmod +x "${D}/${bindir}/rustdoc"
|
||||
chmod +x "${D}/${bindir}/rust-gdb"
|
||||
|
||||
# Install our custom target.json files
|
||||
local td="${D}${libdir}/rustlib/"
|
||||
install -d "$td"
|
||||
@@ -474,9 +404,15 @@ rust_do_install () {
|
||||
# Remove any files directly installed into libdir to avoid
|
||||
# conflicts between cross and native
|
||||
rm -f ${D}${libdir}/lib*.so
|
||||
|
||||
# cleanup after rust-installer since we don't need these bits
|
||||
rm ${D}/${libdir}/rustlib/install.log
|
||||
rm ${D}/${libdir}/rustlib/rust-installer-version
|
||||
rm ${D}/${libdir}/rustlib/uninstall.sh
|
||||
rm ${D}/${libdir}/rustlib/components
|
||||
}
|
||||
|
||||
do_install () {
|
||||
rust_do_install
|
||||
}
|
||||
|
||||
# ex: sts=4 et sw=4 ts=8
|
||||
|
||||
27
recipes-devtools/rust/rust_1.12.1.bb
Normal file
27
recipes-devtools/rust/rust_1.12.1.bb
Normal file
@@ -0,0 +1,27 @@
|
||||
require rust.inc
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
# the configure script always requires cmake so despite
|
||||
# rust not needing this (only rust-llvm needs it) we must
|
||||
# have it for the configure script to succeed.
|
||||
DEPENDS += "cmake-native"
|
||||
|
||||
SRC_URI += " \
|
||||
file://rust-${PV}/0001-Target-add-default-target.json-path-libdir-rust-targ.patch \
|
||||
file://rust-${PV}/0002-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch \
|
||||
file://rust-${PV}/0003-mk-add-missing-CFG_LIBDIR_RELATIVE.patch \
|
||||
file://rust-${PV}/0005-std-thread_local-workaround-for-NULL-__dso_handle.patch \
|
||||
file://rust-${PV}/0006-mk-install-use-disable-rewrite-paths.patch \
|
||||
file://rust-${PV}/0007-Allow-overriding-crate_hash-with-C-crate_hash.patch \
|
||||
file://rust-${PV}/0008-mk-platform.mk-pass-C-crate_hash-to-builds.patch \
|
||||
file://rust-installer-${PV}/0001-add-option-to-disable-rewriting-of-install-paths.patch;patchdir=src/rust-installer \
|
||||
"
|
||||
|
||||
DEPENDS += "rust-llvm (=${PV})"
|
||||
|
||||
# Otherwise we'll depend on what we provide
|
||||
INHIBIT_DEFAULT_RUST_DEPS_class-native = "1"
|
||||
# We don't need to depend on gcc-native because yocto assumes it exists
|
||||
PROVIDES_class-native = "virtual/${TARGET_PREFIX}rust"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
18
recipes-devtools/rust/rust_1.15.1.bb
Normal file
18
recipes-devtools/rust/rust_1.15.1.bb
Normal file
@@ -0,0 +1,18 @@
|
||||
require rust.inc
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
EXTRA_OECONF = "--disable-rustbuild"
|
||||
|
||||
SRC_URI += " \
|
||||
file://rust-${PV}/0001-Target-add-default-target.json-path-libdir-rust-targ.patch \
|
||||
file://rust-${PV}/0003-std-thread_local-workaround-for-NULL-__dso_handle.patch \
|
||||
"
|
||||
|
||||
DEPENDS += "rust-llvm (=${PV})"
|
||||
|
||||
# Otherwise we'll depend on what we provide
|
||||
INHIBIT_DEFAULT_RUST_DEPS_class-native = "1"
|
||||
# We don't need to depend on gcc-native because yocto assumes it exists
|
||||
PROVIDES_class-native = "virtual/${TARGET_PREFIX}rust"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,24 +0,0 @@
|
||||
SUMMARY = "Rust runtime libaries"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
DEPENDS += "virtual/${TARGET_PREFIX}rust"
|
||||
RUSTLIB_DEP = ""
|
||||
|
||||
do_install () {
|
||||
for f in ${STAGING_DIR_NATIVE}/${rustlib_src}/*.so; do
|
||||
echo Installing $f
|
||||
install -D -m 755 $f ${D}/${rustlib}/$(basename $f)
|
||||
done
|
||||
}
|
||||
|
||||
# This has no license file
|
||||
python do_qa_configure() {
|
||||
return True
|
||||
}
|
||||
|
||||
FILES_${PN} += "${rustlib}/*.so"
|
||||
FILES_${PN}-dbg += "${rustlib}/.debug"
|
||||
@@ -1,8 +1,34 @@
|
||||
inherit cargo
|
||||
|
||||
SRC_URI = "https://crates.io/api/v1/crates/rustfmt/0.4.0/download;downloadfilename=${P}.tar.gz"
|
||||
SRC_URI[md5sum] = "2916b64ad7d6b6c9f33ea89f9b3083c4"
|
||||
SRC_URI[sha256sum] = "add2143a74d9dde7ddbfdd325ac6f253656662fd3b6c22600e1fa4b52f9eab01"
|
||||
SRC_URI = " \
|
||||
crate://crates.io/aho-corasick/0.5.1 \
|
||||
crate://crates.io/bitflags/0.5.0 \
|
||||
crate://crates.io/diff/0.1.9 \
|
||||
crate://crates.io/env_logger/0.3.2 \
|
||||
crate://crates.io/getopts/0.2.14 \
|
||||
crate://crates.io/kernel32-sys/0.2.1 \
|
||||
crate://crates.io/libc/0.2.8 \
|
||||
crate://crates.io/log/0.3.5 \
|
||||
crate://crates.io/memchr/0.1.10 \
|
||||
crate://crates.io/regex/0.1.58 \
|
||||
crate://crates.io/regex-syntax/0.3.0 \
|
||||
crate://crates.io/rustc-serialize/0.3.18 \
|
||||
crate://crates.io/strings/0.0.1 \
|
||||
crate://crates.io/syntex_syntax/0.30.0 \
|
||||
crate://crates.io/term/0.2.14 \
|
||||
crate://crates.io/toml/0.1.28 \
|
||||
crate://crates.io/unicode-segmentation/0.1.2 \
|
||||
crate://crates.io/unicode-xid/0.0.3 \
|
||||
crate://crates.io/utf8-ranges/0.1.3 \
|
||||
crate://crates.io/winapi/0.2.6 \
|
||||
crate://crates.io/winapi-build/0.1.1 \
|
||||
crate://crates.io/rustfmt/0.4.0 \
|
||||
"
|
||||
# rustfmt 0.5.0
|
||||
#LIC_FILES_CHKSUM=" \
|
||||
# file://LICENSE-APACHE;md5=1836efb2eb779966696f473ee8540542 \
|
||||
# file://LICENSE-MIT;md5=0b29d505d9225d1f0815cbdcf602b901 \
|
||||
#"
|
||||
LIC_FILES_CHKSUM="file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
|
||||
SUMMARY = "Format Rust Code"
|
||||
|
||||
12
recipes-graphics/sdl2/sdl2-rs_0.21.0.bb
Normal file
12
recipes-graphics/sdl2/sdl2-rs_0.21.0.bb
Normal file
@@ -0,0 +1,12 @@
|
||||
require sdl2.inc
|
||||
|
||||
DEPENDS += "\
|
||||
libc-rs \
|
||||
lazy-static \
|
||||
bitflags \
|
||||
rand-rs \
|
||||
num \
|
||||
sdl2-sys \
|
||||
"
|
||||
|
||||
LIB_SRC = "${S}/src/sdl2/lib.rs"
|
||||
8
recipes-graphics/sdl2/sdl2-sys_0.21.0.bb
Normal file
8
recipes-graphics/sdl2/sdl2-sys_0.21.0.bb
Normal file
@@ -0,0 +1,8 @@
|
||||
require sdl2.inc
|
||||
|
||||
DEPENDS += "\
|
||||
libc-rs \
|
||||
libsdl2 \
|
||||
"
|
||||
|
||||
LIB_SRC = "${S}/sdl2-sys/src/lib.rs"
|
||||
21
recipes-graphics/sdl2/sdl2.inc
Normal file
21
recipes-graphics/sdl2/sdl2.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
DESCRIPTION = "SDL2 bindings for Rust"
|
||||
HOMEPAGE = "https://github.com/AngryLawyer/rust-sdl2"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE;md5=efab06594070f714e6e655a25c330fcd \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
SRC_URI = "git://github.com/AngryLawyer/rust-sdl2.git;protocol=https"
|
||||
SRCREV = "ffdfe48bd90d8c141f1f8a6f38a88243ad78508f"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_install_rust_lib
|
||||
}
|
||||
30
recipes-graphics/sdl2_ttf/sdl2-ttf-rs_0.21.bb
Normal file
30
recipes-graphics/sdl2_ttf/sdl2-ttf-rs_0.21.bb
Normal file
@@ -0,0 +1,30 @@
|
||||
DESCRIPTION = "SDL2 bindings for Rust"
|
||||
HOMEPAGE = "https://github.com/AngryLawyer/rust-sdl2"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "\
|
||||
file://LICENSE;md5=d8786ddfe98d69e641491528dd88fa55 \
|
||||
"
|
||||
|
||||
DEPENDS += "\
|
||||
bitflags \
|
||||
sdl2-sys \
|
||||
sdl2-rs \
|
||||
libsdl2-ttf \
|
||||
"
|
||||
|
||||
inherit rust-bin
|
||||
|
||||
LIB_SRC = "${S}/src/sdl2_ttf/lib.rs"
|
||||
|
||||
SRC_URI = "git://github.com/andelf/rust-sdl2_ttf.git;protocol=https"
|
||||
SRCREV = "203a550a804aed79e6ad6c1fcc0ed9e31e9ca2f4"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
do_compile () {
|
||||
oe_compile_rust_lib
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_install_rust_lib
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Grab the MACHINE from the environment; otherwise, set it to a sane default
|
||||
export MACHINE="${MACHINE-qemux86}"
|
||||
export MACHINE="${MACHINE-qemux86-64}"
|
||||
|
||||
# What to build
|
||||
BUILD_TARGETS="\
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
sudo umount build
|
||||
# Only attempt to unmount if the directory is already mounted
|
||||
if mountpoint -q `pwd`/build; then
|
||||
sudo umount build
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
@@ -43,7 +43,7 @@ exec docker run \
|
||||
-e BUILD_UID=${my_uid} \
|
||||
-e BUILD_GID=${my_gid} \
|
||||
-e TEMPLATECONF=meta-rust/conf \
|
||||
-e MACHINE=${MACHINE:-qemux86} \
|
||||
-e MACHINE=${MACHINE:-qemux86-64} \
|
||||
${SSH_AUTH_SOCK:+-e SSH_AUTH_SOCK="/tmp/ssh-agent/${SSH_AUTH_NAME}"} \
|
||||
-v ${HOME}/.ssh:/var/build/.ssh \
|
||||
-v "${PWD}":/var/build:rw \
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
#!/bin/bash -x
|
||||
|
||||
# default repo
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "No Yocto branch specified, defaulting to master"
|
||||
echo "To change this pass a Yocto branch name as an argument to this script"
|
||||
fi
|
||||
branch=${1-master}
|
||||
|
||||
# the repos we want to check out, must setup variables below
|
||||
# NOTE: poky must remain first
|
||||
REPOS="poky metaoe"
|
||||
|
||||
POKY_URI="git://git.yoctoproject.org/poky.git"
|
||||
POKY_PATH="poky"
|
||||
POKY_REV="${POKY_REV-refs/remotes/origin/$1}"
|
||||
POKY_REV="${POKY_REV-refs/remotes/origin/${branch}}"
|
||||
|
||||
METAOE_URI="git://git.openembedded.org/meta-openembedded.git"
|
||||
METAOE_PATH="poky/meta-openembedded"
|
||||
METAOE_REV="${METAOE_REV-refs/remotes/origin/$1}"
|
||||
METAOE_REV="${METAOE_REV-refs/remotes/origin/${branch}}"
|
||||
|
||||
METARUST_URI="."
|
||||
METARUST_PATH="poky/meta-rust"
|
||||
@@ -33,10 +40,11 @@ update_repo() {
|
||||
git fetch origin || die "unable to fetch ${uri}"
|
||||
else
|
||||
echo "Cloning '${path}'"
|
||||
if [ -z "${GIT_LOCAL_REF_DIR}" ]; then
|
||||
git clone ${uri} ${path} || die "unable to clone ${uri}"
|
||||
if [ -d "${GIT_LOCAL_REF_DIR}" ]; then
|
||||
git clone --reference ${GIT_LOCAL_REF_DIR}/`basename ${path}` \
|
||||
${uri} ${path} || die "unable to clone ${uri}"
|
||||
else
|
||||
git clone --reference ${GIT_LOCAL_REF_DIR}/`basename ${path}` ${uri} ${path}
|
||||
git clone ${uri} ${path} || die "unable to clone ${uri}"
|
||||
fi
|
||||
pushd ${path} > /dev/null
|
||||
fi
|
||||
|
||||
13
scripts/publish-build-cache.sh
Executable file
13
scripts/publish-build-cache.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "No Yocto branch specified, defaulting to master"
|
||||
echo "To change this pass a Yocto branch name as an argument to this script"
|
||||
fi
|
||||
branch=${1-master}
|
||||
|
||||
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress build/downloads yocto-cache@build-cache.asterius.io:/srv/yocto-cache/
|
||||
|
||||
rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress build/sstate-cache yocto-cache@build-cache.asterius.io:/srv/yocto-cache/${branch}/
|
||||
|
||||
exit 0
|
||||
@@ -2,6 +2,11 @@
|
||||
|
||||
mkdir -p build
|
||||
|
||||
sudo mount -t tmpfs -o size=64G,mode=755,uid=${UID} tmpfs build
|
||||
total_mem=`grep MemTotal /proc/meminfo | awk '{print $2}'`
|
||||
|
||||
# Only have the slaves with large amounts of RAM mount the tmpfs
|
||||
if [ "$total_mem" -ge "67108864" ]; then
|
||||
sudo mount -t tmpfs -o size=64G,mode=755,uid=${UID} tmpfs build
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user