Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: build/config/sanitizers/BUILD.gn

Issue 1734043003: Add gn option 'is_lto' to enable Link Time Optimization builds. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import("//build/config/chrome_build.gni") 5 import("//build/config/chrome_build.gni")
6 import("//build/config/chromecast_build.gni") 6 import("//build/config/chromecast_build.gni")
7 import("//build/config/sanitizers/sanitizers.gni") 7 import("//build/config/sanitizers/sanitizers.gni")
8 8
9 # Contains the dependencies needed for sanitizers to link into executables and 9 # Contains the dependencies needed for sanitizers to link into executables and
10 # shared_libraries. Unconditionally depend upon this target as it is empty if 10 # shared_libraries. Unconditionally depend upon this target as it is empty if
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 } 85 }
86 if (is_msan) { 86 if (is_msan) {
87 ldflags += [ "-fsanitize=memory" ] 87 ldflags += [ "-fsanitize=memory" ]
88 } 88 }
89 if (is_ubsan) { 89 if (is_ubsan) {
90 ldflags += [ "-fsanitize=undefined" ] 90 ldflags += [ "-fsanitize=undefined" ]
91 } 91 }
92 if (is_ubsan_vptr) { 92 if (is_ubsan_vptr) {
93 ldflags += [ "-fsanitize=vptr" ] 93 ldflags += [ "-fsanitize=vptr" ]
94 } 94 }
95 if (is_cfi && !is_nacl) { 95 if (is_lto && !is_nacl) {
96 ldflags += [ 96 ldflags += [ "-flto" ]
97 "-flto",
98 "-fsanitize=cfi-vcall",
99 "-fsanitize=cfi-derived-cast",
100 "-fsanitize=cfi-unrelated-cast",
101 ]
102 97
103 # Apply a lower LTO optimization level as the default is too slow. 98 # Apply a lower LTO optimization level as the default is too slow.
104 if (is_linux) { 99 if (is_linux) {
105 ldflags += [ "-Wl,-plugin-opt,O1" ] 100 ldflags += [ "-Wl,-plugin-opt,O1" ]
106 } else if (is_mac) { 101 } else if (is_mac) {
107 ldflags += [ "-Wl,-mllvm,-O1" ] 102 ldflags += [ "-Wl,-mllvm,-O1" ]
108 } 103 }
109 104
110 # Work-around for http://openradar.appspot.com/20356002 105 # Work-around for http://openradar.appspot.com/20356002
111 if (is_mac) { 106 if (is_mac) {
112 ldflags += [ "-Wl,-all_load" ] 107 ldflags += [ "-Wl,-all_load" ]
113 } 108 }
114 109
115 # Without this flag, LTO produces a .text section that is larger 110 # Without this flag, LTO produces a .text section that is larger
116 # than the maximum call displacement, preventing the linker from 111 # than the maximum call displacement, preventing the linker from
117 # relocating calls (http://llvm.org/PR22999). 112 # relocating calls (http://llvm.org/PR22999).
118 if (current_cpu == "arm") { 113 if (current_cpu == "arm") {
119 ldflags += [ "-Wl,-plugin-opt,-function-sections" ] 114 ldflags += [ "-Wl,-plugin-opt,-function-sections" ]
120 } 115 }
121 116
117 if (is_cfi) {
118 ldflags += [
119 "-fsanitize=cfi-vcall",
120 "-fsanitize=cfi-derived-cast",
121 "-fsanitize=cfi-unrelated-cast",
122 ]
123 }
124
122 if (use_cfi_diag) { 125 if (use_cfi_diag) {
123 ldflags += [ 126 ldflags += [
124 "-fno-sanitize-trap=cfi", 127 "-fno-sanitize-trap=cfi",
125 "-fsanitize-recover=cfi", 128 "-fsanitize-recover=cfi",
126 ] 129 ]
127 } 130 }
128 } 131 }
129 } 132 }
130 } 133 }
131 134
132 # This config is applied by default to all targets. It sets the compiler flags 135 # This config is applied by default to all targets. It sets the compiler flags
133 # for sanitizer usage, or, if no sanitizer is set, does nothing. 136 # for sanitizer usage, or, if no sanitizer is set, does nothing.
134 # 137 #
135 # This needs to be in a separate config so that targets can opt out of 138 # This needs to be in a separate config so that targets can opt out of
136 # sanitizers (by removing the config) if they desire. Even if a target 139 # sanitizers (by removing the config) if they desire. Even if a target
137 # removes this config, executables & shared libraries should still depend on 140 # removes this config, executables & shared libraries should still depend on
138 # :deps if any of their dependencies have not opted out of sanitizers. 141 # :deps if any of their dependencies have not opted out of sanitizers.
139 config("default_sanitizer_flags") { 142 config("default_sanitizer_flags") {
140 cflags = [] 143 cflags = []
141 cflags_cc = [] 144 cflags_cc = []
142 defines = [] 145 defines = []
143 configs = [ ":default_sanitizer_ldflags" ] 146 configs = [ ":default_sanitizer_ldflags" ]
144 147
145 # Only works on Posix-like platforms. 148 # Only works on Posix-like platforms.
146 # FIXME: this is not true, remove the conditional. 149 # FIXME: this is not true, remove the conditional.
147 if (is_posix) { 150 if (is_posix) {
148 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer, 151 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer,
149 # MemorySanitizer and non-official CFI builds. 152 # MemorySanitizer and non-official CFI builds.
150 if (using_sanitizer || (is_cfi && !is_official_build)) { 153 if (using_sanitizer || (is_lto && !is_official_build)) {
151 cflags += [ 154 cflags += [
152 "-fno-omit-frame-pointer", 155 "-fno-omit-frame-pointer",
153 "-gline-tables-only", 156 "-gline-tables-only",
154 ] 157 ]
155 } 158 }
156 if (is_asan) { 159 if (is_asan) {
157 asan_blacklist_path = 160 asan_blacklist_path =
158 rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir) 161 rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir)
159 cflags += [ 162 cflags += [
160 "-fsanitize=address", 163 "-fsanitize=address",
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 } 239 }
237 } 240 }
238 if (is_ubsan_vptr) { 241 if (is_ubsan_vptr) {
239 ubsan_vptr_blacklist_path = 242 ubsan_vptr_blacklist_path =
240 rebase_path("//tools/ubsan/vptr_blacklist.txt", root_build_dir) 243 rebase_path("//tools/ubsan/vptr_blacklist.txt", root_build_dir)
241 cflags += [ 244 cflags += [
242 "-fsanitize=vptr", 245 "-fsanitize=vptr",
243 "-fsanitize-blacklist=$ubsan_vptr_blacklist_path", 246 "-fsanitize-blacklist=$ubsan_vptr_blacklist_path",
244 ] 247 ]
245 } 248 }
246 if (is_cfi && !is_nacl) { 249 if (is_lto && !is_nacl) {
247 cfi_blacklist_path = 250 cflags += [ "-flto" ]
248 rebase_path("//tools/cfi/blacklist.txt", root_build_dir) 251
249 cflags += [ 252 if (is_cfi) {
250 "-flto", 253 cfi_blacklist_path =
251 "-fsanitize=cfi-vcall", 254 rebase_path("//tools/cfi/blacklist.txt", root_build_dir)
252 "-fsanitize=cfi-derived-cast", 255 cflags += [
253 "-fsanitize=cfi-unrelated-cast", 256 "-fsanitize=cfi-vcall",
254 "-fsanitize-blacklist=$cfi_blacklist_path", 257 "-fsanitize=cfi-derived-cast",
255 ] 258 "-fsanitize=cfi-unrelated-cast",
259 "-fsanitize-blacklist=$cfi_blacklist_path",
260 ]
261 }
256 262
257 if (use_cfi_diag) { 263 if (use_cfi_diag) {
258 cflags += [ 264 cflags += [
259 "-fno-sanitize-trap=cfi", 265 "-fno-sanitize-trap=cfi",
260 "-fsanitize-recover=cfi", 266 "-fsanitize-recover=cfi",
261 "-fno-inline-functions", 267 "-fno-inline-functions",
262 "-fno-inline", 268 "-fno-inline",
263 "-fno-omit-frame-pointer", 269 "-fno-omit-frame-pointer",
264 "-O1", 270 "-O1",
265 ] 271 ]
(...skipping 16 matching lines...) Expand all
282 288
283 config("default_sanitizer_coverage_flags") { 289 config("default_sanitizer_coverage_flags") {
284 cflags = [] 290 cflags = []
285 291
286 if (use_sanitizer_coverage) { 292 if (use_sanitizer_coverage) {
287 # FIXME: make this configurable. 293 # FIXME: make this configurable.
288 cflags += 294 cflags +=
289 [ "-fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp" ] 295 [ "-fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp" ]
290 } 296 }
291 } 297 }
OLDNEW
« no previous file with comments | « no previous file | build/config/sanitizers/sanitizers.gni » ('j') | build/config/sanitizers/sanitizers.gni » ('J')

Powered by Google App Engine
This is Rietveld 408576698