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:
1 parent
f67075c23c
commit
55e8aef024
6 files changed
+83
-11
No files matched your search
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
|
||||
Executable
+25
@@ -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 "$@"
|
||||
Executable
+33
@@ -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
|
||||
Reference in new issue
Block a user