96 lines
1.8 KiB
Bash
Executable File
96 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
BASENAME="$(basename "$0")"
|
|
TARGET="${BASENAME%-*}"
|
|
DEFAULT_TARGET=x86_64-w64-mingw32
|
|
if [ "$TARGET" = "$BASENAME" ]; then
|
|
TARGET=$DEFAULT_TARGET
|
|
fi
|
|
EXE="${BASENAME##*-}"
|
|
ARCH="${TARGET%%-*}"
|
|
|
|
IN=""
|
|
OUT=""
|
|
ARGS=""
|
|
STRIP=""
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
--strip*|-g|-S)
|
|
STRIP=1
|
|
;;
|
|
-*)
|
|
;;
|
|
*)
|
|
if [ -z "$IN" ]; then
|
|
IN="$1"
|
|
elif [ -z "$OUT" ]; then
|
|
OUT="$1"
|
|
else
|
|
echo Unhandled arg $1
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
ARGS="$ARGS $1"
|
|
shift
|
|
done
|
|
if [ -n "$IN" ] && [ -z "$OUT" ]; then
|
|
OUT="$IN"
|
|
fi
|
|
|
|
case $ARCH in
|
|
i686|x86_64) COMPAT_ARCH=$ARCH;;
|
|
armv7) COMPAT_ARCH=i686;;
|
|
aarch64) COMPAT_ARCH=x86_64;;
|
|
esac
|
|
|
|
convert() {
|
|
if [ "$ARCH" = "$COMPAT_ARCH" ]; then
|
|
return
|
|
fi
|
|
$DIR/change-pe-arch "$@"
|
|
}
|
|
|
|
checkstrip() {
|
|
if [ "$EXE" = "strip" ]; then
|
|
return 0
|
|
elif [ -n "$STRIP" ]; then
|
|
if [ "$IN" != "$OUT" ]; then
|
|
cp "$IN" "$OUT"
|
|
fi
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if [ "$ARCH" != "$COMPAT_ARCH" ] && ! $DIR/change-pe-arch -check "$IN"; then
|
|
if checkstrip; then
|
|
echo Ignoring strip of non-executable \(object file\?\) >&2
|
|
exit 0
|
|
else
|
|
echo Unsupported "$0 $ARGS", not supported for non-executable \(object file\?\) >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -x $DIR/binutils-$EXE ]; then
|
|
convert -from $ARCH -to $COMPAT_ARCH "$IN"
|
|
$DIR/binutils-$EXE $ARGS
|
|
convert -from $COMPAT_ARCH -to $ARCH "$OUT"
|
|
if [ "$OUT" != "$IN" ]; then
|
|
convert -from $COMPAT_ARCH -to $ARCH "$IN"
|
|
fi
|
|
else
|
|
if checkstrip; then
|
|
echo Ignoring strip, missing binutils-$EXE >&2
|
|
exit 0
|
|
else
|
|
echo Unsupported "$0 $ARGS", missing binutils-$EXE >&2
|
|
exit 1
|
|
fi
|
|
fi
|