| Index: build/config/nacl/BUILD.gn
|
| diff --git a/build/config/nacl/BUILD.gn b/build/config/nacl/BUILD.gn
|
| index d2643b85e41bfe48415436c510c359d64e098d19..dcd736fe3346a6cd272dd9cd18337693d20b60f4 100644
|
| --- a/build/config/nacl/BUILD.gn
|
| +++ b/build/config/nacl/BUILD.gn
|
| @@ -2,6 +2,8 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import("//build/config/nacl/config.gni")
|
| +
|
| # Native Client Definitions
|
| config("nacl_defines") {
|
| defines = [
|
| @@ -32,3 +34,62 @@ source_set("nacl_base") {
|
| public_configs += [ ":nexe_defines" ]
|
| }
|
| }
|
| +
|
| +config("compiler") {
|
| + configs = []
|
| + cflags = []
|
| +
|
| + if (is_clang) {
|
| + # -no-integrated-as is the default in nacl-clang for historical
|
| + # compatibility with inline assembly code and so forth. But there
|
| + # are no such cases in Chromium code, and -integrated-as is nicer in
|
| + # general. Moreover, the IRT must be built using LLVM's assembler
|
| + # on x86-64 to preserve sandbox base address hiding. Use it
|
| + # everywhere for consistency (and possibly quicker builds).
|
| + cflags += [ "-integrated-as" ]
|
| + }
|
| +
|
| + asmflags = cflags
|
| +}
|
| +
|
| +config("compiler_codegen") {
|
| + cflags = []
|
| +
|
| + if (is_nacl_irt) {
|
| + cflags += [
|
| + # A debugger should be able to unwind IRT call frames. This is
|
| + # the default behavior on x86-64 and when compiling C++ with
|
| + # exceptions enabled; the change is for the benefit of x86-32 C.
|
| + # The frame pointer is unnecessary when unwind tables are used.
|
| + "-fasynchronous-unwind-tables",
|
| + "-fomit-frame-pointer",
|
| + ]
|
| +
|
| + if (current_cpu == "x86") {
|
| + # The x86-32 IRT needs to be callable with an under-aligned
|
| + # stack; so we disable SSE instructions, which can fault on
|
| + # misaligned addresses. See
|
| + # https://code.google.com/p/nativeclient/issues/detail?id=3935
|
| + cflags += [
|
| + "-mstackrealign",
|
| + "-mno-sse",
|
| + ]
|
| + }
|
| + }
|
| +
|
| + asmflags = cflags
|
| +}
|
| +
|
| +config("irt_optimize") {
|
| + cflags = [
|
| + # Optimize for space, keep the IRT nexe small.
|
| + "-Os",
|
| +
|
| + # These are omitted from non-IRT libraries to keep the libraries
|
| + # themselves small.
|
| + "-ffunction-sections",
|
| + "-fdata-sections",
|
| + ]
|
| +
|
| + ldflags = [ "-Wl,--gc-sections" ]
|
| +}
|
|
|