diff options
-rw-r--r-- | Makefile | 4 | ||||
-rwxr-xr-x | configure | 56 |
2 files changed, 39 insertions, 21 deletions
@@ -51,6 +51,8 @@ TOOL_LIBS = lib/musl-gcc.specs ALL_LIBS = $(CRT_LIBS) $(STATIC_LIBS) $(SHARED_LIBS) $(EMPTY_LIBS) $(TOOL_LIBS) ALL_TOOLS = tools/musl-gcc +WRAPCC_GCC = gcc + LDSO_PATHNAME = $(syslibdir)/ld-musl-$(ARCH)$(SUBARCH).so.1 -include config.mak @@ -155,7 +157,7 @@ lib/musl-gcc.specs: tools/musl-gcc.specs.sh config.mak sh $< "$(includedir)" "$(libdir)" "$(LDSO_PATHNAME)" > $@ tools/musl-gcc: config.mak - printf '#!/bin/sh\nexec "$${REALGCC:-gcc}" "$$@" -specs "%s/musl-gcc.specs"\n' "$(libdir)" > $@ + printf '#!/bin/sh\nexec "$${REALGCC:-$(WRAPCC_GCC)}" "$$@" -specs "%s/musl-gcc.specs"\n' "$(libdir)" > $@ chmod +x $@ $(DESTDIR)$(bindir)/%: tools/% @@ -28,7 +28,7 @@ Optional features: --enable-debug build with debugging information [disabled] --enable-warnings build with recommended warnings flags [disabled] --enable-visibility use global visibility options to optimize PIC [auto] - --enable-gcc-wrapper build musl-gcc toolchain wrapper [auto] + --enable-wrapper=... build given musl toolchain wrapper [auto] --disable-shared inhibit building shared library [enabled] --disable-static inhibit building static library [enabled] @@ -123,6 +123,8 @@ bindir='$(exec_prefix)/bin' libdir='$(prefix)/lib' includedir='$(prefix)/include' syslibdir='/lib' +tools= +tool_libs= target= optimize=auto debug=no @@ -131,6 +133,7 @@ visibility=auto shared=auto static=yes wrapper=auto +gcc_wrapper=no for arg ; do case "$arg" in @@ -154,7 +157,11 @@ case "$arg" in --disable-warnings|--enable-warnings=no) warnings=no ;; --enable-visibility|--enable-visibility=yes) visibility=yes ;; --disable-visibility|--enable-visibility=no) visibility=no ;; ---enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ;; +--enable-wrapper|--enable-wrapper=yes) wrapper=detect ;; +--enable-wrapper=all) wrapper=yes ; gcc_wrapper=yes ;; +--enable-wrapper=gcc) wrapper=yes ; gcc_wrapper=yes ;; +--disable-wrapper|--enable-wrapper=no) wrapper=no ;; +--enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ; gcc_wrapper=yes ;; --disable-gcc-wrapper|--enable-gcc-wrapper=no) wrapper=no ;; --enable-*|--disable-*|--with-*|--without-*|--*dir=*|--build=*) ;; --host=*|--target=*) target=${arg#*=} ;; @@ -215,36 +222,44 @@ tryldflag LDFLAGS_TRY -Werror=unknown-warning-option tryldflag LDFLAGS_TRY -Werror=unused-command-line-argument # -# Need to know if the compiler is gcc to decide whether to build the -# musl-gcc wrapper, and for critical bug detection in some gcc versions. +# Need to know if the compiler is gcc or clang to decide which toolchain +# wrappers to build. # -printf "checking whether compiler is gcc... " -if fnmatch '*gcc\ version*' "$(LC_ALL=C $CC -v 2>&1)" ; then -cc_is_gcc=yes -else -cc_is_gcc=no +printf "checking for C compiler family... " +cc_ver="$(LC_ALL=C $CC -v 2>&1)" +cc_family=unknown +if fnmatch '*gcc\ version*' "$cc_ver" ; then +cc_family=gcc fi -echo "$cc_is_gcc" +echo "$cc_family" # -# Only build musl-gcc wrapper if toolchain does not already target musl +# Figure out toolchain wrapper to build # +if test "$wrapper" = auto -o "$wrapper" = detect ; then +printf "checking for toolchain wrapper to build... " +if test "$cc_family" = gcc ; then +gcc_wrapper=yes if test "$wrapper" = auto ; then -printf "checking whether to build musl-gcc wrapper... " -if test "$cc_is_gcc" = yes ; then -wrapper=yes while read line ; do -case "$line" in */ld-musl-*) wrapper=no ;; esac +case "$line" in */ld-musl-*) gcc_wrapper=no ;; esac done <<EOF $($CC -dumpspecs) EOF +fi +test "$gcc_wrapper" = yes && echo "gcc" else -wrapper=no +echo "none" +if test "$wrapper" = detect ; then +fail "$0: could not find an appropriate toolchain wrapper" +fi fi -echo "$wrapper" fi - +if test "$gcc_wrapper" = yes ; then +tools="$tools tools/musl-gcc" +tool_libs="$tool_libs lib/musl-gcc.specs" +fi # # Find the target architecture @@ -580,11 +595,12 @@ LDFLAGS = $LDFLAGS_AUTO $LDFLAGS CROSS_COMPILE = $CROSS_COMPILE LIBCC = $LIBCC OPTIMIZE_GLOBS = $OPTIMIZE_GLOBS +ALL_TOOLS = $tools +TOOL_LIBS = $tool_libs EOF test "x$static" = xno && echo "STATIC_LIBS =" test "x$shared" = xno && echo "SHARED_LIBS =" -test "x$wrapper" = xno && echo "ALL_TOOLS =" -test "x$wrapper" = xno && echo "TOOL_LIBS =" +test "x$cc_family" = xgcc && echo 'WRAPCC_GCC = $(CC)' exec 1>&3 3>&- printf "done\n" |