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
build / config / nacl / BUILD.gn [blame]
# 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_chromeos || 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") {
# 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 doesn't see that there is an initializer later in the file,
# and warns about the forward declaration.
cflags = [ "/wd4132" ]
}
}
config("nacl_static_libstdc++") {
# The sysroot of linux x86 bots can have a different version of libstdc++
# than the one that is on the bots natively. Linking dynamically against
# libstdc++ can then lead to linking against symbols that are not found when
# running the executable.
# Therefore, link statically instead.
if (is_linux && current_cpu == "x86") {
ldflags = [ "-static-libstdc++" ]
}
}
# 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",
":nacl_static_libstdc++",
]
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" ]
}
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" ]
}