diff options
author | Shiz <hi@shiz.me> | 2015-06-28 23:08:21 +0200 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-07-06 23:52:16 +0000 |
commit | fb58545f8d1c5fa32122244caeaf3625c12ddc01 (patch) | |
tree | 88a3e261fc41fb4e5a23a351d41961d30423c058 /tools/musl-clang.in | |
parent | f8db6f74b2c74a50c4dec7e30be5215f0e2c37a6 (diff) | |
download | musl-fb58545f8d1c5fa32122244caeaf3625c12ddc01.tar.gz musl-fb58545f8d1c5fa32122244caeaf3625c12ddc01.tar.bz2 musl-fb58545f8d1c5fa32122244caeaf3625c12ddc01.tar.xz musl-fb58545f8d1c5fa32122244caeaf3625c12ddc01.zip |
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.in | 35 |
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 |