Merge branch 'morty' into krogoth
Merges the changes in the morty branch into krogoth to get Rust 1.10.0 and Rust 1.12.1 into krogoth. Additionally this allows for Rust, Cargo and any recipes to be built without internet access if they are defined using cargo-bitbake. Fixes #87. Fixes #122.
This commit is contained in:
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
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
||||
*.pyc
|
||||
build/
|
||||
poky/
|
||||
|
||||
10
Jenkinsfile
vendored
10
Jenkinsfile
vendored
@@ -8,23 +8,23 @@ 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') {
|
||||
stage("fetch $machine") {
|
||||
sh "GIT_LOCAL_REF_DIR=/srv/git-cache/ ./scripts/fetch.sh krogoth"
|
||||
}
|
||||
stage('Build') {
|
||||
stage("build $machine") {
|
||||
sh "MACHINE=${machine} ./scripts/build.sh"
|
||||
}
|
||||
} catch (e) {
|
||||
echo "Caught: ${e}"
|
||||
throw e
|
||||
} finally {
|
||||
stage('Cleanup Environment') {
|
||||
stage("cleanup $machine") {
|
||||
sh "./scripts/cleanup-env.sh"
|
||||
deleteDir()
|
||||
}
|
||||
|
||||
13
README.md
13
README.md
@@ -17,6 +17,19 @@ This OpenEmbedded layer provides the rust compiler, tools for building packages
|
||||
|
||||
- rust (built for target)
|
||||
|
||||
## Building a rust package
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
## Common issues when packaging things using cargo
|
||||
|
||||
You may run into errors similar to:
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
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}"
|
||||
|
||||
|
||||
# In case something fails in the build process, give a bit more feedback on
|
||||
# where the issue occured
|
||||
export RUST_BACKTRACE = "1"
|
||||
@@ -24,71 +27,79 @@ 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
|
||||
}
|
||||
|
||||
# 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 () {
|
||||
export RUSTFLAGS="${RUSTFLAGS}"
|
||||
which cargo
|
||||
which rustc
|
||||
bbnote ${CARGO} build ${CARGO_BUILD_FLAGS} "$@"
|
||||
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}"
|
||||
# prevent cargo from trying to fetch down new data
|
||||
mkdir -p "${WORKDIR}/cargo_home/registry/index/github.com-1ecc6299db9ec823"
|
||||
touch "${WORKDIR}/cargo_home/registry/index/github.com-1ecc6299db9ec823/.cargo-index-lock"
|
||||
|
||||
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
|
||||
@@ -98,4 +109,4 @@ cargo_do_install () {
|
||||
fi
|
||||
}
|
||||
|
||||
EXPORT_FUNCTIONS do_compile do_install do_configure
|
||||
EXPORT_FUNCTIONS do_configure do_compile do_install
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
# add crate fetch support
|
||||
inherit crate-fetch
|
||||
|
||||
# the binary we will use
|
||||
CARGO = "cargo"
|
||||
|
||||
# Where we download our registry and dependencies to
|
||||
export CARGO_HOME = "${WORKDIR}/cargo_home"
|
||||
|
||||
# We need cargo to compile for the target
|
||||
BASEDEPENDS_append = " cargo-native"
|
||||
|
||||
# Ensure we get the right rust variant
|
||||
DEPENDS_append_class-target = "virtual/${TARGET_PREFIX}rust"
|
||||
|
||||
# Cargo only supports in-tree builds at the moment
|
||||
B = "${S}"
|
||||
|
||||
# In case something fails in the build process, give a bit more feedback on
|
||||
# where the issue occured
|
||||
export RUST_BACKTRACE = "1"
|
||||
|
||||
# The pkg-config-rs library used by cargo build scripts disables itself when
|
||||
# cross compiling unless this is defined. We set up pkg-config appropriately
|
||||
# for cross compilation, so tell it we know better than it.
|
||||
export PKG_CONFIG_ALLOW_CROSS = "1"
|
||||
|
||||
# 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"
|
||||
|
||||
# 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"
|
||||
oe_cargo_build () {
|
||||
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 AR="${AR}"
|
||||
export TARGET_CC="${RUST_CC}"
|
||||
export TARGET_CFLAGS="${RUST_CFLAGS}"
|
||||
export TARGET_AR="${AR}"
|
||||
export HOST_CC="${RUST_BUILD_CC}"
|
||||
export HOST_CFLAGS="${RUST_BUILD_CFLAGS}"
|
||||
export HOST_AR="${BUILD_AR}"
|
||||
}
|
||||
|
||||
cargo_util_do_compile () {
|
||||
cd "${B}"
|
||||
|
||||
# prevent cargo from trying to fetch down new data
|
||||
mkdir -p "${WORKDIR}/cargo_home/registry/index/"
|
||||
touch "${WORKDIR}/cargo_home/registry/index/.cargo-index-lock"
|
||||
|
||||
oe_cargo_fix_env
|
||||
oe_cargo_build
|
||||
}
|
||||
|
||||
# All but the most simple projects will need to override this.
|
||||
cargo_util_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
|
||||
install -m755 "$tgt" "${D}${bindir}"
|
||||
have_installed=true
|
||||
fi
|
||||
done
|
||||
if ! $have_installed; then
|
||||
die "Did not find anything to install"
|
||||
fi
|
||||
}
|
||||
|
||||
EXPORT_FUNCTIONS do_compile do_install
|
||||
@@ -1,7 +1,9 @@
|
||||
inherit rust
|
||||
|
||||
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}"'
|
||||
|
||||
@@ -54,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}
|
||||
@@ -88,3 +95,19 @@ oe_install_rust_bin () {
|
||||
echo Installing ${BINNAME}
|
||||
install -D -m 755 ${BINNAME} ${D}/${bindir}/${BINNAME}
|
||||
}
|
||||
|
||||
do_rust_bin_fixups() {
|
||||
for f in `find ${PKGD} -name '*.so*'`; do
|
||||
echo "Strip rust note: $f"
|
||||
${OBJCOPY} -R .note.rustc $f $f
|
||||
done
|
||||
|
||||
for f in `find ${PKGD}`; do
|
||||
file "$f" | grep -q ELF || continue
|
||||
readelf -d "$f" | grep RUNPATH | grep -q rustlib || continue
|
||||
echo "Set rpath:" "$f"
|
||||
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,10 +1,9 @@
|
||||
inherit rust-common
|
||||
|
||||
RUSTC = "rustc"
|
||||
|
||||
# FIXME: --sysroot might be needed
|
||||
RUSTFLAGS += "-C rpath -C crate_hash=${BB_TASKHASH}"
|
||||
RUSTC_ARCHFLAGS += "--target=${TARGET_SYS} ${RUSTFLAGS}"
|
||||
RUSTC_ARCHFLAGS += "--target=${HOST_SYS} ${RUSTFLAGS}"
|
||||
|
||||
RUSTLIB_DEP ?= "rustlib"
|
||||
def rust_base_dep(d):
|
||||
# Taken from meta/classes/base.bbclass `base_dep_prepend` and modified to
|
||||
# use rust instead of gcc
|
||||
@@ -16,37 +15,7 @@ def rust_base_dep(d):
|
||||
deps += " rust-native"
|
||||
return deps
|
||||
|
||||
DEPENDS_append = " ${@rust_base_dep(d)} patchelf-native"
|
||||
|
||||
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')}"
|
||||
DEPENDS_append = " ${@rust_base_dep(d)}"
|
||||
|
||||
# BUILD_LDFLAGS
|
||||
# ${STAGING_LIBDIR_NATIVE}
|
||||
@@ -61,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}"
|
||||
@@ -85,29 +37,8 @@ HOST_CFLAGS ?= "${CFLAGS}"
|
||||
HOST_CXXFLAGS ?= "${CXXFLAGS}"
|
||||
HOST_CPPFLAGS ?= "${CPPFLAGS}"
|
||||
|
||||
EXTRA_OECONF_remove = "--disable-static"
|
||||
|
||||
do_rust_bin_fixups() {
|
||||
for f in `find ${PKGD} -name '*.so*'`; do
|
||||
echo "Strip rust note: $f"
|
||||
${OBJCOPY} -R .note.rustc $f $f
|
||||
done
|
||||
|
||||
for f in `find ${PKGD}`; do
|
||||
file "$f" | grep -q ELF || continue
|
||||
readelf -d "$f" | grep RUNPATH | grep -q rustlib || continue
|
||||
echo "Set rpath:" "$f"
|
||||
patchelf --set-rpath '$ORIGIN:'${rustlibdir}:${rustlib} "$f"
|
||||
done
|
||||
}
|
||||
PACKAGE_PREPROCESS_FUNCS += "do_rust_bin_fixups"
|
||||
|
||||
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}"
|
||||
export rustlibdir = "${libdir}/rust"
|
||||
FILES_${PN} += "${rustlibdir}/*.so"
|
||||
FILES_${PN}-dev += "${rustlibdir}/*.rlib"
|
||||
FILES_${PN}-dbg += "${rustlibdir}/.debug"
|
||||
|
||||
@@ -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,23 +0,0 @@
|
||||
# gcc's shared source code disables fetch (via the commented code below). We
|
||||
# can't do that because rust.bb currently fetches a rustc-snapshot archive itself.
|
||||
#do_fetch() {
|
||||
# :
|
||||
#}
|
||||
#do_fetch[noexec] = "1"
|
||||
|
||||
# gcc does `deltask` do_unpack. We avoid this so that the depends work sanely
|
||||
# (things that need source code can still be ordered after do_unpack).
|
||||
# As a side effect, we can also unpack things that aren't shared.
|
||||
# Note: just setting this normally doesn't work. Use of python() is required.
|
||||
python () {
|
||||
d.setVarFlag('do_unpack', 'cleandirs', '')
|
||||
}
|
||||
# Avoid disabling do_patch for the same reason.
|
||||
#deltask do_patch
|
||||
|
||||
SRC_URI = ""
|
||||
|
||||
S = "${TMPDIR}/work-shared/${SOURCE_NAME}-${PV}-${PR}"
|
||||
|
||||
do_unpack[depends] += "${SOURCE_NAME}-source-${PV}:do_patch"
|
||||
do_populate_lic[depends] += "${SOURCE_NAME}-source-${PV}:do_unpack"
|
||||
@@ -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
|
||||
|
||||
71
lib/crate.py
71
lib/crate.py
@@ -21,6 +21,8 @@ BitBake 'Fetch' implementation for crates.io
|
||||
#
|
||||
# Based on functions from the base bb module, Copyright 2003 Holger Schurig
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
@@ -35,7 +37,8 @@ class Crate(Wget):
|
||||
|
||||
def _cargo_path(self, rootdir, component):
|
||||
# TODO: make this less brittle
|
||||
repo = "github.com-88ac128001ac3a9a"
|
||||
# This can go away entirely once we can build a cargo that supports source-replacement
|
||||
repo = "github.com-1ecc6299db9ec823"
|
||||
return os.path.join(rootdir, "cargo_home", "registry", component, repo)
|
||||
|
||||
def _cargo_src_path(self, rootdir):
|
||||
@@ -47,6 +50,9 @@ class Crate(Wget):
|
||||
def _cargo_cache_path(self, rootdir):
|
||||
return self._cargo_path(rootdir, "cache")
|
||||
|
||||
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
|
||||
@@ -167,25 +173,33 @@ class Crate(Wget):
|
||||
"""
|
||||
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('PN', True)
|
||||
pn = d.getVar('BPN', True)
|
||||
if pn == ud.parm.get('name'):
|
||||
cmd = "tar -xz --no-same-owner -f %s" % thefile
|
||||
else:
|
||||
cargo_src = self._cargo_src_path(rootdir)
|
||||
cargo_cache = self._cargo_cache_path(rootdir)
|
||||
self._crate_unpack_old_layout(ud, rootdir, d)
|
||||
|
||||
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_src)
|
||||
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_cache)
|
||||
bb.utils.mkdirhier(cargo_src)
|
||||
bb.utils.mkdirhier(cargo_bitbake)
|
||||
|
||||
bb.note("Copying %s to %s/" % (thefile, cargo_cache))
|
||||
shutil.copy(thefile, cargo_cache)
|
||||
# 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)
|
||||
@@ -200,3 +214,42 @@ class Crate(Wget):
|
||||
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)
|
||||
|
||||
|
||||
def _crate_unpack_old_layout(self, ud, rootdir, d):
|
||||
"""
|
||||
Unpacks a crate in the old location that tried to emulate
|
||||
the Cargo registry layout.
|
||||
"""
|
||||
thefile = ud.localpath
|
||||
|
||||
cargo_src = self._cargo_src_path(rootdir)
|
||||
cargo_cache = self._cargo_cache_path(rootdir)
|
||||
|
||||
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_src)
|
||||
|
||||
# ensure we've got these paths made
|
||||
bb.utils.mkdirhier(cargo_cache)
|
||||
bb.utils.mkdirhier(cargo_src)
|
||||
|
||||
bb.note("Copying %s to %s/" % (thefile, cargo_cache))
|
||||
shutil.copy(thefile, cargo_cache)
|
||||
|
||||
# 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)
|
||||
|
||||
if ret != 0:
|
||||
raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url)
|
||||
|
||||
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
|
||||
}
|
||||
@@ -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,3 +0,0 @@
|
||||
require libgit2.inc
|
||||
SRC_URI = "https://github.com/libgit2/libgit2/archive/v${PV}.tar.gz"
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=34197a479f637beb9e09e56893f48bc2"
|
||||
SRC_URI[md5sum] = "3674ca2d40388b1175e25b6f5a3a82ad"
|
||||
SRC_URI[sha256sum] = "60198cbb34066b9b5c1613d15c0479f6cd25f4aef42f7ec515cd1cc13a77fede"
|
||||
require libgit2-release.inc
|
||||
@@ -1,2 +0,0 @@
|
||||
# meta-oe/recipes-support/libssh2
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -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"
|
||||
@@ -11,24 +8,22 @@ LICENSE = "MIT | Apache-2.0"
|
||||
|
||||
DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2"
|
||||
|
||||
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
|
||||
|
||||
SRC_URI = "\
|
||||
http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \
|
||||
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
|
||||
"
|
||||
|
||||
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 +39,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 +47,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"
|
||||
|
||||
@@ -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] = "98ab2a422634d447152380898a974b08"
|
||||
SRC_URI[cargo.sha256sum] = "1e73c038681fe308195427b71322a6350c65d3b8cbea199e45c7b672b4754e0e"
|
||||
|
||||
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.11 / -sys 0.1.37
|
||||
SRCREV_ssh2-rs = "ced77751cb780d0725a3411bd588c5a26ea79953"
|
||||
|
||||
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"
|
||||
105
recipes-devtools/cargo/cargo_0.11.0.bb
Normal file
105
recipes-devtools/cargo/cargo_0.11.0.bb
Normal file
@@ -0,0 +1,105 @@
|
||||
require cargo-snapshot.inc
|
||||
require cargo.inc
|
||||
|
||||
SRC_URI += " \
|
||||
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \
|
||||
file://0001-disable-cargo-snapshot-fetch.patch \
|
||||
file://0001-Never-update-the-registry-index.patch \
|
||||
crate://crates.io/advapi32-sys/0.1.2 \
|
||||
crate://crates.io/bufstream/0.1.1 \
|
||||
crate://crates.io/crossbeam/0.2.8 \
|
||||
crate://crates.io/docopt/0.6.78 \
|
||||
crate://crates.io/env_logger/0.3.2 \
|
||||
crate://crates.io/filetime/0.1.10 \
|
||||
crate://crates.io/flate2/0.2.13 \
|
||||
crate://crates.io/fs2/0.2.3 \
|
||||
crate://crates.io/glob/0.2.11 \
|
||||
crate://crates.io/hamcrest/0.1.0 \
|
||||
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/num_cpus/0.2.11 \
|
||||
crate://crates.io/regex/0.1.58 \
|
||||
crate://crates.io/rustc-serialize/0.3.18 \
|
||||
crate://crates.io/tar/0.4.5 \
|
||||
crate://crates.io/tempdir/0.3.4 \
|
||||
crate://crates.io/term/0.4.4 \
|
||||
crate://crates.io/toml/0.1.28 \
|
||||
crate://crates.io/url/1.1.0 \
|
||||
crate://crates.io/winapi/0.2.6 \
|
||||
crate://crates.io/semver/0.2.3 \
|
||||
crate://crates.io/regex-syntax/0.3.0 \
|
||||
crate://crates.io/utf8-ranges/0.1.3 \
|
||||
crate://crates.io/gcc/0.3.26 \
|
||||
crate://crates.io/unicode-normalization/0.1.2 \
|
||||
crate://crates.io/libz-sys/1.0.2 \
|
||||
crate://crates.io/rand/0.3.14 \
|
||||
crate://crates.io/user32-sys/0.1.2 \
|
||||
crate://crates.io/idna/0.1.0 \
|
||||
crate://crates.io/strsim/0.3.0 \
|
||||
crate://crates.io/matches/0.1.2 \
|
||||
crate://crates.io/cmake/0.1.16 \
|
||||
crate://crates.io/gdi32-sys/0.1.1 \
|
||||
crate://crates.io/bitflags/0.1.1 \
|
||||
crate://crates.io/unicode-bidi/0.2.3 \
|
||||
crate://crates.io/pkg-config/0.3.8 \
|
||||
crate://crates.io/winapi-build/0.1.1 \
|
||||
crate://crates.io/memchr/0.1.10 \
|
||||
crate://crates.io/pnacl-build-helper/1.4.10 \
|
||||
crate://crates.io/nom/1.2.2 \
|
||||
crate://crates.io/num/0.1.31 \
|
||||
crate://crates.io/uuid/0.2.3 \
|
||||
crate://crates.io/aho-corasick/0.5.1 \
|
||||
crate://crates.io/libressl-pnacl-sys/2.1.6 \
|
||||
crate://crates.io/miniz-sys/0.1.7 \
|
||||
crate://crates.io/openssl-sys/0.7.8 \
|
||||
crate://crates.io/url/0.5.10 \
|
||||
"
|
||||
# Compatible with Rust 1.10.0
|
||||
# https://static.rust-lang.org/dist/channel-rust-1.10.0.toml
|
||||
SRCREV_cargo = "259324cd8f9bb6e1068a3a2b77685e90fda3e3b6"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
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.19 / -sys 0.1.34
|
||||
SRCREV_curl-rust = "45b8cb56fbed45f828f96bdd8c286b2b3a8a26cb"
|
||||
|
||||
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.11 / -sys 0.1.37
|
||||
SRCREV_ssh2-rs = "ced77751cb780d0725a3411bd588c5a26ea79953"
|
||||
|
||||
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.4.3 / -sys 0.4.2
|
||||
SRCREV_git2-rs = "cd14fc7801e70d3b26a4e7e5d94785af1f7e9e58"
|
||||
|
||||
SRCREV_FORMAT .= "_git2-rs"
|
||||
EXTRA_OECARGO_PATHS += "${WORKDIR}/git2-rs"
|
||||
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 \
|
||||
"
|
||||
@@ -0,0 +1,88 @@
|
||||
From 27df8ab04275dfd715d1756fc517bb0323f1b210 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <stevenrwalter@gmail.com>
|
||||
Date: Fri, 2 Sep 2016 14:02:03 -0400
|
||||
Subject: [PATCH] Never update the registry index
|
||||
|
||||
Bitbake will fetch the index for us so that we needn't do network IO
|
||||
during a build
|
||||
---
|
||||
src/cargo/ops/cargo_run.rs | 2 +-
|
||||
src/cargo/sources/registry.rs | 34 +---------------------------------
|
||||
2 files changed, 2 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/src/cargo/ops/cargo_run.rs b/src/cargo/ops/cargo_run.rs
|
||||
index 6764118..379b98b 100644
|
||||
--- a/src/cargo/ops/cargo_run.rs
|
||||
+++ b/src/cargo/ops/cargo_run.rs
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::path::Path;
|
||||
|
||||
use ops::{self, CompileFilter};
|
||||
-use util::{self, CargoResult, process, ProcessError};
|
||||
+use util::{self, CargoResult, ProcessError};
|
||||
use core::Package;
|
||||
|
||||
pub fn run(manifest_path: &Path,
|
||||
diff --git a/src/cargo/sources/registry.rs b/src/cargo/sources/registry.rs
|
||||
index 614d654..a0c7fe6 100644
|
||||
--- a/src/cargo/sources/registry.rs
|
||||
+++ b/src/cargo/sources/registry.rs
|
||||
@@ -166,7 +166,6 @@ use std::path::{PathBuf, Path};
|
||||
|
||||
use curl::http;
|
||||
use flate2::read::GzDecoder;
|
||||
-use git2;
|
||||
use rustc_serialize::hex::ToHex;
|
||||
use rustc_serialize::json;
|
||||
use tar::Archive;
|
||||
@@ -174,7 +173,7 @@ use url::Url;
|
||||
|
||||
use core::{Source, SourceId, PackageId, Package, Summary, Registry};
|
||||
use core::dependency::{Dependency, DependencyInner, Kind};
|
||||
-use sources::{PathSource, git};
|
||||
+use sources::PathSource;
|
||||
use util::{CargoResult, Config, internal, ChainError, ToUrl, human};
|
||||
use util::{hex, Sha256, paths, Filesystem, FileLock};
|
||||
use ops;
|
||||
@@ -464,38 +463,7 @@ impl<'cfg> RegistrySource<'cfg> {
|
||||
|
||||
/// Actually perform network operations to update the registry
|
||||
fn do_update(&mut self) -> CargoResult<()> {
|
||||
- if self.updated {
|
||||
- return Ok(())
|
||||
- }
|
||||
- try!(self.checkout_path.create_dir());
|
||||
- let lock = try!(self.checkout_path.open_rw(Path::new(INDEX_LOCK),
|
||||
- self.config,
|
||||
- "the registry index"));
|
||||
- let path = lock.path().parent().unwrap();
|
||||
-
|
||||
- try!(self.config.shell().status("Updating",
|
||||
- format!("registry `{}`", self.source_id.url())));
|
||||
- let repo = try!(git2::Repository::open(path).or_else(|_| {
|
||||
- let _ = lock.remove_siblings();
|
||||
- git2::Repository::init(path)
|
||||
- }));
|
||||
-
|
||||
- // git fetch origin
|
||||
- let url = self.source_id.url().to_string();
|
||||
- let refspec = "refs/heads/*:refs/remotes/origin/*";
|
||||
-
|
||||
- try!(git::fetch(&repo, &url, refspec, &self.config).chain_error(|| {
|
||||
- internal(format!("failed to fetch `{}`", url))
|
||||
- }));
|
||||
-
|
||||
- // git reset --hard origin/master
|
||||
- let reference = "refs/remotes/origin/master";
|
||||
- let oid = try!(repo.refname_to_id(reference));
|
||||
- trace!("[{}] updating to rev {}", self.source_id, oid);
|
||||
- let object = try!(repo.find_object(oid, None));
|
||||
- try!(repo.reset(&object, git2::ResetType::Hard, None));
|
||||
self.updated = true;
|
||||
- self.cache.clear();
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 6d74b6af6a23e195fc54c81a9bbdb21e7d5b6414 Mon Sep 17 00:00:00 2001
|
||||
From 8f82cc69e50e7c8e48a2e20b7061483a28bd0d7f 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
|
||||
@@ -6,22 +6,27 @@ 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/Cargo.toml | 38 --------------------------------------
|
||||
curl-sys/lib.rs | 2 --
|
||||
2 files changed, 28 deletions(-)
|
||||
2 files changed, 40 deletions(-)
|
||||
|
||||
diff --git a/curl-sys/Cargo.toml b/curl-sys/Cargo.toml
|
||||
index bf994bf..f153039 100644
|
||||
index 24bc4fa..dd56209 100644
|
||||
--- a/curl-sys/Cargo.toml
|
||||
+++ b/curl-sys/Cargo.toml
|
||||
@@ -19,29 +19,3 @@ path = "lib.rs"
|
||||
@@ -19,42 +19,4 @@ path = "lib.rs"
|
||||
[dependencies]
|
||||
libz-sys = ">= 0"
|
||||
libc = "0.2"
|
||||
-
|
||||
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-
|
||||
-# Unix platforms use OpenSSL for now to provide SSL functionality
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i586-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-linux-android.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-linux-gnu.dependencies]
|
||||
@@ -30,10 +35,18 @@ index bf994bf..f153039 100644
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.armv7-unknown-linux-gnueabihf.dependencies]
|
||||
openssl-sys = "0.7.0"
|
||||
-[target.arm-linux-androideabi.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.aarch64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.powerpc-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.powerpc64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.powerpc64le-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.i686-unknown-freebsd.dependencies]
|
||||
-openssl-sys = ">= 0"
|
||||
-[target.x86_64-unknown-freebsd.dependencies]
|
||||
@@ -45,7 +58,7 @@ index bf994bf..f153039 100644
|
||||
-[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
|
||||
index 7990bd6..eb6c27a 100644
|
||||
--- a/curl-sys/lib.rs
|
||||
+++ b/curl-sys/lib.rs
|
||||
@@ -3,8 +3,6 @@
|
||||
@@ -58,5 +71,5 @@ index be80469..b53b445 100644
|
||||
use libc::{c_void, c_int, c_char, c_uint, c_long};
|
||||
|
||||
--
|
||||
2.4.10
|
||||
2.9.2
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
From 445289f4eacc5c048e4a455bb6d6a6a2b9995e88 Mon Sep 17 00:00:00 2001
|
||||
From eb23b1b6f749102e3db92b73a5e55ec6ad688524 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(-)
|
||||
Cargo.toml | 40 +---------------------------------------
|
||||
1 file changed, 1 insertion(+), 39 deletions(-)
|
||||
|
||||
diff --git a/Cargo.toml b/Cargo.toml
|
||||
index 74f63c8..28aa1fa 100644
|
||||
index 5f6cf87..0c87156 100644
|
||||
--- a/Cargo.toml
|
||||
+++ b/Cargo.toml
|
||||
@@ -12,36 +12,11 @@ url = "0.2.0"
|
||||
@@ -12,49 +12,11 @@ url = ">= 0.5, < 2.0"
|
||||
log = "0.3.0"
|
||||
libc = "0.2"
|
||||
curl-sys = { path = "curl-sys", version = "0.1.0" }
|
||||
@@ -21,8 +21,13 @@ index 74f63c8..28aa1fa 100644
|
||||
env_logger = "0.3.0"
|
||||
|
||||
-# Unix platforms use OpenSSL for now to provide SSL functionality
|
||||
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.i586-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]
|
||||
@@ -31,10 +36,18 @@ index 74f63c8..28aa1fa 100644
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.armv7-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.powerpc-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.powerpc64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.powerpc64le-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]
|
||||
@@ -50,5 +63,5 @@ index 74f63c8..28aa1fa 100644
|
||||
|
||||
name = "test"
|
||||
--
|
||||
2.4.10
|
||||
2.9.2
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
From 95709b3f5b1495a57043975d7100461feed46b2f Mon Sep 17 00:00:00 2001
|
||||
From 308fd350907fba13f68dcdb8e48040582466cae6 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(-)
|
||||
libgit2-sys/Cargo.toml | 33 +--------------------------------
|
||||
1 file changed, 1 insertion(+), 32 deletions(-)
|
||||
|
||||
diff --git a/libgit2-sys/Cargo.toml b/libgit2-sys/Cargo.toml
|
||||
index 15b28d8..3590878 100644
|
||||
index 2395314..29000ef 100644
|
||||
--- a/libgit2-sys/Cargo.toml
|
||||
+++ b/libgit2-sys/Cargo.toml
|
||||
@@ -17,32 +17,12 @@ path = "lib.rs"
|
||||
@@ -17,44 +17,13 @@ path = "lib.rs"
|
||||
libssh2-sys = { version = ">= 0", optional = true }
|
||||
libc = "0.2"
|
||||
libz-sys = ">= 0"
|
||||
@@ -20,17 +20,29 @@ index 15b28d8..3590878 100644
|
||||
[build-dependencies]
|
||||
pkg-config = "0.3"
|
||||
cmake = "0.1.2"
|
||||
gcc = "0.3"
|
||||
|
||||
-[target."cfg(all(unix, not(target_os = \"macos\")))".dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-
|
||||
-[target.i686-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.i586-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.powerpc64-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.powerpc64le-unknown-linux-gnu.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.arm-unknown-linux-gnueabihf.dependencies]
|
||||
-openssl-sys = "0.7.0"
|
||||
-[target.armv7-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]
|
||||
@@ -46,5 +58,5 @@ index 15b28d8..3590878 100644
|
||||
ssh = ["libssh2-sys"]
|
||||
https = []
|
||||
--
|
||||
2.4.10
|
||||
2.9.2
|
||||
|
||||
|
||||
30
recipes-devtools/rust/compiler-rt_1.10.0.bb
Normal file
30
recipes-devtools/rust/compiler-rt_1.10.0.bb
Normal file
@@ -0,0 +1,30 @@
|
||||
SUMMARY = "Rust compiler run-time"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=27b14ab4ce08d04c3a9a5f0ed7997362"
|
||||
|
||||
SRC_URI = "\
|
||||
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
|
||||
"
|
||||
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}/src/compiler-rt"
|
||||
|
||||
do_compile () {
|
||||
oe_runmake -C ${S} \
|
||||
ProjSrcRoot="${S}" \
|
||||
ProjObjRoot="${B}" \
|
||||
CC="${CC}" \
|
||||
AR="${AR}" \
|
||||
RANLIB="${RANLIB}" \
|
||||
CFLAGS="${CFLAGS}" \
|
||||
TargetTriple=${HOST_SYS} \
|
||||
triple-builtins
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${libdir}
|
||||
cp triple/builtins/libcompiler_rt.a ${D}${libdir}/libcompiler-rt.a
|
||||
}
|
||||
24
recipes-devtools/rust/compiler-rt_1.12.1.bb
Normal file
24
recipes-devtools/rust/compiler-rt_1.12.1.bb
Normal file
@@ -0,0 +1,24 @@
|
||||
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
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
DEPENDS += "rust-llvm-native (=${PV})"
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
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
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
From 185c77dbb5708bed7c916b8e01ff867b6c215bfb Mon Sep 17 00:00:00 2001
|
||||
From 69b65762ccdf459143fc273a39b0a0e0c6d8fe3e Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Mon, 2 May 2016 19:57:46 -0400
|
||||
Subject: [PATCH] Add config for musl-based arm builds
|
||||
Subject: [PATCH 01/11] Add config for musl-based arm builds
|
||||
|
||||
---
|
||||
mk/cfg/arm-unknown-linux-musleabi.mk | 26 ++++++++++++++++++++++++++
|
||||
@@ -1,7 +1,7 @@
|
||||
From 3237afb78f960c015025186166f1c0998c00c6a6 Mon Sep 17 00:00:00 2001
|
||||
From 0535c75086a9c170d8d4d99b3030d9136ea6e2c7 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 02/11] Target: add default target.json path:
|
||||
$libdir/rust/targets
|
||||
|
||||
---
|
||||
@@ -11,7 +11,7 @@ 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 da5555d..6cd0ea9 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -35,7 +35,7 @@ use getopts;
|
||||
@@ -21,9 +21,9 @@ index c4697eb..4cc059b 100644
|
||||
-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,
|
||||
@@ -787,8 +787,8 @@ pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
|
||||
v
|
||||
}
|
||||
|
||||
@@ -35,10 +35,10 @@ index c4697eb..4cc059b 100644
|
||||
Err(e) => {
|
||||
panic!(sp.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 907241d..d0e3743 100644
|
||||
--- a/src/librustc/session/mod.rs
|
||||
+++ b/src/librustc/session/mod.rs
|
||||
@@ -429,13 +429,17 @@ pub fn build_session_(sopts: config::Options,
|
||||
@@ -470,13 +470,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 2163a8a..38607f0 100644
|
||||
--- a/src/librustc_back/target/mod.rs
|
||||
+++ b/src/librustc_back/target/mod.rs
|
||||
@@ -49,6 +49,8 @@ use serialize::json::Json;
|
||||
@@ -48,6 +48,8 @@ use serialize::json::Json;
|
||||
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 {
|
||||
@@ -477,12 +479,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())?;
|
||||
@@ -513,8 +516,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.7.4
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
From 3254ad1d84b177eb960219c2bce26f8980a511e1 Mon Sep 17 00:00:00 2001
|
||||
From 4290b8f28222824a558ac4471d26fe88b2889a5b 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 03/11] 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 c47020c..fcf1409 100644
|
||||
--- a/mk/main.mk
|
||||
+++ b/mk/main.mk
|
||||
@@ -383,32 +383,26 @@ define SREQ
|
||||
@@ -403,32 +403,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) := \
|
||||
@@ -536,6 +530,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.7.4
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 004ddead436887fe99bfa9d0d25f6cdaf9f6148b Mon Sep 17 00:00:00 2001
|
||||
From 06b8c4bc8f7056d604d8ef4d699273cc1dd39025 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 04/11] 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.7.4
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
From 8b088363a61a627fd8a31318d15164113f081660 Mon Sep 17 00:00:00 2001
|
||||
From f7441b3080088d8131d106c59c3543b22c9e8211 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 06/11] 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 6b54ec8..5b41b75 100644
|
||||
--- a/src/libstd/thread/local.rs
|
||||
+++ b/src/libstd/thread/local.rs
|
||||
@@ -324,7 +324,7 @@ pub mod elf {
|
||||
@@ -346,7 +346,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.7.4
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 1a9ada8070bb9cd293cfb93913721c68ca0b7766 Mon Sep 17 00:00:00 2001
|
||||
From a73a748cd73920380ae1f069be91ff833e99d003 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 07/11] 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.7.4
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
From 042a5df36597c2c6c23900667ae1b4299279092f Mon Sep 17 00:00:00 2001
|
||||
From: Steven Walter <swalter@lexmark.com>
|
||||
Date: Wed, 18 Nov 2015 08:33:26 -0500
|
||||
Subject: [PATCH 08/11] 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 | 12 +++++++++++-
|
||||
2 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index 6cd0ea9..f90398d 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -585,6 +585,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 222d447..e951476 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.7.4
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 7abedc46cad6b52d44badaf88350d41ef907cd4c Mon Sep 17 00:00:00 2001
|
||||
From 44ee7a68f44132ebe32ac486355945131c7a2b83 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 09/11] mk/platform.mk: pass -C crate_hash to builds
|
||||
|
||||
bitbake recipe will export FORCE_CRATE_HASH
|
||||
---
|
||||
@@ -9,17 +9,17 @@ bitbake recipe will export FORCE_CRATE_HASH
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/mk/platform.mk b/mk/platform.mk
|
||||
index eb693b8..e6317b5 100644
|
||||
index c264462..b959d59 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.7.4
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
From 9c76c93de35fb45ed18e75827649e299d8c4e94e Mon Sep 17 00:00:00 2001
|
||||
From: Eduard Burtescu <edy.burt@gmail.com>
|
||||
Date: Sun, 14 Aug 2016 11:16:28 +0300
|
||||
Subject: [PATCH 11/11] Get rid of the .note interpretation of rustc dylib
|
||||
metadata.
|
||||
|
||||
---
|
||||
src/librustc_metadata/loader.rs | 41 ++++++++++++++++++-----------------------
|
||||
src/librustc_trans/base.rs | 13 ++++++++++---
|
||||
2 files changed, 28 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/src/librustc_metadata/loader.rs b/src/librustc_metadata/loader.rs
|
||||
index dc10391..9430b70 100644
|
||||
--- a/src/librustc_metadata/loader.rs
|
||||
+++ b/src/librustc_metadata/loader.rs
|
||||
@@ -875,34 +875,29 @@ fn get_metadata_section_imp(target: &Target, flavor: CrateFlavor, filename: &Pat
|
||||
}
|
||||
|
||||
pub fn meta_section_name(target: &Target) -> &'static str {
|
||||
+ // Historical note:
|
||||
+ //
|
||||
+ // When using link.exe it was seen that the section name `.note.rustc`
|
||||
+ // was getting shortened to `.note.ru`, and according to the PE and COFF
|
||||
+ // specification:
|
||||
+ //
|
||||
+ // > Executable images do not use a string table and do not support
|
||||
+ // > section names longer than 8 characters
|
||||
+ //
|
||||
+ // https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
|
||||
+ //
|
||||
+ // As a result, we choose a slightly shorter name! As to why
|
||||
+ // `.note.rustc` works on MinGW, that's another good question...
|
||||
+
|
||||
if target.options.is_like_osx {
|
||||
- "__DATA,__note.rustc"
|
||||
- } else if target.options.is_like_msvc {
|
||||
- // When using link.exe it was seen that the section name `.note.rustc`
|
||||
- // was getting shortened to `.note.ru`, and according to the PE and COFF
|
||||
- // specification:
|
||||
- //
|
||||
- // > Executable images do not use a string table and do not support
|
||||
- // > section names longer than 8 characters
|
||||
- //
|
||||
- // https://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx
|
||||
- //
|
||||
- // As a result, we choose a slightly shorter name! As to why
|
||||
- // `.note.rustc` works on MinGW, that's another good question...
|
||||
- ".rustc"
|
||||
+ "__DATA,.rustc"
|
||||
} else {
|
||||
- ".note.rustc"
|
||||
+ ".rustc"
|
||||
}
|
||||
}
|
||||
|
||||
-pub fn read_meta_section_name(target: &Target) -> &'static str {
|
||||
- if target.options.is_like_osx {
|
||||
- "__note.rustc"
|
||||
- } else if target.options.is_like_msvc {
|
||||
- ".rustc"
|
||||
- } else {
|
||||
- ".note.rustc"
|
||||
- }
|
||||
+pub fn read_meta_section_name(_target: &Target) -> &'static str {
|
||||
+ ".rustc"
|
||||
}
|
||||
|
||||
// A diagnostic function for dumping crate metadata to an output stream
|
||||
diff --git a/src/librustc_trans/base.rs b/src/librustc_trans/base.rs
|
||||
index d4f0786..93c9d1a 100644
|
||||
--- a/src/librustc_trans/base.rs
|
||||
+++ b/src/librustc_trans/base.rs
|
||||
@@ -2523,10 +2523,17 @@ pub fn write_metadata<'a, 'tcx>(cx: &SharedCrateContext<'a, 'tcx>,
|
||||
};
|
||||
unsafe {
|
||||
llvm::LLVMSetInitializer(llglobal, llconst);
|
||||
- let name =
|
||||
+ let section_name =
|
||||
cx.tcx().sess.cstore.metadata_section_name(&cx.sess().target.target);
|
||||
- let name = CString::new(name).unwrap();
|
||||
- llvm::LLVMSetSection(llglobal, name.as_ptr())
|
||||
+ let name = CString::new(section_name).unwrap();
|
||||
+ llvm::LLVMSetSection(llglobal, name.as_ptr());
|
||||
+
|
||||
+ // Also generate a .section directive to force no
|
||||
+ // flags, at least for ELF outputs, so that the
|
||||
+ // metadata doesn't get loaded into memory.
|
||||
+ let directive = format!(".section {}", section_name);
|
||||
+ let directive = CString::new(directive).unwrap();
|
||||
+ llvm::LLVMSetModuleInlineAsm(cx.metadata_llmod(), directive.as_ptr())
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
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 01/10] 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 | 13 +++++++++++--
|
||||
3 files changed, 20 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
|
||||
index e988ddc..563f3ac 100644
|
||||
--- a/src/librustc/session/config.rs
|
||||
+++ b/src/librustc/session/config.rs
|
||||
@@ -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};
|
||||
|
||||
pub struct Config {
|
||||
pub target: Target,
|
||||
@@ -1011,8 +1011,8 @@ pub fn build_configuration(sess: &Session,
|
||||
v
|
||||
}
|
||||
|
||||
-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 c71253a..13b4e05 100644
|
||||
--- a/src/librustc/session/mod.rs
|
||||
+++ b/src/librustc/session/mod.rs
|
||||
@@ -395,13 +395,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 18686e3..d439b59 100644
|
||||
--- a/src/librustc_back/target/mod.rs
|
||||
+++ b/src/librustc_back/target/mod.rs
|
||||
@@ -49,6 +49,8 @@ use std::collections::BTreeMap;
|
||||
use std::default::Default;
|
||||
use std::io::prelude::*;
|
||||
use syntax::abi::Abi;
|
||||
+use std::borrow::ToOwned;
|
||||
+use std::path::Path;
|
||||
|
||||
mod android_base;
|
||||
mod apple_base;
|
||||
@@ -541,12 +543,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())?;
|
||||
@@ -577,8 +580,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.0
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
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 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 | 29 ++++++++++++-----------------
|
||||
1 file changed, 12 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/mk/main.mk b/mk/main.mk
|
||||
index 90d3563..cdcbdf2 100644
|
||||
--- a/mk/main.mk
|
||||
+++ b/mk/main.mk
|
||||
@@ -420,32 +420,26 @@ define SREQ
|
||||
HROOT$(1)_H_$(3) = $(3)/stage$(1)
|
||||
HBIN$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/bin
|
||||
|
||||
-ifeq ($$(CFG_WINDOWSY_$(3)),1)
|
||||
-# On Windows we always store host runtime libraries in the 'bin' directory because
|
||||
-# there's no rpath. Target libraries go under $CFG_LIBDIR_RELATIVE (usually 'lib').
|
||||
-HLIB_RELATIVE$(1)_H_$(3) = bin
|
||||
-TROOT$(1)_T_$(2)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(CFG_LIBDIR_RELATIVE)/rustlib/$(2)
|
||||
-# Remove the next 3 lines after a snapshot
|
||||
-ifeq ($(1),0)
|
||||
-RUSTFLAGS_STAGE0 += -L $$(TROOT$(1)_T_$(2)_H_$(3))/lib
|
||||
-endif
|
||||
-
|
||||
-else
|
||||
-
|
||||
-ifeq ($(1),0)
|
||||
-HLIB_RELATIVE$(1)_H_$(3) = lib
|
||||
-else
|
||||
HLIB_RELATIVE$(1)_H_$(3) = $$(CFG_LIBDIR_RELATIVE)
|
||||
-endif
|
||||
+
|
||||
TROOT$(1)_T_$(2)_H_$(3) = $$(HLIB$(1)_H_$(3))/rustlib/$(2)
|
||||
|
||||
-endif
|
||||
HLIB$(1)_H_$(3) = $$(HROOT$(1)_H_$(3))/$$(HLIB_RELATIVE$(1)_H_$(3))
|
||||
|
||||
# Destinations of artifacts for target architectures
|
||||
TBIN$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/bin
|
||||
TLIB$(1)_T_$(2)_H_$(3) = $$(TROOT$(1)_T_$(2)_H_$(3))/lib
|
||||
|
||||
+# Don't trust stage0, be explicit about libraries
|
||||
+# TODO: rather than specifying sysroot, we really want to tell which libdir to
|
||||
+# use (ie: the dir containing 'rustlib'). This would allow us to avoid
|
||||
+# passing the '-L' options.
|
||||
+ifeq ($(1),0)
|
||||
+RUSTFLAGS_S_$(1)_T_$(2)_H_$(3) += --sysroot "$$(HROOT$(1)_H_$(3))" \
|
||||
+ -L "$$(TLIB$(1)_T_$(2)_H_$(3))"
|
||||
+endif
|
||||
+
|
||||
+
|
||||
# Preqrequisites for using the stageN compiler
|
||||
ifeq ($(1),0)
|
||||
HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(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)) \
|
||||
+ $$(RUSTFLAGS_S_$(1)_T_$(2)_H_$(3)) \
|
||||
$$(RUSTC_FLAGS_$(2))
|
||||
|
||||
endef
|
||||
--
|
||||
2.10.0
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
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 03/10] mk: add missing CFG_LIBDIR_RELATIVE
|
||||
|
||||
---
|
||||
mk/grammar.mk | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/mk/grammar.mk b/mk/grammar.mk
|
||||
index 0d527bd..926f247 100644
|
||||
--- a/mk/grammar.mk
|
||||
+++ b/mk/grammar.mk
|
||||
@@ -11,8 +11,8 @@
|
||||
BG = $(CFG_BUILD_DIR)/grammar/
|
||||
SG = $(S)src/grammar/
|
||||
B = $(CFG_BUILD_DIR)/$(CFG_BUILD)/stage2/
|
||||
-L = $(B)lib/rustlib/$(CFG_BUILD)/lib
|
||||
-LD = $(CFG_BUILD)/stage2/lib/rustlib/$(CFG_BUILD)/lib/
|
||||
+L = $(B)$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib
|
||||
+LD = $(CFG_BUILD)/stage2/$(CFG_LIBDIR_RELATIVE)/rustlib/$(CFG_BUILD)/lib/
|
||||
RUSTC = $(STAGE2_T_$(CFG_BUILD)_H_$(CFG_BUILD))
|
||||
ifeq ($(CFG_OSTYPE),apple-darwin)
|
||||
FLEX_LDFLAGS=-ll
|
||||
--
|
||||
2.10.0
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
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 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 152b977..3c62862 100644
|
||||
--- a/src/libstd/thread/local.rs
|
||||
+++ b/src/libstd/thread/local.rs
|
||||
@@ -380,7 +380,7 @@ pub mod elf {
|
||||
#[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.0
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
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 06/10] mk/install: use disable-rewrite-paths
|
||||
|
||||
This stops the install scripts from doing work we've already handled.
|
||||
|
||||
Path rewriting is only useful for prepackaged binary installers.
|
||||
---
|
||||
mk/install.mk | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mk/install.mk b/mk/install.mk
|
||||
index d2e5449..e67650b 100644
|
||||
--- a/mk/install.mk
|
||||
+++ b/mk/install.mk
|
||||
@@ -12,7 +12,9 @@ RUN_INSTALLER = cd tmp/empty_dir && \
|
||||
sh ../../tmp/dist/$(1)/install.sh \
|
||||
--prefix="$(DESTDIR)$(CFG_PREFIX)" \
|
||||
--libdir="$(DESTDIR)$(CFG_LIBDIR)" \
|
||||
- --mandir="$(DESTDIR)$(CFG_MANDIR)"
|
||||
+ --mandir="$(DESTDIR)$(CFG_MANDIR)" \
|
||||
+ "$(MAYBE_DISABLE_VERIFY)" \
|
||||
+ --disable-rewrite-paths
|
||||
|
||||
install:
|
||||
ifeq (root user, $(USER) $(patsubst %,user,$(SUDO_USER)))
|
||||
--
|
||||
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
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
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 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 d601cab..0b5e9f2 100644
|
||||
--- a/mk/platform.mk
|
||||
+++ b/mk/platform.mk
|
||||
@@ -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 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))
|
||||
--
|
||||
2.10.0
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
From c7daec775a917d9e3017bc35ea7d88cc9418f181 Mon Sep 17 00:00:00 2001
|
||||
From: Cody P Schafer <dev@codyps.com>
|
||||
Date: Mon, 2 Mar 2015 13:27:49 -0500
|
||||
Subject: [PATCH] add option to disable rewriting of install paths
|
||||
|
||||
This is intended for use by rust & cargo's `make install`, as in that
|
||||
case:
|
||||
|
||||
- these paths are typically built into the pre-install layout already
|
||||
- attempting to do the replacement will be incorrect subdirectory
|
||||
cases (ie: libdir=lib/foo)
|
||||
---
|
||||
install-template.sh | 21 ++++++++++++---------
|
||||
1 file changed, 12 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/install-template.sh b/install-template.sh
|
||||
index 042b955..4ecf430 100644
|
||||
--- a/install-template.sh
|
||||
+++ b/install-template.sh
|
||||
@@ -618,16 +618,18 @@ install_components() {
|
||||
# Decide the destination of the file
|
||||
local _file_install_path="$_dest_prefix/$_file"
|
||||
|
||||
- if echo "$_file" | grep "^lib/" > /dev/null
|
||||
- then
|
||||
- local _f="$(echo "$_file" | sed 's/^lib\///')"
|
||||
- _file_install_path="$CFG_LIBDIR/$_f"
|
||||
- fi
|
||||
+ if [ -n "${CFG_REWRITE_PATHS-}" ]; then
|
||||
+ if echo "$_file" | grep "^lib/" > /dev/null
|
||||
+ then
|
||||
+ local _f="$(echo "$_file" | sed 's/^lib\///')"
|
||||
+ _file_install_path="$CFG_LIBDIR/$_f"
|
||||
+ fi
|
||||
|
||||
- if echo "$_file" | grep "^share/man/" > /dev/null
|
||||
- then
|
||||
- local _f="$(echo "$_file" | sed 's/^share\/man\///')"
|
||||
- _file_install_path="$CFG_MANDIR/$_f"
|
||||
+ if echo "$_file" | grep "^share/man/" > /dev/null
|
||||
+ then
|
||||
+ local _f="$(echo "$_file" | sed 's/^share\/man\///')"
|
||||
+ _file_install_path="$CFG_MANDIR/$_f"
|
||||
+ fi
|
||||
fi
|
||||
|
||||
# Make sure there's a directory for it
|
||||
@@ -810,6 +812,7 @@ valopt mandir "$CFG_DESTDIR_PREFIX/share/man" "install man pages in PATH"
|
||||
opt ldconfig 1 "run ldconfig after installation (Linux only)"
|
||||
opt verify 1 "obsolete"
|
||||
flag verbose "run with verbose output"
|
||||
+opt rewrite-paths 1 "rewrite install paths for libdir & mandir"
|
||||
|
||||
if [ $HELP -eq 1 ]
|
||||
then
|
||||
--
|
||||
2.4.1
|
||||
|
||||
@@ -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,42 +0,0 @@
|
||||
rust: don't block before random pool is initialized
|
||||
|
||||
Upstream-Status: Backport [See https://github.com/rust-lang/rust/pull/33086]
|
||||
|
||||
Signed-off-by: Derek Straka <derek@asterius.io>
|
||||
--- ./src/libstd/rand/os.rs.orig 2016-08-18 13:14:25.908309986 -0400
|
||||
+++ ./src/libstd/rand/os.rs 2016-08-18 13:14:11.316560875 -0400
|
||||
@@ -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,7 +71,20 @@
|
||||
let err = errno() as libc::c_int;
|
||||
if err == libc::EINTR {
|
||||
continue;
|
||||
- } else {
|
||||
+ } else if err == libc::EAGAIN {
|
||||
+ // if getrandom() returns EAGAIN it would have blocked
|
||||
+ // because the non-blocking pool (urandom) has not
|
||||
+ // initialized in the kernel yet due to a lack of entropy
|
||||
+ // the fallback we do here is to avoid blocking applications
|
||||
+ // which could depend on this call without ever knowing
|
||||
+ // they do and don't have a work around. The PRNG of
|
||||
+ // /dev/urandom will still be used but not over a completely
|
||||
+ // full entropy pool
|
||||
+ let reader = File::open("/dev/urandom").expect("Unable to open /dev/urandom");
|
||||
+ let mut reader_rng = ReaderRng::new(reader);
|
||||
+ reader_rng.fill_bytes(& mut v[read..]);
|
||||
+ read += v.len() as usize;
|
||||
+ } else {
|
||||
panic!("unexpected getrandom error: {}", err);
|
||||
}
|
||||
} else {
|
||||
|
||||
41
recipes-devtools/rust/libstd-rs_1.10.0.bb
Normal file
41
recipes-devtools/rust/libstd-rs_1.10.0.bb
Normal file
@@ -0,0 +1,41 @@
|
||||
SUMMARY = "Rust standard libaries"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
|
||||
|
||||
SRC_URI = "\
|
||||
https://static.rust-lang.org/dist/rustc-${PV}-src.tar.gz;name=rust \
|
||||
"
|
||||
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
|
||||
|
||||
SRC_URI += "\
|
||||
crate://crates.io/gcc/0.3.26 \
|
||||
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
|
||||
"
|
||||
|
||||
DEPENDS += "compiler-rt (=${PV})"
|
||||
|
||||
RUSTLIB_DEP = ""
|
||||
inherit cargo
|
||||
|
||||
# Needed so cargo can find libbacktrace
|
||||
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
do_compile_prepend () {
|
||||
cd ${S}/src/rustc/std_shim
|
||||
export CARGO_TARGET_DIR="${B}"
|
||||
export RUSTC_BOOTSTRAP_KEY="${RS_KEY}"
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${rustlibdir}
|
||||
cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir}
|
||||
}
|
||||
37
recipes-devtools/rust/libstd-rs_1.12.1.bb
Normal file
37
recipes-devtools/rust/libstd-rs_1.12.1.bb
Normal file
@@ -0,0 +1,37 @@
|
||||
SUMMARY = "Rust standard libaries"
|
||||
HOMEPAGE = "http://www.rust-lang.org"
|
||||
SECTION = "devel"
|
||||
LICENSE = "MIT | Apache-2.0"
|
||||
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
|
||||
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
|
||||
|
||||
SRC_URI += "\
|
||||
crate://crates.io/gcc/0.3.27 \
|
||||
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
|
||||
"
|
||||
|
||||
DEPENDS += "compiler-rt (=${PV})"
|
||||
|
||||
RUSTLIB_DEP = ""
|
||||
inherit cargo
|
||||
|
||||
# Needed so cargo can find libbacktrace
|
||||
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
do_compile_prepend () {
|
||||
cd ${S}/src/rustc/std_shim
|
||||
export CARGO_TARGET_DIR="${B}"
|
||||
export RUSTC_BOOTSTRAP_KEY="${RS_KEY}"
|
||||
}
|
||||
|
||||
do_install () {
|
||||
mkdir -p ${D}${rustlibdir}
|
||||
cp ${B}/${TARGET_SYS}/release/deps/* ${D}${rustlibdir}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
require rust.inc
|
||||
inherit cross
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
# Otherwise we'll depend on what we provide
|
||||
INHIBIT_DEFAULT_RUST_DEPS = "1"
|
||||
@@ -10,6 +11,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 +33,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"
|
||||
50
recipes-devtools/rust/rust-cross_1.12.1.bb
Normal file
50
recipes-devtools/rust/rust-cross_1.12.1.bb
Normal file
@@ -0,0 +1,50 @@
|
||||
require rust.inc
|
||||
inherit cross
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
# Otherwise we'll depend on what we provide
|
||||
INHIBIT_DEFAULT_RUST_DEPS = "1"
|
||||
|
||||
# Unlike native (which nicely maps it's DEPENDS) cross wipes them out completely.
|
||||
# Generally, we (and cross in general) need the same things that native needs,
|
||||
# so it might make sense to take it's mapping. For now, though, we just mention
|
||||
# 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}"
|
||||
|
||||
# In the cross compilation case, rustc doesn't seem to get the rpath quite
|
||||
# right. It manages to include '../../lib/${TARGET_PREFIX}', but doesn't
|
||||
# include the '../../lib' (ie: relative path from cross_bindir to normal
|
||||
# libdir. As a result, we end up not being able to properly reference files in normal ${libdir}.
|
||||
# Most of the time this happens to work fine as the systems libraries are
|
||||
# subsituted, but sometimes a host system will lack a library, or the right
|
||||
# version of a library (libtinfo was how I noticed this).
|
||||
#
|
||||
# FIXME: this should really be fixed in rust itself.
|
||||
# FIXME: using hard-coded relative paths is wrong, we should ask bitbake for
|
||||
# the relative path between 2 of it's vars.
|
||||
HOST_POST_LINK_ARGS_append = " -Wl,-rpath=../../lib"
|
||||
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}"
|
||||
|
||||
do_configure () {
|
||||
}
|
||||
|
||||
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"
|
||||
@@ -1,9 +0,0 @@
|
||||
require rust-llvm.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa"
|
||||
|
||||
do_install_append () {
|
||||
cd "${B}"
|
||||
install -d "${D}${bindir}"
|
||||
install -m755 "Release/bin/FileCheck" "${D}${bindir}"
|
||||
}
|
||||
@@ -1,39 +1,113 @@
|
||||
require rust-shared-source.inc
|
||||
|
||||
SUMMARY = "LLVM compiler framework (packaged with rust)"
|
||||
LICENSE = "NCSA"
|
||||
|
||||
S .= "/src/llvm"
|
||||
S = "${WORKDIR}/rustc-${PV}/src/llvm"
|
||||
|
||||
inherit autotools
|
||||
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=4c0bc17c954e99fd547528d938832bfa"
|
||||
|
||||
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"
|
||||
inherit cmake pythonnative
|
||||
|
||||
EXTRA_OECONF += "--enable-keep-symbols"
|
||||
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} \
|
||||
"
|
||||
|
||||
PACKAGES += "${PN}-data"
|
||||
# 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"
|
||||
|
||||
# Add the extra locations to avoid the complaints about unpackaged files
|
||||
FILES_${PN}-data = "${datadir}"
|
||||
FILES_${PN}-dev += "${libdir}"
|
||||
EXTRA_OECMAKE_append_class-target = "\
|
||||
-DCROSS_TOOLCHAIN_FLAGS_NATIVE='-DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/native_toolchain.cmake' \
|
||||
"
|
||||
|
||||
do_install_append () {
|
||||
# Remove the debug info (>2 GB) as part of normal operation
|
||||
rm -rf ${D}${bindir}/.debug
|
||||
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" )
|
||||
|
||||
cd ${D}${bindir}
|
||||
ln -s *-llc llc
|
||||
for i in *-llvm-*; do
|
||||
link=$(echo $i | sed -e 's/.*-llvm-\(.*\)/\1/')
|
||||
ln -sf $i llvm-$link
|
||||
done
|
||||
# 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
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
2
recipes-devtools/rust/rust-llvm_1.10.0.bb
Normal file
2
recipes-devtools/rust/rust-llvm_1.10.0.bb
Normal file
@@ -0,0 +1,2 @@
|
||||
require rust-llvm.inc
|
||||
require rust-source-${PV}.inc
|
||||
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-llvm.inc
|
||||
require rust-source-${PV}.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"
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
17
recipes-devtools/rust/rust-source-1.10.0.inc
Normal file
17
recipes-devtools/rust/rust-source-1.10.0.inc
Normal file
@@ -0,0 +1,17 @@
|
||||
# Specifics for Rust 1.10.0
|
||||
|
||||
## snapshot info 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.9.0"
|
||||
RS_KEY = "e8edd0fd"
|
||||
|
||||
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] = "f1cf6d2fe15e4be18a08259f1540a4ae"
|
||||
SRC_URI[rust-snapshot.sha256sum] = "d0704d10237c66c3efafa6f7e5570c59a1d3fe5c6d99487540f90ebb37cd84c4"
|
||||
|
||||
SRC_URI[rust.md5sum] = "a48fef30353fc9daa70b484b690ce5db"
|
||||
SRC_URI[rust.sha256sum] = "a4015aacf4f6d8a8239253c4da46e7abaa8584f8214d1828d2ff0a8f56176869"
|
||||
|
||||
21
recipes-devtools/rust/rust-source-1.12.1.inc
Normal file
21
recipes-devtools/rust/rust-source-1.12.1.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
# 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"
|
||||
|
||||
@@ -1,31 +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/0001-Add-config-for-musl-based-arm-builds.patch \
|
||||
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,19 @@
|
||||
# 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 \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/rustc-${PV}"
|
||||
|
||||
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,46 +113,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"
|
||||
|
||||
## 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)
|
||||
@@ -216,29 +192,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):
|
||||
@@ -248,14 +206,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)
|
||||
@@ -265,7 +226,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
|
||||
@@ -275,8 +236,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:
|
||||
@@ -307,6 +266,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)
|
||||
@@ -314,13 +274,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),
|
||||
|
||||
@@ -351,6 +320,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()
|
||||
|
||||
@@ -360,48 +336,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 \
|
||||
@@ -412,7 +357,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}" \
|
||||
@@ -425,15 +370,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
|
||||
@@ -447,22 +390,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"
|
||||
@@ -473,9 +406,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.10.0.bb
Normal file
27
recipes-devtools/rust/rust_1.10.0.bb
Normal file
@@ -0,0 +1,27 @@
|
||||
require rust.inc
|
||||
require rust-source-${PV}.inc
|
||||
|
||||
# overriden due to difference between 1.10.0 and 1.12.1
|
||||
DATA_LAYOUT[aarch64] = "e-m:e-i64:64-i128:128-n32:64-S128"
|
||||
|
||||
SRC_URI += " \
|
||||
file://rust-${PV}/0001-Add-config-for-musl-based-arm-builds.patch \
|
||||
file://rust-${PV}/0002-Target-add-default-target.json-path-libdir-rust-targ.patch \
|
||||
file://rust-${PV}/0003-mk-for-stage0-use-RUSTFLAGS-to-override-target-libs-.patch \
|
||||
file://rust-${PV}/0004-mk-add-missing-CFG_LIBDIR_RELATIVE.patch \
|
||||
file://rust-${PV}/0006-std-thread_local-workaround-for-NULL-__dso_handle.patch \
|
||||
file://rust-${PV}/0007-mk-install-use-disable-rewrite-paths.patch \
|
||||
file://rust-${PV}/0008-Allow-overriding-crate_hash-with-C-crate_hash.patch \
|
||||
file://rust-${PV}/0009-mk-platform.mk-pass-C-crate_hash-to-builds.patch \
|
||||
file://rust-${PV}/0011-Get-rid-of-the-.note-interpretation-of-rustc-dylib-m.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"
|
||||
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"
|
||||
@@ -1,26 +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}/*; 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}-dev += "${rustlib}/*.rlib"
|
||||
FILES_${PN}-staticdev += "${rustlib}/*.a"
|
||||
FILES_${PN}-dbg += "${rustlib}/.debug"
|
||||
@@ -1,4 +1,4 @@
|
||||
inherit cargo_util
|
||||
inherit cargo
|
||||
|
||||
SRC_URI = "git://github.com/jmesmon/rust-hello-world.git;protocol=https"
|
||||
SRCREV="e0fa23f1a3cb1eb1407165bd2fc36d2f6e6ad728"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
inherit cargo_util
|
||||
inherit cargo
|
||||
|
||||
CARGO_INDEX_COMMIT = "3b3994e099281c394a6a66604d1af6c0920e4c31"
|
||||
|
||||
|
||||
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"
|
||||
|
||||
@@ -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