summaryrefslogtreecommitdiff
path: root/deps/v8/build/config/nacl/BUILD.gn
blob: d7b22ecf2cbe8cf1c99d79c0809e8529b08de3af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# Copyright (c) 2014 The Native Client Authors. All rights reserved.
# 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") {
  if (is_linux || is_android || is_nacl) {
    defines = [
      "_POSIX_C_SOURCE=199506",
      "_XOPEN_SOURCE=600",
      "_GNU_SOURCE=1",
      "__STDC_LIMIT_MACROS=1",
    ]
  } else if (is_win) {
    defines = [ "__STDC_LIMIT_MACROS=1" ]
  }

  if (current_cpu == "pnacl" && !is_nacl_nonsfi) {
    # TODO: Remove the following definition once NACL_BUILD_ARCH and
    # NACL_BUILD_SUBARCH are defined by the PNaCl toolchain.
    defines += [ "NACL_BUILD_ARCH=pnacl" ]
  }
}

config("nexe_defines") {
  defines = [
    "DYNAMIC_ANNOTATIONS_ENABLED=1",
    "DYNAMIC_ANNOTATIONS_PREFIX=NACL_",
  ]
}

config("nacl_warnings") {
  if (is_win) {
    # Some NaCl code uses forward declarations of static const variables,
    # with initialized definitions later on.  (The alternative would be
    # many, many more forward declarations of everything used in that
    # const variable's initializer before the definition.)  The Windows
    # compiler is too stupid to notice that there is an initializer later
    # in the file, and warns about the forward declaration.
    cflags = [ "/wd4132" ]
  }
}

# The base target that all targets in the NaCl build should depend on.
# This allows configs to be modified for everything in the NaCl build, even when
# the NaCl build is composed into the Chrome build.  (GN has no functionality to
# add flags to everything in //native_client, having a base target works around
# that limitation.)
source_set("nacl_base") {
  public_configs = [
    ":nacl_defines",
    ":nacl_warnings",
  ]
  if (current_os == "nacl") {
    public_configs += [ ":nexe_defines" ]
  }
}

config("compiler") {
  configs = []
  cflags = []
  ldflags = []
  libs = []

  if (is_clang && current_cpu != "pnacl") {
    # -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" ]
  }
  if (is_nacl_nonsfi) {
    cflags += [ "--pnacl-allow-translate" ]
    ldflags += [
      "--pnacl-allow-translate",
      "--pnacl-allow-native",
      "-Wl,--noirt",
      "-Wt,--noirt",
      "-Wt,--noirtshim",

      # The clang driver automatically injects -lpthread when using libc++, but
      # the toolchain doesn't have it yet.  To get around this, use
      # -nodefaultlibs and make each executable target depend on
      # "//native_client/src/nonsfi/irt:nacl_sys_private".
      "-nodefaultlibs",
    ]
    libs += [
      "c++",
      "m",
      "c",
      "pnaclmm",
    ]
    include_dirs = [ "//native_client/src/public/linux_syscalls" ]
  }

  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" ]
}