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.
diff --git a/tools/ld.musl-clang.in b/tools/ld.musl-clang.in
new file mode 100644
index 0000000..93763d6
--- /dev/null
+++ b/tools/ld.musl-clang.in
@@ -0,0 +1,51 @@
+#!/bin/sh
+cc="@CC@"
+libc_lib="@LIBDIR@"
+ldso="@LDSO@"
+cleared=
+shared=
+userlinkdir=
+userlink=
+
+for x ; do
+ test "$cleared" || set -- ; cleared=1
+
+ case "$x" in
+ -L-user-start)
+ userlinkdir=1
+ ;;
+ -L-user-end)
+ userlinkdir=
+ ;;
+ -L*)
+ test "$userlinkdir" && set -- "$@" "$x"
+ ;;
+ -l-user-start)
+ userlink=1
+ ;;
+ -l-user-end)
+ userlink=
+ ;;
+ crtbegin*.o|crtend*.o)
+ set -- "$@" $($cc -print-file-name=$x)
+ ;;
+ -lgcc|-lgcc_eh)
+ file=lib${x#-l}.a
+ set -- "$@" $($cc -print-file-name=$file)
+ ;;
+ -l*)
+ test "$userlink" && set -- "$@" "$x"
+ ;;
+ -shared)
+ shared=1
+ set -- "$@" -shared
+ ;;
+ -sysroot=*|--sysroot=*)
+ ;;
+ *)
+ set -- "$@" "$x"
+ ;;
+ esac
+done
+
+exec $($cc -print-prog-name=ld) -nostdlib "$@" -lc -dynamic-linker "$ldso"