This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Jeff? Can you take a look please? Thanks, Corinna On Dec 8 09:54, Sebastian Huber wrote: > This is an attempt to fix the problem described here: > > https://sourceware.org/ml/newlib/2016/msg01139.html > https://gcc.gnu.org/ml/gcc/2016-12/msg00010.html > > There is no change if libtool is used. > > 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 directories 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) there must be additional multilib > subdirectories. > > Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de> > --- > newlib/Makefile.am | 30 +++++++++++++++++++++++------- > newlib/Makefile.in | 32 ++++++++++++++++++++++++++------ > newlib/configure | 33 +++++++++++++++++++++++++++++++-- > newlib/configure.in | 25 +++++++++++++++++++++++++ > 4 files changed, 105 insertions(+), 15 deletions(-) > > diff --git a/newlib/Makefile.am b/newlib/Makefile.am > index 20ab163..88845e7 100644 > --- a/newlib/Makefile.am > +++ b/newlib/Makefile.am > @@ -77,16 +77,17 @@ 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 > +noinst_DATA += $(MULTISUBDIR_CRT0) $(MULTISUBDIR_LIBC) $(MULTISUBDIR_LIBM) > endif > > -noinst_DATA = stmp-targ-include > - > toollib_DATA = $(CRT0) $(CRT1) > > > @@ -171,23 +172,38 @@ 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 > > +$(with_multisubdir): > + $(MKDIR_P) $@ > + > +$(with_multisubdir)/crt0.o: $(CRT0_DIR)$(CRT0) $(with_multisubdir) > + rm -f $@ > + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ > + > +$(with_multisubdir)/libc.a: libc.a $(with_multisubdir) > + rm -f $@ $(with_multisubdir)/libg.a > + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ > + ln libg.a $(with_multisubdir)/libg.a >/dev/null 2>/dev/null || \ > + cp libg.a $(with_multisubdir)/libg.a > + > +$(with_multisubdir)/libm.a: libm.a $(with_multisubdir) > + rm -f $@ > + 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/Makefile.in b/newlib/Makefile.in > index f0296b6..651b7c4 100644 > --- a/newlib/Makefile.in > +++ b/newlib/Makefile.in > @@ -53,6 +53,7 @@ PRE_UNINSTALL = : > POST_UNINSTALL = : > build_triplet = @build@ > host_triplet = @host@ > +@USE_LIBTOOL_FALSE@am__append_1 = $(MULTISUBDIR_CRT0) $(MULTISUBDIR_LIBC) $(MULTISUBDIR_LIBM) > subdir = . > DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \ > $(srcdir)/Makefile.am $(top_srcdir)/configure \ > @@ -223,6 +224,9 @@ MACHINE_OBJECTLIST = @MACHINE_OBJECTLIST@ > MAINT = @MAINT@ > MAKEINFO = @MAKEINFO@ > MKDIR_P = @MKDIR_P@ > +MULTISUBDIR_CRT0 = @MULTISUBDIR_CRT0@ > +MULTISUBDIR_LIBC = @MULTISUBDIR_LIBC@ > +MULTISUBDIR_LIBM = @MULTISUBDIR_LIBM@ > NEWLIB_CFLAGS = @NEWLIB_CFLAGS@ > NM = @NM@ > NMEDIT = @NMEDIT@ > @@ -314,6 +318,7 @@ target_alias = @target_alias@ > top_build_prefix = @top_build_prefix@ > top_builddir = @top_builddir@ > top_srcdir = @top_srcdir@ > +with_multisubdir = @with_multisubdir@ > AUTOMAKE_OPTIONS = cygnus dejagnu > ACLOCAL_AMFLAGS = -I . -I .. > > @@ -380,13 +385,13 @@ SUBDIRS = libc libm \ > tooldir = $(exec_prefix)/$(host_alias) > toollibdir = $(tooldir)/lib$(MULTISUBDIR) > AR_FLAGS = rc > +noinst_DATA = stmp-targ-include $(am__append_1) > @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 > toollib_DATA = $(CRT0) $(CRT1) > > # The functions ldexp, frexp and modf are traditionally supplied in > @@ -930,21 +935,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 > > +$(with_multisubdir): > + $(MKDIR_P) $@ > + > +$(with_multisubdir)/crt0.o: $(CRT0_DIR)$(CRT0) $(with_multisubdir) > + rm -f $@ > + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ > + > +$(with_multisubdir)/libc.a: libc.a $(with_multisubdir) > + rm -f $@ $(with_multisubdir)/libg.a > + ln $< $@ >/dev/null 2>/dev/null || cp $< $@ > + ln libg.a $(with_multisubdir)/libg.a >/dev/null 2>/dev/null || \ > + cp libg.a $(with_multisubdir)/libg.a > + > +$(with_multisubdir)/libm.a: libm.a $(with_multisubdir) > + rm -f $@ > + 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 30e1d57..053f165 100755 > --- a/newlib/configure > +++ b/newlib/configure > @@ -633,6 +633,10 @@ CRT1 > CRT0_DIR > CRT0 > EXTRA_DIRS > +MULTISUBDIR_LIBM > +MULTISUBDIR_LIBC > +MULTISUBDIR_CRT0 > +with_multisubdir > 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 > @@ -12156,12 +12160,33 @@ subdirs="$subdirs libc" > subdirs="$subdirs libm" > > > +# 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) there must be additional > +# multilib subdirectories. > +MULTISUBDIR_CRT0= > +MULTISUBDIR_LIBC= > +MULTISUBDIR_LIBM= > if test -z "${with_multisubdir}"; then > subdirs="$subdirs doc" > > have_doc=yes > else > have_doc= > + MULTISUBDIR_LIBC=${with_multisubdir}/libc.a > + MULTISUBDIR_LIBM=${with_multisubdir}/libm.a > + if test "x${have_crt0}" = "xyes"; then > + MULTISUBDIR_CRT0=${with_multisubdir}/crt0.o > + fi > fi > if test x$have_doc = xyes; then > HAVE_DOC_TRUE= > @@ -12172,6 +12197,10 @@ else > fi > > > + > + > + > + > EXTRA_DIRS= > case $host in > i[34567]86-pc-linux-*) > diff --git a/newlib/configure.in b/newlib/configure.in > index 01c6367..f448e09 100644 > --- a/newlib/configure.in > +++ b/newlib/configure.in > @@ -260,13 +260,38 @@ AC_SUBST(CC_FOR_NEWLIB) > AC_CONFIG_SUBDIRS(libc) > AC_CONFIG_SUBDIRS(libm) > > +# 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) there must be additional > +# multilib subdirectories. > +MULTISUBDIR_CRT0= > +MULTISUBDIR_LIBC= > +MULTISUBDIR_LIBM= > if test -z "${with_multisubdir}"; then > AC_CONFIG_SUBDIRS(doc) > have_doc=yes > else > have_doc= > + MULTISUBDIR_LIBC=${with_multisubdir}/libc.a > + MULTISUBDIR_LIBM=${with_multisubdir}/libm.a > + if test "x${have_crt0}" = "xyes"; then > + MULTISUBDIR_CRT0=${with_multisubdir}/crt0.o > + fi > fi > AM_CONDITIONAL(HAVE_DOC, test x$have_doc = xyes) > +AC_SUBST(with_multisubdir) > +AC_SUBST(MULTISUBDIR_CRT0) > +AC_SUBST(MULTISUBDIR_LIBC) > +AC_SUBST(MULTISUBDIR_LIBM) > > EXTRA_DIRS= > case $host in > -- > 1.8.4.5 -- Corinna Vinschen Cygwin Maintainer Red Hat
Attachment:
signature.asc
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |