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"
|
ENV TOOLCHAIN_ARCHS="i686 x86_64 armv7 aarch64"
|
||||||
|
|
||||||
# Install the usual $TUPLE-clang binaries
|
# Install the usual $TUPLE-clang binaries
|
||||||
COPY wrappers/clang-target-wrapper.sh ./wrappers/
|
COPY wrappers/*.sh ./wrappers/
|
||||||
COPY install-wrappers.sh .
|
COPY install-wrappers.sh .
|
||||||
RUN ./install-wrappers.sh $TOOLCHAIN_PREFIX
|
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),
|
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.
|
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
|
merged upstream yet, and tests of building third party projects using
|
||||||
the toolchain (in the branch `demoapps`).
|
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
|
Individual components of the toolchain can be (re)built by running
|
||||||
the standalone shellscripts listed within `build-all.sh`. However, if
|
the standalone shellscripts listed within `build-all.sh`. However, if
|
||||||
the source already is checked out, no effort is made to check out a
|
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}}
|
: ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}}
|
||||||
|
|
||||||
mkdir -p $PREFIX/bin
|
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
|
cd $PREFIX/bin
|
||||||
for arch in $ARCHS; do
|
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
|
ln -sf clang-target-wrapper.sh $arch-w64-mingw32-$exec
|
||||||
done
|
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
|
done
|
||||||
@@ -1,7 +1,17 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
TARGET="$(basename $0 | sed 's/-clang.*//')"
|
TARGET="$(basename $0 | sed 's/-[^-]*$//')"
|
||||||
EXE=$(basename $0 | sed 's/.*-\(clang.*\)/\1/')
|
EXE=$(basename $0 | sed 's/.*-\([^-]*\)/\1/')
|
||||||
|
case $EXE in
|
||||||
|
clang*)
|
||||||
|
;;
|
||||||
|
gcc)
|
||||||
|
EXE=clang
|
||||||
|
;;
|
||||||
|
g++)
|
||||||
|
EXE=clang++
|
||||||
|
;;
|
||||||
|
esac
|
||||||
ARCH=$(echo $TARGET | sed 's/-.*//')
|
ARCH=$(echo $TARGET | sed 's/-.*//')
|
||||||
SYSROOT="$(cd "$DIR"/../$TARGET && pwd)"
|
SYSROOT="$(cd "$DIR"/../$TARGET && pwd)"
|
||||||
case $ARCH in
|
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