https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80781
Bug ID: 80781 Summary: Feature request: build option to use libc++ instead of libstdc++ for increased usability on Mac Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rjvbertin at gmail dot com Target Milestone: --- Created attachment 41366 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41366&action=edit prototype use-libcxx.diff Using G++ as a full-featured and generally usable C++ compiler on Mac OS X 10.9 and newer (and potentially other systems) requires using the libc++ runtime instead of libstdc++. Instructions can be found online (e.g. http://stackoverflow.com/questions/22228208/using-g-with-libc) on how to get G++ to build code doing just that. The principle works fine but the method is a bit too convoluted to use in anything but smallish projects. I have thus been working on a patch for GCC 6.3.0 (latest release when I started) that makes G++ behave according to those online instructions: - use the /path/to/llvm-$version/include/c++/v1 include directory for the standard C++ headers - emit `-lc++ -lc++abi` instead of -lstdc++ This turned out far less hairy than I feared it might be though, a few details aside. Not all system libc++ versions have `operator delete(void*, unsigned long)` for instance, but it has turned out to be safe to use GCC's libsupc++ as a source for that and possibly other methods. The hairiest detail was probably figuring out the best way to build GCC itself (also the costliest detail: each trial cost up to 1.5 hours rebuilding everything from scratch). I'm now at a point where I can present a prototype patch: it provides a few hooks (environment variables) to switch back to using libstdc++ which are used during the GCC build process. The compiler itself is thus built "as usual". I have been able to build a few quite complex projects with the resulting compiler; boost, KDevelop and digiKam (boost with a patch to remove the presumption that only clang uses libc++). The resulting binaries function as if they were built using clang++ and not with a compiler that normally uses libstdc++. The patch is a typical "distribution" patch, i.e. it is applied in a package install variant and does not currently add a configure option to the build system. When selected, GCC is configured and built with `GCC_IS_BUILDING_ITSELF=1 GCC_FORCE_LIBSTDCPP=1` set in the environment. Would there be any interest in incorporating this functionality properly, thus making G++ officially an alternative C++ compiler on Mac (and possibly other BSD systems)? Or are there too many pitfalls which I just haven't discovered yet?