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