diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/ld.musl-clang.in | 51 | ||||
-rw-r--r-- | tools/musl-clang.in | 35 |
2 files changed, 86 insertions, 0 deletions
diff --git a/tools/ld.musl-clang.in b/tools/ld.musl-clang.in new file mode 100644 index 00000000..93763d6b --- /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" 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 |