mirror of
git://git.musl-libc.org/musl
synced 2024-12-16 19:55:38 +00:00
fb58545f8d
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.
36 lines
635 B
Bash
36 lines
635 B
Bash
#!/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
|