mirror of
git://git.musl-libc.org/musl
synced 2024-12-24 07:32:49 +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.
52 lines
1.0 KiB
Bash
52 lines
1.0 KiB
Bash
#!/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"
|