aboutsummaryrefslogtreecommitdiff
path: root/gcc/cppdefault.c
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2019-11-27 13:58:10 +0000
committerIain Sandoe <iain@sandoe.co.uk>2020-12-24 10:08:42 +0000
commit662b9c55cf06d3df6682ef865fb2b685820317a9 (patch)
tree77c57d2f62a8f79a80dba61e66ebc6076b54f13b /gcc/cppdefault.c
parent168be2b3afddd41d4575ed55439231812bc3e7c9 (diff)
downloadgcc-662b9c55cf06d3df6682ef865fb2b685820317a9.zip
gcc-662b9c55cf06d3df6682ef865fb2b685820317a9.tar.gz
gcc-662b9c55cf06d3df6682ef865fb2b685820317a9.tar.bz2
C++ : Add the -stdlib= option.
This option allows the user to specifiy alternate C++ runtime libraries, for example when a platform uses libc++ as the installed C++ runtime. We introduce the command line option: -stdlib= which is the user-facing mechanism to select the C++ runtime to be used when compiling and linking code. This is the same option spelling as that used by clang to allow the use of libstdc++. The availability (and thus function) of the option are a configure-time choice using the configuration control: --with-gxx-libcxx-include-dir= Specification of the path for the libc++ headers, enables the -stdlib= option (using the path as given), default values are set when the path is unconfigured. If --with-gxx-libcxx-include-dir is given together with --with-sysroot=, then we test to see if the include path starts with the sysroot and, if so, record the sysroot-relative component as the local path. At runtime, we prepend the sysroot that is actually active. At link time, we use the C++ runtime in force and (if that is libc++) also append the libc++abi ABI library. As for other cases, if a target sets the name pointer for the ABI library to NULL the G++ driver will omit it from the link line. gcc/ChangeLog: * configure.ac: Add gxx-libcxx-include-dir handled in the same way as the regular cxx header directory. * Makefile.in: Regenerated. * config.in: Likewise. * configure: Likewise. * cppdefault.c: Pick up libc++ headers if the option is enabled. * cppdefault.h (struct default_include): Amend comments to reflect the extended use of the cplusplus field. * incpath.c (add_standard_paths): Allow for multiple c++ header include path variants. * doc/invoke.texi: Document the -stdlib= option. gcc/c-family/ChangeLog: * c.opt: Add -stdlib= option and enumerations for libstdc++ and libc++. gcc/cp/ChangeLog: * g++spec.c (LIBCXX, LIBCXX_PROFILE, LIBCXX_STATIC): New. (LIBCXXABI, LIBCXXABI_PROFILE, LIBCXXABI_STATIC): New. (enum stdcxxlib_kind): New. (lang_specific_driver): Allow selection amongst multiple c++ runtime libraries.
Diffstat (limited to 'gcc/cppdefault.c')
-rw-r--r--gcc/cppdefault.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cppdefault.c b/gcc/cppdefault.c
index af38cc4..eb6f941 100644
--- a/gcc/cppdefault.c
+++ b/gcc/cppdefault.c
@@ -55,6 +55,11 @@ const struct default_include cpp_include_defaults[]
{ GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,
GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
#endif
+#ifdef GPLUSPLUS_LIBCXX_INCLUDE_DIR
+ /* Pick up libc++ include files, if we have -stdlib=libc++. */
+ { GPLUSPLUS_LIBCXX_INCLUDE_DIR, "G++", 2, 1,
+ GPLUSPLUS_LIBCXX_INCLUDE_DIR_ADD_SYSROOT, 0 },
+#endif
#ifdef GCC_INCLUDE_DIR
/* This is the dir for gcc's private headers. */
{ GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },