Provide <triplet>-<tool> wrappers and links to many llvm tools

Provide wrappers named <triplet>-gcc and <triplet>-g++ as well,
to ease cross compilation with e.g. autotools, to allow just
specifying --host=<triplet>.

Provide wrappers for objdump and ld that provide specific output
that autotools look for.

Provide <triplet>-strip as a symlink to /bin/true, since there is
no strip tool available yet (and llvm-objcopy doesn't support
COFF yet).
This commit is contained in:
Martin Storsjö committed 2018-01-10 10:53:02 +02:00
1 parent f67075c23c
commit 55e8aef024
6 files changed
+83 -11

No files matched your search

+1 -1
View File
@@ -21,7 +21,7 @@ RUN ./build-llvm.sh $TOOLCHAIN_PREFIX
ENV TOOLCHAIN_ARCHS="i686 x86_64 armv7 aarch64"
# Install the usual $TUPLE-clang binaries
COPY wrappers/clang-target-wrapper.sh ./wrappers/
COPY wrappers/*.sh ./wrappers/
COPY install-wrappers.sh .
RUN ./install-wrappers.sh $TOOLCHAIN_PREFIX
+1 -6
View File
@@ -36,15 +36,10 @@ To build the toolchain in Docker, run:
In addition to building the toolchain itself (just like `build-all.sh` does),
this also builds a few demo apps to show and verify that the toolchain works.
Other branches in this repo contain patches that might not have been
Other branches in this repo might contain patches that might not have been
merged upstream yet, and tests of building third party projects using
the toolchain (in the branch `demoapps`).
For building projects that need more than just specifying
`CC=<triplet>-clang`, there is more (more or less hacky and in-progress)
setup for providing a larger selection of the tools that GNU binutils
normally provides, in the branch `tools`.
Individual components of the toolchain can be (re)built by running
the standalone shellscripts listed within `build-all.sh`. However, if
the source already is checked out, no effort is made to check out a
+11 -2
View File
@@ -11,10 +11,19 @@ PREFIX="$1"
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
mkdir -p $PREFIX/bin
cp wrappers/clang-target-wrapper.sh $PREFIX/bin
cp wrappers/clang-target-wrapper.sh wrappers/objdump-wrapper.sh wrappers/ld-wrapper.sh $PREFIX/bin
cd $PREFIX/bin
for arch in $ARCHS; do
for exec in clang clang++; do
for exec in clang clang++ gcc g++; do
ln -sf clang-target-wrapper.sh $arch-w64-mingw32-$exec
done
for exec in ar ranlib nm dlltool strings; do
ln -sf llvm-$exec $arch-w64-mingw32-$exec
done
for exec in strip; do
ln -sf /bin/true $arch-w64-mingw32-$exec
done
for exec in ld objdump; do
ln -sf $exec-wrapper.sh $arch-w64-mingw32-$exec
done
done
+12 -2
View File
@@ -1,7 +1,17 @@
#!/usr/bin/env bash
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET="$(basename $0 | sed 's/-clang.*//')"
EXE=$(basename $0 | sed 's/.*-\(clang.*\)/\1/')
TARGET="$(basename $0 | sed 's/-[^-]*$//')"
EXE=$(basename $0 | sed 's/.*-\([^-]*\)/\1/')
case $EXE in
clang*)
;;
gcc)
EXE=clang
;;
g++)
EXE=clang++
;;
esac
ARCH=$(echo $TARGET | sed 's/-.*//')
SYSROOT="$(cd "$DIR"/../$TARGET && pwd)"
case $ARCH in
+25
View File
@@ -0,0 +1,25 @@
#!/bin/sh
if [ "$1" = "--help" ]; then
cat<<EOF
GNU ld impersonation
We don't support --enable-auto-import, but libtool may look for this flag.
EOF
exit 0
fi
if [ "$1" = "-v" ]; then
# This isn't implemented in the lld mingw frontend, so don't
# pass the -m <machine> option in this case.
ld.lld -v
exit 0
fi
TARGET="$(basename $0 | sed 's/-[^-]*$//')"
ARCH=$(echo $TARGET | sed 's/-.*//')
case $ARCH in
i686) M=i386pe ;;
x86_64) M=i386pep ;;
armv7) M=thumb2pe ;;
aarch64) M=arm64pe ;;
esac
ld.lld -m $M "$@"
+33
View File
@@ -0,0 +1,33 @@
#!/bin/sh
if [ "$1" = "-f" ]; then
# libtool can try to run objdump -f and wants to see certain strings in
# the output, to accept it being a windows (import) library
llvm-readobj $2 | while read -r line; do
case $line in
File:*)
file=$(echo $line | awk '{print $2}')
;;
Format:*)
format=$(echo $line | awk '{print $2}')
case $format in
COFF-i386)
format=pe-i386
;;
COFF-x86-64)
format=pe-x86-64
;;
COFF-ARM*)
# This is wrong; modern COFF armv7 isn't pe-arm-wince, and
# arm64 definitely isn't, but libtool wants to see this
# string (or some of the others) in order to accept it.
format=pe-arm-wince
;;
esac
echo $file: file format $format
;;
esac
done
else
llvm-objdump "$@"
fi