forked from jfbastien/musl
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
- Loading branch information
1 parent
f8db6f7
commit fb58545
Showing
5 changed files
with
105 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |