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

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

Issue 1393143003: GN: Factor CPU/ABI and code-generation options out of main :compiler config (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn-clang-toolchain
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2013 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/android/config.gni") 5 import("//build/config/android/config.gni")
6 import("//build/config/chrome_build.gni") 6 import("//build/config/chrome_build.gni")
7 import("//build/config/compiler/compiler.gni") 7 import("//build/config/compiler/compiler.gni")
8 import("//build/toolchain/ccache.gni") 8 import("//build/toolchain/ccache.gni")
9 9
10 if (current_cpu == "arm") { 10 if (current_cpu == "arm") {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 if (is_win) { 124 if (is_win) {
125 configs += [ "//build/config/win:compiler" ] 125 configs += [ "//build/config/win:compiler" ]
126 } else if (is_android) { 126 } else if (is_android) {
127 configs += [ "//build/config/android:compiler" ] 127 configs += [ "//build/config/android:compiler" ]
128 } else if (is_linux) { 128 } else if (is_linux) {
129 configs += [ "//build/config/linux:compiler" ] 129 configs += [ "//build/config/linux:compiler" ]
130 } else if (is_ios || is_mac) { 130 } else if (is_ios || is_mac) {
131 configs += [ "//build/config/mac:compiler" ] 131 configs += [ "//build/config/mac:compiler" ]
132 } 132 }
133 133
134 # See the definitions below.
135 configs += [
136 ":compiler_cpu_abi",
137 ":compiler_codegen",
138 ]
139
134 # In general, Windows is totally different, but all the other builds share 140 # In general, Windows is totally different, but all the other builds share
135 # some common GCC configuration. 141 # some common GCC configuration.
136 if (!is_win) { 142 if (!is_win) {
137 # Common GCC compiler flags setup. 143 # Common GCC compiler flags setup.
138 # -------------------------------- 144 # --------------------------------
139 cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204 145 cflags += [ "-fno-strict-aliasing" ] # See http://crbug.com/32204
140 cflags_cc += [ 146 cflags_cc += [
141 "-fno-threadsafe-statics", 147 "-fno-threadsafe-statics",
142 148
143 # Not exporting C++ inline functions can generally be applied anywhere 149 # Not exporting C++ inline functions can generally be applied anywhere
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 ] 212 ]
207 213
208 if (enable_full_stack_frames_for_profiling) { 214 if (enable_full_stack_frames_for_profiling) {
209 cflags += [ 215 cflags += [
210 "-fno-inline", 216 "-fno-inline",
211 "-fno-optimize-sibling-calls", 217 "-fno-optimize-sibling-calls",
212 ] 218 ]
213 } 219 }
214 } 220 }
215 221
216 # CPU architecture. We may or may not be doing a cross compile now, so for
217 # simplicity we always explicitly set the architecture.
218 if (current_cpu == "x64") {
219 cflags += [
220 "-m64",
221 "-march=x86-64",
222 ]
223 ldflags += [ "-m64" ]
224 } else if (current_cpu == "x86") {
225 cflags += [ "-m32" ]
226 ldflags += [ "-m32" ]
227 if (is_clang) {
228 cflags += [
229 # Else building libyuv gives clang's register allocator issues,
230 # see llvm.org/PR15798 / crbug.com/233709
231 "-momit-leaf-frame-pointer",
232
233 # Align the stack on 16-byte boundaries, http://crbug.com/418554.
234 "-mstack-alignment=16",
235 "-mstackrealign",
236 ]
237 }
238 } else if (current_cpu == "arm") {
239 if (is_clang && !is_android && !is_nacl) {
240 cflags += [
241 "-target",
242 "arm-linux-gnueabihf",
243 ]
244 ldflags += [
245 "-target",
246 "arm-linux-gnueabihf",
247 ]
248
249 # We need to disable clang's builtin assembler as it can't
250 # handle several asm files, crbug.com/124610
251 cflags += [ "-no-integrated-as" ]
252 }
253 if (!is_nacl) {
254 cflags += [
255 "-march=$arm_arch",
256 "-mfloat-abi=$arm_float_abi",
257 ]
258 if (arm_use_thumb) {
259 cflags += [ "-mthumb" ]
260 if (is_android && !is_clang) {
261 # Clang doesn't support this option.
262 cflags += [ "-mthumb-interwork" ]
263 }
264 }
265 }
266 if (arm_tune != "") {
267 cflags += [ "-mtune=$arm_tune" ]
268 }
269 if (!is_clang) {
270 # Clang doesn't support these flags.
271 cflags += [
272 # The tree-sra optimization (scalar replacement for
273 # aggregates enabling subsequent optimizations) leads to
274 # invalid code generation when using the Android NDK's
275 # compiler (r5-r7). This can be verified using
276 # webkit_unit_tests' WTF.Checked_int8_t test.
277 "-fno-tree-sra",
278
279 # The following option is disabled to improve binary
280 # size and performance in gcc 4.9.
281 "-fno-caller-saves",
282 ]
283 }
284 } else if (current_cpu == "mipsel") {
285 if (mips_arch_variant == "r6") {
286 cflags += [
287 "-mips32r6",
288 "-Wa,-mips32r6",
289 ]
290 if (is_android) {
291 ldflags += [
292 "-mips32r6",
293 "-Wl,-melf32ltsmip",
294 ]
295 }
296 } else if (mips_arch_variant == "r2") {
297 cflags += [
298 "-mips32r2",
299 "-Wa,-mips32r2",
300 ]
301 if (mips_float_abi == "hard" && mips_fpu_mode != "") {
302 cflags += [ "-m$mips_fpu_mode" ]
303 }
304 } else if (mips_arch_variant == "r1") {
305 cflags += [
306 "-mips32",
307 "-Wa,-mips32",
308 ]
309 }
310
311 if (mips_dsp_rev == 1) {
312 cflags += [ "-mdsp" ]
313 } else if (mips_dsp_rev == 2) {
314 cflags += [ "-mdspr2" ]
315 }
316
317 cflags += [ "-m${mips_float_abi}-float" ]
318 } else if (current_cpu == "mips64el") {
319 if (mips_arch_variant == "r6") {
320 cflags += [
321 "-mips64r6",
322 "-Wa,-mips64r6",
323 ]
324 ldflags += [ "-mips64r6" ]
325 } else if (mips_arch_variant == "r2") {
326 cflags += [
327 "-mips64r2",
328 "-Wa,-mips64r2",
329 ]
330 ldflags += [ "-mips64r2" ]
331 }
332 }
333
334 defines += [ "_FILE_OFFSET_BITS=64" ] 222 defines += [ "_FILE_OFFSET_BITS=64" ]
335 223
336 if (!is_android) { 224 if (!is_android) {
337 defines += [ 225 defines += [
338 "_LARGEFILE_SOURCE", 226 "_LARGEFILE_SOURCE",
339 "_LARGEFILE64_SOURCE", 227 "_LARGEFILE64_SOURCE",
340 ] 228 ]
341 } 229 }
342 230
343 # Omit unwind support in official builds to save space. We can use breakpad 231 # Omit unwind support in official builds to save space. We can use breakpad
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 327
440 # Assign any flags set for the C compiler to asmflags so that they are sent 328 # Assign any flags set for the C compiler to asmflags so that they are sent
441 # to the assembler. The Windows assembler takes different types of flags 329 # to the assembler. The Windows assembler takes different types of flags
442 # so only do so for posix platforms. 330 # so only do so for posix platforms.
443 if (is_posix) { 331 if (is_posix) {
444 asmflags += cflags 332 asmflags += cflags
445 asmflags += cflags_c 333 asmflags += cflags_c
446 } 334 }
447 } 335 }
448 336
337 # This provides the basic options to select the target CPU and ABI.
338 # It is factored out of "compiler" so that special cases can use this
339 # without using everything that "compiler" brings in. Options that
340 # tweak code generation for a particular CPU do not belong here!
341 # See "compiler_codegen", below.
342 config("compiler_cpu_abi") {
343 cflags = []
344 ldflags = []
345
346 if (is_posix && !(is_mac || is_ios)) {
347 # CPU architecture. We may or may not be doing a cross compile now, so for
348 # simplicity we always explicitly set the architecture.
349 if (current_cpu == "x64") {
350 cflags += [
351 "-m64",
352 "-march=x86-64",
353 ]
354 ldflags += [ "-m64" ]
355 } else if (current_cpu == "x86") {
356 cflags += [ "-m32" ]
357 ldflags += [ "-m32" ]
358 } else if (current_cpu == "arm") {
359 if (is_clang && !is_android && !is_nacl) {
360 cflags += [
361 "-target",
362 "arm-linux-gnueabihf",
363 ]
364 ldflags += [
365 "-target",
366 "arm-linux-gnueabihf",
367 ]
368 }
369 if (!is_nacl) {
370 cflags += [
371 "-march=$arm_arch",
372 "-mfloat-abi=$arm_float_abi",
373 ]
374 if (arm_use_thumb) {
375 cflags += [ "-mthumb" ]
376 if (is_android && !is_clang) {
377 # Clang doesn't support this option.
378 cflags += [ "-mthumb-interwork" ]
379 }
380 }
381 }
382 if (arm_tune != "") {
383 cflags += [ "-mtune=$arm_tune" ]
384 }
385 } else if (current_cpu == "mipsel") {
386 if (mips_arch_variant == "r6") {
387 cflags += [
388 "-mips32r6",
389 "-Wa,-mips32r6",
390 ]
391 if (is_android) {
392 ldflags += [
393 "-mips32r6",
394 "-Wl,-melf32ltsmip",
395 ]
396 }
397 } else if (mips_arch_variant == "r2") {
398 cflags += [
399 "-mips32r2",
400 "-Wa,-mips32r2",
401 ]
402 if (mips_float_abi == "hard" && mips_fpu_mode != "") {
403 cflags += [ "-m$mips_fpu_mode" ]
404 }
405 } else if (mips_arch_variant == "r1") {
406 cflags += [
407 "-mips32",
408 "-Wa,-mips32",
409 ]
410 }
411
412 if (mips_dsp_rev == 1) {
413 cflags += [ "-mdsp" ]
414 } else if (mips_dsp_rev == 2) {
415 cflags += [ "-mdspr2" ]
416 }
417
418 cflags += [ "-m${mips_float_abi}-float" ]
419 } else if (current_cpu == "mips64el") {
420 if (mips_arch_variant == "r6") {
421 cflags += [
422 "-mips64r6",
423 "-Wa,-mips64r6",
424 ]
425 ldflags += [ "-mips64r6" ]
426 } else if (mips_arch_variant == "r2") {
427 cflags += [
428 "-mips64r2",
429 "-Wa,-mips64r2",
430 ]
431 ldflags += [ "-mips64r2" ]
432 }
433 }
434 }
435
436 asmflags = cflags
437 }
438
439 # This provides options to tweak code generation that are necessary
440 # for particular Chromium code or for working around particular
441 # compiler bugs (or the combination of the two).
442 config("compiler_codegen") {
443 cflags = []
444
445 if (is_posix && !is_mac && !is_ios && !is_nacl) {
446 if (current_cpu == "x86") {
447 if (is_clang) {
448 cflags += [
449 # Else building libyuv gives clang's register allocator issues,
450 # see llvm.org/PR15798 / crbug.com/233709
451 "-momit-leaf-frame-pointer",
452
453 # Align the stack on 16-byte boundaries, http://crbug.com/418554.
454 "-mstack-alignment=16",
455 "-mstackrealign",
456 ]
457 }
458 } else if (current_cpu == "arm") {
459 if (is_clang) {
460 if (!is_android) {
461 # We need to disable clang's builtin assembler as it can't
462 # handle several asm files, crbug.com/124610
463 cflags += [ "-no-integrated-as" ]
464 }
465 } else {
466 # Clang doesn't support these flags.
467 cflags += [
468 # The tree-sra optimization (scalar replacement for
469 # aggregates enabling subsequent optimizations) leads to
470 # invalid code generation when using the Android NDK's
471 # compiler (r5-r7). This can be verified using
472 # webkit_unit_tests' WTF.Checked_int8_t test.
473 "-fno-tree-sra",
474
475 # The following option is disabled to improve binary
476 # size and performance in gcc 4.9.
477 "-fno-caller-saves",
478 ]
479 }
480 }
481 }
482
483 asmflags = cflags
484 }
485
449 config("compiler_arm_fpu") { 486 config("compiler_arm_fpu") {
450 if (current_cpu == "arm" && !is_ios && !is_nacl) { 487 if (current_cpu == "arm" && !is_ios && !is_nacl) {
451 cflags = [ "-mfpu=$arm_fpu" ] 488 cflags = [ "-mfpu=$arm_fpu" ]
452 asmflags = cflags 489 asmflags = cflags
453 } 490 }
454 } 491 }
455 492
456 # runtime_library ------------------------------------------------------------- 493 # runtime_library -------------------------------------------------------------
457 # 494 #
458 # Sets the runtime library and associated options. 495 # Sets the runtime library and associated options.
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 if (symbol_level == 0) { 1167 if (symbol_level == 0) {
1131 configs = [ ":no_symbols" ] 1168 configs = [ ":no_symbols" ]
1132 } else if (symbol_level == 1) { 1169 } else if (symbol_level == 1) {
1133 configs = [ ":minimal_symbols" ] 1170 configs = [ ":minimal_symbols" ]
1134 } else if (symbol_level == 2) { 1171 } else if (symbol_level == 2) {
1135 configs = [ ":symbols" ] 1172 configs = [ ":symbols" ]
1136 } else { 1173 } else {
1137 assert(false) 1174 assert(false)
1138 } 1175 }
1139 } 1176 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698