diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2019-11-27 13:58:10 +0000 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2020-12-24 10:08:42 +0000 |
commit | 662b9c55cf06d3df6682ef865fb2b685820317a9 (patch) | |
tree | 77c57d2f62a8f79a80dba61e66ebc6076b54f13b /gcc/cppdefault.c | |
parent | 168be2b3afddd41d4575ed55439231812bc3e7c9 (diff) | |
download | gcc-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.c | 5 |
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 }, |