forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge Windows and Posix libc++ configs
BUG=801780 R=thakis Change-Id: I9ce7870d4205aedb02ca49a2483b7275b1c4b757 Reviewed-on: https://chromium-review.googlesource.com/c/1461335 Commit-Queue: Thomas Anderson <thomasanderson@chromium.org> Reviewed-by: Nico Weber <thakis@chromium.org> Cr-Commit-Position: refs/heads/master@{#631075}
- Loading branch information
1 parent
2e74dd6
commit 4c15f05
Showing
5 changed files
with
124 additions
and
122 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
import("//build/config/c++/c++.gni") | ||
import("//build/config/chrome_build.gni") | ||
import("//buildtools/deps_revisions.gni") | ||
|
||
assert(use_custom_libcxx, "should only be used if use_custom_libcxx is set") | ||
|
||
declare_args() { | ||
# lldb pretty printing only works when libc++ is built in the __1 (or __ndk1) | ||
# namespaces. For pretty printing to work out-of-the-box on Mac (where lldb | ||
# is primarily used), this flag is set to false to build with the __1 | ||
# namespace (to maintain ABI compatibility, this implies building without | ||
# _LIBCPP_ABI_UNSTABLE). This is not necessary on non-component builds | ||
# because we leave the ABI version set to __1 in that case because libc++ | ||
# symbols are not exported. | ||
# TODO(thomasanderson): Set this to true by default once rL352899 is available | ||
# in MacOS's lldb. | ||
libcxx_abi_unstable = !(is_mac && is_debug && is_component_build) | ||
} | ||
|
||
# TODO(xiaohuic): https://crbug/917533 Crashes on internal ChromeOS build. | ||
# Do unconditionally once the underlying problem is fixed. | ||
if (is_chromeos && is_chrome_branded) { | ||
libcxx_abi_unstable = false | ||
} | ||
|
||
# This is included by reference in the //build/config/compiler:runtime_library | ||
# config that is applied to all targets. It is here to separate out the logic | ||
# that is specific to libc++. Please see that target for advice on what should | ||
# go in :runtime_library vs. :compiler. | ||
config("runtime_library") { | ||
cflags = [] | ||
cflags_cc = [] | ||
defines = [] | ||
ldflags = [] | ||
libs = [] | ||
|
||
if (libcxx_abi_unstable) { | ||
defines += [ "_LIBCPP_ABI_UNSTABLE" ] | ||
} | ||
|
||
if (is_component_build) { | ||
# In component builds, symbols from libc++.so are exported for all DSOs to | ||
# use. If the system libc++ gets loaded (indirectly through a system | ||
# library), then it will conflict with our libc++.so. Add a custom ABI | ||
# version if we're building with _LIBCPP_ABI_UNSTABLE to avoid conflicts. | ||
# | ||
# Windows doesn't need to set _LIBCPP_ABI_VERSION since there's no system | ||
# C++ library we could conflict with. | ||
if (libcxx_abi_unstable && !is_win) { | ||
defines += [ "_LIBCPP_ABI_VERSION=Cr" ] | ||
} | ||
} else { | ||
# Don't leak any symbols on a static build. | ||
defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ] | ||
if (!export_libcxxabi_from_executables) { | ||
assert(!is_win, "don't use libcxxabi on win, see below") | ||
defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ] | ||
} | ||
} | ||
|
||
defines += [ | ||
"CR_LIBCXX_REVISION=$libcxx_svn_revision", | ||
"CR_LIBCXXABI_REVISION=$libcxxabi_svn_revision", | ||
"_LIBCPP_ENABLE_NODISCARD", | ||
] | ||
|
||
if (is_win) { | ||
# Intentionally not using libc++abi on Windows because libc++abi only | ||
# implements the Itanium C++ ABI, and not the Microsoft ABI which we use on | ||
# Windows (and we need to use in order to interoperate correctly with COM | ||
# among other things). | ||
cflags_cc += | ||
[ "-I" + rebase_path("$libcxx_prefix/include", root_build_dir) ] | ||
|
||
# Prevent libc++ from embedding linker flags to try to automatically link | ||
# against its runtime library. This is unnecessary with our build system, | ||
# and can also result in build failures if libc++'s name for a library | ||
# does not match ours. | ||
defines += [ "_LIBCPP_NO_AUTO_LINK" ] | ||
} else { | ||
cflags_cc += [ | ||
"-nostdinc++", | ||
"-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir), | ||
"-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir), | ||
] | ||
|
||
# Make sure we don't link against the system libstdc++ or libc++. | ||
if (is_clang) { | ||
# //build/config/android:runtime_library adds -nostdlib, which suppresses | ||
# linking against all system libraries. -nostdlib++ would be redundant, | ||
# and would generate an unused warning in this case. | ||
if (!is_android) { | ||
ldflags += [ "-nostdlib++" ] | ||
} | ||
} else { | ||
# Gcc has a built-in abs() definition with default visibility. | ||
# If it was not disabled, it would conflict with libc++'s abs() | ||
# with hidden visibility. | ||
cflags += [ "-fno-builtin-abs" ] | ||
|
||
ldflags += [ "-nodefaultlibs" ] | ||
|
||
# Unfortunately, there's no way to disable linking against just libc++ | ||
# (gcc doesn't have -notstdlib++: | ||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83931); -nodefaultlibs | ||
# removes all of the default libraries, so add back the ones that we need. | ||
libs += [ | ||
"c", | ||
"gcc_s", | ||
"m", | ||
"rt", | ||
] | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters