This enables us to provide symbols for placeholders and numeric limits, and allows users to mess about with linker flags less.
libstdc++-v3/ChangeLog: * Makefile.am [!_GLIBCXX_HOSTED]: Enable src/ subdirectory. * Makefile.in: Regenerate. * src/Makefile.am [!_GLIBCXX_HOSTED]: Omit compatibility files. There's no history to be compatible with. * src/c++11/Makefile.am [!_GLIBCXX_HOSTED]: Omit hosted-only source files from the build. * src/c++17/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/c++20/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/c++98/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++17/Makefile.in: Regenerate. * src/c++20/Makefile.in: Regenerate. * src/c++98/Makefile.in: Regenerate. --- Afternoon, With these changes, when we aren't hosted, we get a libstdc++ library that contains only library facilities available in freestanding (i.e. placeholders and limits.cc). This is, AFAICT, the only code in libstdc++.{a,so} that can (and should) be available in freestanding. As an implementation note, this could be a little bit faster (at build/configure time), though not necessarily nicer, by having src/Makefile.am not try to build convenience libraries for versions of C++ that provide nothing. I opted not to do this since it'd make src/Makefile.am even more complex, and make future changes harder to implement. libstdc++ also isn't that slow to build, anyway. Tested on i686-elf. Have a good day! libstdc++-v3/Makefile.am | 4 ++-- libstdc++-v3/Makefile.in | 4 ++-- libstdc++-v3/src/Makefile.am | 6 +++++ libstdc++-v3/src/Makefile.in | 8 +++++-- libstdc++-v3/src/c++11/Makefile.am | 16 ++++++++++--- libstdc++-v3/src/c++11/Makefile.in | 37 +++++++++++++++++++----------- libstdc++-v3/src/c++17/Makefile.am | 4 ++++ libstdc++-v3/src/c++17/Makefile.in | 6 +++-- libstdc++-v3/src/c++20/Makefile.am | 4 ++++ libstdc++-v3/src/c++20/Makefile.in | 6 +++-- libstdc++-v3/src/c++98/Makefile.am | 4 ++++ libstdc++-v3/src/c++98/Makefile.in | 6 +++-- 12 files changed, 77 insertions(+), 28 deletions(-) diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am index 0d147ad3ffe..d7f2b6e76a5 100644 --- a/libstdc++-v3/Makefile.am +++ b/libstdc++-v3/Makefile.am @@ -24,11 +24,11 @@ include $(top_srcdir)/fragment.am if GLIBCXX_HOSTED ## Note that python must come after src. - hosted_source = src doc po testsuite python + hosted_source = doc po testsuite python endif ## Keep this list sync'd with acinclude.m4:GLIBCXX_CONFIGURE. -SUBDIRS = include libsupc++ $(hosted_source) +SUBDIRS = include libsupc++ src $(hosted_source) ACLOCAL_AMFLAGS = -I . -I .. -I ../config diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index b83c222d51d..4eb78e76297 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -121,7 +121,13 @@ cxx11_sources = \ ${cxx0x_compat_sources} \ ${ldbl_alt128_compat_sources} +if GLIBCXX_HOSTED libstdc___la_SOURCES = $(cxx98_sources) $(cxx11_sources) +else +# When freestanding, there's currently no compatibility to preserve. Should +# that change, any compatibility sources can be added here. +libstdc___la_SOURCES = +endif libstdc___la_LIBADD = \ $(GLIBCXX_LIBS) \ diff --git a/libstdc++-v3/src/c++11/Makefile.am b/libstdc++-v3/src/c++11/Makefile.am index ecd46aafc01..72f05100c98 100644 --- a/libstdc++-v3/src/c++11/Makefile.am +++ b/libstdc++-v3/src/c++11/Makefile.am @@ -51,6 +51,10 @@ else cxx11_abi_sources = endif +sources_freestanding = \ + limits.cc \ + placeholders.cc + sources = \ chrono.cc \ codecvt.cc \ @@ -66,9 +70,7 @@ sources = \ hashtable_c++0x.cc \ ios.cc \ ios_errcat.cc \ - limits.cc \ mutex.cc \ - placeholders.cc \ random.cc \ regex.cc \ shared_ptr.cc \ @@ -118,7 +120,15 @@ endif vpath % $(top_srcdir)/src/c++11 -libc__11convenience_la_SOURCES = $(sources) $(inst_sources) +if !GLIBCXX_HOSTED +libc__11convenience_la_SOURCES = $(sources_freestanding) +else +libc__11convenience_la_SOURCES = \ + $(sources_freestanding) \ + $(sources) \ + $(inst_sources) +endif + # Use special rules for the hashtable.cc file so that all # the generated template functions are also instantiated. diff --git a/libstdc++-v3/src/c++17/Makefile.am b/libstdc++-v3/src/c++17/Makefile.am index 3d53f652fac..72095f5b087 100644 --- a/libstdc++-v3/src/c++17/Makefile.am +++ b/libstdc++-v3/src/c++17/Makefile.am @@ -60,7 +60,11 @@ sources = \ vpath % $(top_srcdir)/src/c++17 +if GLIBCXX_HOSTED libc__17convenience_la_SOURCES = $(sources) $(inst_sources) +else +libc__17convenience_la_SOURCES = +endif if GLIBCXX_LDBL_ALT128_COMPAT floating_from_chars.lo: floating_from_chars.cc diff --git a/libstdc++-v3/src/c++20/Makefile.am b/libstdc++-v3/src/c++20/Makefile.am index d4c1e26e40e..5c937f7e804 100644 --- a/libstdc++-v3/src/c++20/Makefile.am +++ b/libstdc++-v3/src/c++20/Makefile.am @@ -40,7 +40,11 @@ sources = vpath % $(top_srcdir)/src/c++20 +if GLIBCXX_HOSTED libc__20convenience_la_SOURCES = $(sources) $(inst_sources) +else +libc__20convenience_la_SOURCES = +endif # AM_CXXFLAGS needs to be in each subdirectory so that it can be # modified in a per-library or per-sub-library way. Need to manually diff --git a/libstdc++-v3/src/c++98/Makefile.am b/libstdc++-v3/src/c++98/Makefile.am index b96588bd95c..f7134d80027 100644 --- a/libstdc++-v3/src/c++98/Makefile.am +++ b/libstdc++-v3/src/c++98/Makefile.am @@ -148,7 +148,11 @@ sources = \ vpath % $(top_srcdir)/src/c++98 +if GLIBCXX_HOSTED libc__98convenience_la_SOURCES = $(sources) +else +libc__98convenience_la_SOURCES = +endif # Use special rules to compile with -fimplicit-templates. c++locale.lo: c++locale.cc # Use special rules for the deprecated source files so that they find -- 2.38.1