summaryrefslogtreecommitdiff
path: root/tools/musl-clang.in
diff options
context:
space:
mode:
authorShiz <hi@shiz.me>2015-06-28 23:08:21 +0200
committerRich Felker <dalias@aerifal.cx>2015-07-06 23:52:16 +0000
commitfb58545f8d1c5fa32122244caeaf3625c12ddc01 (patch)
tree88a3e261fc41fb4e5a23a351d41961d30423c058 /tools/musl-clang.in
parentf8db6f74b2c74a50c4dec7e30be5215f0e2c37a6 (diff)
downloadmusl-fb58545f8d1c5fa32122244caeaf3625c12ddc01.tar.gz
add musl-clang, a wrapper for system clang installs
musl-clang allows the user to compile musl-powered programs using their already existent clang install, without the need of a special cross compiler. it achieves this by wrapping around both the system clang install and the linker and passing them special flags to re-target musl at runtime. it does only affect invocations done through the special musl-clang wrapper script, so that the user setup remains fully intact otherwise. the clang wrapper consists of the compiler frontend wrapper script, musl-clang, and the linker wrapper script, ld.musl-clang. musl-clang makes sure clang invokes ld.musl-clang to link objects; neither script needs to be in PATH for the wrapper to work.
Diffstat (limited to 'tools/musl-clang.in')
-rw-r--r--tools/musl-clang.in35
1 files changed, 35 insertions, 0 deletions
diff --git a/tools/musl-clang.in b/tools/musl-clang.in
new file mode 100644
index 00000000..623de6f6
--- /dev/null
+++ b/tools/musl-clang.in
@@ -0,0 +1,35 @@
+#!/bin/sh
+cc="@CC@"
+libc="@PREFIX@"
+libc_inc="@INCDIR@"
+libc_lib="@LIBDIR@"
+thisdir="`cd "$(dirname "$0")"; pwd`"
+
+# prevent clang from running the linker (and erroring) on no input.
+sflags=
+eflags=
+for x ; do
+ case "$x" in
+ -l*) input=1 ;;
+ *) input= ;;
+ esac
+ if test "$input" ; then
+ sflags="-l-user-start"
+ eflags="-l-user-end"
+ break
+ fi
+done
+
+exec $cc \
+ -B"$thisdir" \
+ -fuse-ld=musl-clang \
+ -static-libgcc \
+ -nostdinc \
+ --sysroot "$libc" \
+ -isystem "$libc_inc" \
+ -L-user-start \
+ $sflags \
+ "$@" \
+ $eflags \
+ -L"$libc_lib" \
+ -L-user-end