67 lines
1.5 KiB
Bash
67 lines
1.5 KiB
Bash
|
#!/bin/sh -e
|
||
|
|
||
|
if [ -n "$CROSSDIRECT_DEBUG" ]; then
|
||
|
set -x
|
||
|
fi
|
||
|
|
||
|
native_version=$(LD_LIBRARY_PATH=/native/lib:/native/usr/lib /native/usr/bin/rustc -V)
|
||
|
target_version=$(/usr/bin/rustc -V)
|
||
|
|
||
|
if [ "$target_version" != "$native_version" ]; then
|
||
|
echo "ERROR: crossdirect: rustc version mismatch between native and build chroot. Please update your chroots and try again." >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
triplet=$(/usr/bin/rustc -vV | sed -n 's/host: //p')
|
||
|
cmd=$1
|
||
|
shift
|
||
|
|
||
|
case "$cmd" in
|
||
|
build|test|run)
|
||
|
;;
|
||
|
*)
|
||
|
echo "WARNING: crossdirect: 'cargo $cmd $*' command not supported, running in QEMU (slow!)" >&2
|
||
|
export PATH="$(echo "$PATH" | sed 's,/native/usr/lib/crossdirect/[^:]*:,,')"
|
||
|
exec /usr/bin/cargo "$cmd" "$@"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
target_dir=${CARGO_TARGET_DIR:-target}
|
||
|
target_already_specified=${CARGO_BUILD_TARGET:+1}
|
||
|
|
||
|
if [ -z "$target_specified" ]; then
|
||
|
for arg in "$@"; do
|
||
|
if [ "$arg_target_dir" = 1 ]; then
|
||
|
target_dir=$arg
|
||
|
arg_target_dir=0
|
||
|
fi
|
||
|
case "$arg" in
|
||
|
--target|--target=*)
|
||
|
target_already_specified=1
|
||
|
break
|
||
|
;;
|
||
|
--target-dir)
|
||
|
arg_target_dir=1
|
||
|
;;
|
||
|
--target-dir=*)
|
||
|
target_dir=${arg##--target-dir=}
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
if [ -n "$target_already_specified" ]; then
|
||
|
exec /usr/bin/cargo "$cmd" "$@"
|
||
|
fi
|
||
|
|
||
|
/usr/bin/cargo "$cmd" --target=$triplet "$@"
|
||
|
|
||
|
# copy target/$triplet/{release,debug,...} to target/{release,debug,...}
|
||
|
if [ -d "$target_dir/$triplet" ]; then
|
||
|
for dir in "$target_dir/$triplet"/*/; do
|
||
|
build=$(basename "$dir")
|
||
|
rm -rf "$target_dir/$build"
|
||
|
cp -r "$target_dir/$triplet/$build" "$target_dir/$build"
|
||
|
done
|
||
|
fi
|