diff --git a/newlib/Makefile.am b/newlib/Makefile.am index 20ab1633b..e43b2e3d8 100644 --- a/newlib/Makefile.am +++ b/newlib/Makefile.am @@ -77,19 +77,25 @@ toollibdir = $(tooldir)/lib$(MULTISUBDIR) AR_FLAGS = rc +noinst_DATA = stmp-targ-include + if USE_LIBTOOL toollib_LTLIBRARIES = libm.la \ libc.la else toollib_LIBRARIES = libm.a \ libc.a +if HAVE_MULTISUBDIR +BUILD_MULTISUBDIR = $(builddir)$(MULTISUBDIR) +if HAVE_CRT0 +noinst_DATA += $(BUILD_MULTISUBDIR)/$(CRT0) +endif +noinst_DATA += $(BUILD_MULTISUBDIR)/libc.a $(BUILD_MULTISUBDIR)/libm.a +endif endif -noinst_DATA = stmp-targ-include - toollib_DATA = $(CRT0) $(CRT1) - # The functions ldexp, frexp and modf are traditionally supplied in # both libc.a and libm.a. We build them in libm.a and copy them over, # along with some required supporting routines. @@ -171,23 +177,40 @@ libc/libc.a: ; @true libm.a: libm/libm.a rm -f $@ - ln libm/libm.a $@ >/dev/null 2>/dev/null || cp libm/libm.a $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ libm/libm.a: ; @true endif # USE_LIBTOOL +if HAVE_MULTISUBDIR +$(BUILD_MULTISUBDIR): + $(MKDIR_P) $@ + +$(BUILD_MULTISUBDIR)/crt0.o: $(CRT0_DIR)$(CRT0) $(BUILD_MULTISUBDIR) + rm -f $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ + +$(BUILD_MULTISUBDIR)/libc.a: libc.a $(BUILD_MULTISUBDIR) + rm -f $@ $(BUILD_MULTISUBDIR)/libg.a + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ + ln libg.a $(BUILD_MULTISUBDIR)/libg.a >/dev/null 2>/dev/null || \ + cp libg.a $(BUILD_MULTISUBDIR)/libg.a + +$(BUILD_MULTISUBDIR)/libm.a: libm.a $(BUILD_MULTISUBDIR) + rm -f $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ +endif + crt0.o: $(CRT0_DIR)$(CRT0) rm -f $@ - ln $(CRT0_DIR)$(CRT0) $@ >/dev/null 2>/dev/null \ - || cp $(CRT0_DIR)$(CRT0) $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ $(CRT0_DIR)$(CRT0): ; @true crt1.o: $(CRT1_DIR)$(CRT1) rm -f $@ - ln $< $@ >/dev/null 2>/dev/null \ - || cp $< $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ $(CRT1_DIR)$(CRT1): ; @true diff --git a/newlib/Makefile.in b/newlib/Makefile.in index f0296b667..58b4acdd2 100644 --- a/newlib/Makefile.in +++ b/newlib/Makefile.in @@ -53,6 +53,8 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +@HAVE_CRT0_TRUE@@HAVE_MULTISUBDIR_TRUE@@USE_LIBTOOL_FALSE@am__append_1 = $(BUILD_MULTISUBDIR)/$(CRT0) +@HAVE_MULTISUBDIR_TRUE@@USE_LIBTOOL_FALSE@am__append_2 = $(BUILD_MULTISUBDIR)/libc.a $(BUILD_MULTISUBDIR)/libm.a subdir = . DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(top_srcdir)/configure \ @@ -380,13 +382,14 @@ SUBDIRS = libc libm \ tooldir = $(exec_prefix)/$(host_alias) toollibdir = $(tooldir)/lib$(MULTISUBDIR) AR_FLAGS = rc +noinst_DATA = stmp-targ-include $(am__append_1) $(am__append_2) @USE_LIBTOOL_TRUE@toollib_LTLIBRARIES = libm.la \ @USE_LIBTOOL_TRUE@ libc.la @USE_LIBTOOL_FALSE@toollib_LIBRARIES = libm.a \ @USE_LIBTOOL_FALSE@ libc.a -noinst_DATA = stmp-targ-include +@HAVE_MULTISUBDIR_TRUE@@USE_LIBTOOL_FALSE@BUILD_MULTISUBDIR = $(builddir)$(MULTISUBDIR) toollib_DATA = $(CRT0) $(CRT1) # The functions ldexp, frexp and modf are traditionally supplied in @@ -930,21 +933,36 @@ uninstall-am: uninstall-toollibDATA uninstall-toollibLIBRARIES \ @USE_LIBTOOL_FALSE@libm.a: libm/libm.a @USE_LIBTOOL_FALSE@ rm -f $@ -@USE_LIBTOOL_FALSE@ ln libm/libm.a $@ >/dev/null 2>/dev/null || cp libm/libm.a $@ +@USE_LIBTOOL_FALSE@ ln $< $@ >/dev/null 2>/dev/null || cp $< $@ @USE_LIBTOOL_FALSE@libm/libm.a: ; @true +@HAVE_MULTISUBDIR_TRUE@$(BUILD_MULTISUBDIR): +@HAVE_MULTISUBDIR_TRUE@ $(MKDIR_P) $@ + +@HAVE_MULTISUBDIR_TRUE@$(BUILD_MULTISUBDIR)/crt0.o: $(CRT0_DIR)$(CRT0) $(BUILD_MULTISUBDIR) +@HAVE_MULTISUBDIR_TRUE@ rm -f $@ +@HAVE_MULTISUBDIR_TRUE@ ln $< $@ >/dev/null 2>/dev/null || cp $< $@ + +@HAVE_MULTISUBDIR_TRUE@$(BUILD_MULTISUBDIR)/libc.a: libc.a $(BUILD_MULTISUBDIR) +@HAVE_MULTISUBDIR_TRUE@ rm -f $@ $(BUILD_MULTISUBDIR)/libg.a +@HAVE_MULTISUBDIR_TRUE@ ln $< $@ >/dev/null 2>/dev/null || cp $< $@ +@HAVE_MULTISUBDIR_TRUE@ ln libg.a $(BUILD_MULTISUBDIR)/libg.a >/dev/null 2>/dev/null || \ +@HAVE_MULTISUBDIR_TRUE@ cp libg.a $(BUILD_MULTISUBDIR)/libg.a + +@HAVE_MULTISUBDIR_TRUE@$(BUILD_MULTISUBDIR)/libm.a: libm.a $(BUILD_MULTISUBDIR) +@HAVE_MULTISUBDIR_TRUE@ rm -f $@ +@HAVE_MULTISUBDIR_TRUE@ ln $< $@ >/dev/null 2>/dev/null || cp $< $@ + crt0.o: $(CRT0_DIR)$(CRT0) rm -f $@ - ln $(CRT0_DIR)$(CRT0) $@ >/dev/null 2>/dev/null \ - || cp $(CRT0_DIR)$(CRT0) $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ $(CRT0_DIR)$(CRT0): ; @true crt1.o: $(CRT1_DIR)$(CRT1) rm -f $@ - ln $< $@ >/dev/null 2>/dev/null \ - || cp $< $@ + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ $(CRT1_DIR)$(CRT1): ; @true diff --git a/newlib/configure b/newlib/configure index 30e1d5766..24f41e0a2 100755 --- a/newlib/configure +++ b/newlib/configure @@ -632,7 +632,11 @@ CRT1_DIR CRT1 CRT0_DIR CRT0 +HAVE_CRT0_FALSE +HAVE_CRT0_TRUE EXTRA_DIRS +HAVE_MULTISUBDIR_FALSE +HAVE_MULTISUBDIR_TRUE HAVE_DOC_FALSE HAVE_DOC_TRUE subdirs @@ -11776,7 +11780,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11779 "configure" +#line 11783 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11882,7 +11886,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11885 "configure" +#line 11889 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12157,13 +12161,13 @@ subdirs="$subdirs libm" if test -z "${with_multisubdir}"; then + have_multisubdir=no subdirs="$subdirs doc" - have_doc=yes else - have_doc= + have_multisubdir=yes fi - if test x$have_doc = xyes; then + if test x$have_multisubdir = xno; then HAVE_DOC_TRUE= HAVE_DOC_FALSE='#' else @@ -12172,6 +12176,28 @@ else fi +# Some run-time support libraries provided by GCC (e.g. libgomp) use configure +# checks to detect certain features, e.g. availability of thread-local storage. +# The configure script generates a test program and tries to compile and link +# it. It should use target libraries and startfiles of the build tree if +# available and not random ones from the installation prefix for this +# procedure. The search directories specified by -B are a bit special, see +# for_each_path() in gcc.c of the GCC sources. First a search is performed on +# all search paths with the multilib directory appended (if desired), then a +# second search is performed on demand with the base directory only. For each +# multilib there is a "newlib" subdirectory. This directory is specified by a +# -B option for the support libraries. In order to find the newlib artifacts +# (ctr0.o, libc.a, libg.a and libm.a) they must be located in a proper multilib +# subdirectory withing the build directory. + if test x$have_multisubdir = xyes; then + HAVE_MULTISUBDIR_TRUE= + HAVE_MULTISUBDIR_FALSE='#' +else + HAVE_MULTISUBDIR_TRUE='#' + HAVE_MULTISUBDIR_FALSE= +fi + + EXTRA_DIRS= case $host in i[34567]86-pc-linux-*) @@ -12188,6 +12214,14 @@ if test "x${have_crt0}" = "xyes"; then CRT0=crt0.o CRT0_DIR=libc/ fi + if test x$have_crt0 = xyes; then + HAVE_CRT0_TRUE= + HAVE_CRT0_FALSE='#' +else + HAVE_CRT0_TRUE='#' + HAVE_CRT0_FALSE= +fi + @@ -12827,6 +12861,14 @@ if test -z "${HAVE_DOC_TRUE}" && test -z "${HAVE_DOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_MULTISUBDIR_TRUE}" && test -z "${HAVE_MULTISUBDIR_FALSE}"; then + as_fn_error $? "conditional \"HAVE_MULTISUBDIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_CRT0_TRUE}" && test -z "${HAVE_CRT0_FALSE}"; then + as_fn_error $? "conditional \"HAVE_CRT0\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LONG_DOUBLE_TRUE}" && test -z "${HAVE_LONG_DOUBLE_FALSE}"; then as_fn_error $? "conditional \"HAVE_LONG_DOUBLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/newlib/configure.in b/newlib/configure.in index 01c6367a9..bfaf038c7 100644 --- a/newlib/configure.in +++ b/newlib/configure.in @@ -261,12 +261,27 @@ AC_CONFIG_SUBDIRS(libc) AC_CONFIG_SUBDIRS(libm) if test -z "${with_multisubdir}"; then + have_multisubdir=no AC_CONFIG_SUBDIRS(doc) - have_doc=yes else - have_doc= + have_multisubdir=yes fi -AM_CONDITIONAL(HAVE_DOC, test x$have_doc = xyes) +AM_CONDITIONAL(HAVE_DOC, test x$have_multisubdir = xno) + +# Some run-time support libraries provided by GCC (e.g. libgomp) use configure +# checks to detect certain features, e.g. availability of thread-local storage. +# The configure script generates a test program and tries to compile and link +# it. It should use target libraries and startfiles of the build tree if +# available and not random ones from the installation prefix for this +# procedure. The search directories specified by -B are a bit special, see +# for_each_path() in gcc.c of the GCC sources. First a search is performed on +# all search paths with the multilib directory appended (if desired), then a +# second search is performed on demand with the base directory only. For each +# multilib there is a "newlib" subdirectory. This directory is specified by a +# -B option for the support libraries. In order to find the newlib artifacts +# (ctr0.o, libc.a, libg.a and libm.a) they must be located in a proper multilib +# subdirectory withing the build directory. +AM_CONDITIONAL(HAVE_MULTISUBDIR, test x$have_multisubdir = xyes) EXTRA_DIRS= case $host in @@ -283,6 +298,7 @@ if test "x${have_crt0}" = "xyes"; then CRT0=crt0.o CRT0_DIR=libc/ fi +AM_CONDITIONAL(HAVE_CRT0, test x$have_crt0 = xyes) AC_SUBST(CRT0) AC_SUBST(CRT0_DIR)