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

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

Issue 1341373002: Use GN subconfigs for Android, optimization, and symbols. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@configs
Patch Set: Created 5 years, 3 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 | « build/config/android/BUILD.gn ('k') | 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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 # where stuff should go. Put warning related stuff in the "warnings" config. 92 # where stuff should go. Put warning related stuff in the "warnings" config.
93 93
94 config("compiler") { 94 config("compiler") {
95 cflags = [] 95 cflags = []
96 cflags_c = [] 96 cflags_c = []
97 cflags_cc = [] 97 cflags_cc = []
98 cflags_objc = [] 98 cflags_objc = []
99 cflags_objcc = [] 99 cflags_objcc = []
100 ldflags = [] 100 ldflags = []
101 defines = [] 101 defines = []
102 configs = []
102 103
103 # In general, Windows is totally different, but all the other builds share 104 # In general, Windows is totally different, but all the other builds share
104 # some common GCC configuration. This section sets up Windows and the common 105 # some common GCC configuration. This section sets up Windows and the common
105 # GCC flags, and then we handle the other non-Windows platforms specifically 106 # GCC flags, and then we handle the other non-Windows platforms specifically
106 # below. 107 # below.
107 if (is_win) { 108 if (is_win) {
108 # Windows compiler flags setup. 109 # Windows compiler flags setup.
109 # ----------------------------- 110 # -----------------------------
110 cflags += [ 111 cflags += [
111 "/Gy", # Enable function-level linking. 112 "/Gy", # Enable function-level linking.
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 # TODO(mcgrathr) - the NaCl GCC toolchain doesn't support either gnu++11 582 # TODO(mcgrathr) - the NaCl GCC toolchain doesn't support either gnu++11
582 # or c++11; we technically don't need this toolchain any more, but there 583 # or c++11; we technically don't need this toolchain any more, but there
583 # are still a few buildbots using it, so until those are turned off 584 # are still a few buildbots using it, so until those are turned off
584 # we need the !is_nacl clause and the (is_nacl && is_clang) clause, above. 585 # we need the !is_nacl clause and the (is_nacl && is_clang) clause, above.
585 cflags_cc += [ "-std=c++11" ] 586 cflags_cc += [ "-std=c++11" ]
586 } 587 }
587 588
588 # Android-specific flags setup. 589 # Android-specific flags setup.
589 # ----------------------------- 590 # -----------------------------
590 if (is_android) { 591 if (is_android) {
591 cflags += [ 592 configs += [ "//build/config/android:compiler" ]
592 "-ffunction-sections",
593 "-funwind-tables",
594 "-fno-short-enums",
595 ]
596 if (!is_clang) {
597 # Clang doesn't support these flags.
598 cflags += [ "-finline-limit=64" ]
599 }
600 if (is_clang) {
601 rebased_android_toolchain_root =
602 rebase_path(android_toolchain_root, root_build_dir)
603 if (current_cpu == "arm") {
604 cflags += [
605 # TODO(hans) Enable integrated-as (crbug.com/124610).
606 "-no-integrated-as",
607 "-B${rebased_android_toolchain_root}/bin", # Else /usr/bin/as gets pi cked up.
608 ]
609 }
610 }
611 if (is_asan) {
612 # Android build relies on -Wl,--gc-sections removing unreachable code.
613 # ASan instrumentation for globals inhibits this and results in a library
614 # with unresolvable relocations.
615 # TODO(eugenis): find a way to reenable this.
616 cflags += [ "-mllvm -asan-globals=0" ]
617 }
618
619 defines += [ "ANDROID" ]
620
621 # The NDK has these things, but doesn't define the constants
622 # to say that it does. Define them here instead.
623 defines += [ "HAVE_SYS_UIO_H" ]
624
625 # Use gold for Android for most CPU architectures.
626 if (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm") {
627 ldflags += [ "-fuse-ld=gold" ]
628 if (is_clang) {
629 # Let clang find the ld.gold in the NDK.
630 ldflags += [ "--gcc-toolchain=$rebased_android_toolchain_root" ]
631 }
632
633 # Use -mstackrealign due to a bug on ia32 Jelly Bean.
634 # See crbug.com/521527
635 if (current_cpu == "x86") {
636 cflags += [ "-mstackrealign" ]
637 }
638 }
639
640 ldflags += [
641 "-Wl,--no-undefined",
642
643 # Don't allow visible symbols from libgcc or libc++ to be
644 # re-exported.
645 "-Wl,--exclude-libs=libgcc.a",
646 "-Wl,--exclude-libs=libc++_static.a",
647
648 # Don't allow visible symbols from libraries that contain
649 # assembly code with symbols that aren't hidden properly.
650 # http://crbug.com/448386
651 "-Wl,--exclude-libs=libvpx_assembly_arm.a",
652 ]
653 if (current_cpu == "arm") {
654 ldflags += [
655 # Enable identical code folding to reduce size.
656 "-Wl,--icf=safe",
657 ]
658 }
659
660 if (is_clang) {
661 if (current_cpu == "arm") {
662 _abi_target = "arm-linux-androideabi"
663 } else if (current_cpu == "x86") {
664 _abi_target = "i686-linux-androideabi"
665 } else if (current_cpu == "arm64") {
666 # Place holder for arm64 support, not tested.
667 _abi_target = "aarch64-linux-androideabi"
668 } else if (current_cpu == "x64") {
669 # Place holder for x64 support, not tested.
670 # TODO: Enable clang support for Android x64. http://crbug.com/346626
671 _abi_target = "x86_64-linux-androideabi"
672 } else if (current_cpu == "mipsel") {
673 # Place holder for mips support, not tested.
674 _abi_target = "mipsel-linux-androideabi"
675 } else if (current_cpu == "mips64el") {
676 # Place holder for mips64 support, not tested.
677 _abi_target = "mips64el-linux-androideabi"
678 } else {
679 assert(false, "Architecture not supported")
680 }
681 cflags += [
682 "-target",
683 _abi_target,
684 ]
685 ldflags += [
686 "-target",
687 _abi_target,
688 ]
689 }
690 } 593 }
691 594
692 # Pass the same C/C++ flags to the objective C/C++ compiler. 595 # Pass the same C/C++ flags to the objective C/C++ compiler.
693 cflags_objc += cflags_c 596 cflags_objc += cflags_c
694 cflags_objcc += cflags_cc 597 cflags_objcc += cflags_cc
695 } 598 }
696 599
697 config("compiler_arm_fpu") { 600 config("compiler_arm_fpu") {
698 if (current_cpu == "arm" && !is_ios && !is_nacl) { 601 if (current_cpu == "arm" && !is_ios && !is_nacl) {
699 cflags = [ "-mfpu=$arm_fpu" ] 602 cflags = [ "-mfpu=$arm_fpu" ]
(...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1304 1207
1305 if (!using_sanitizer) { 1208 if (!using_sanitizer) {
1306 # Functions interposed by the sanitizers can make ld think 1209 # Functions interposed by the sanitizers can make ld think
1307 # that some libraries aren't needed when they actually are, 1210 # that some libraries aren't needed when they actually are,
1308 # http://crbug.com/234010. As workaround, disable --as-needed. 1211 # http://crbug.com/234010. As workaround, disable --as-needed.
1309 common_optimize_on_ldflags += [ "-Wl,--as-needed" ] 1212 common_optimize_on_ldflags += [ "-Wl,--as-needed" ]
1310 } 1213 }
1311 } 1214 }
1312 } 1215 }
1313 1216
1314 # Default "optimization on" config. Set up variables so the 1217 # Default "optimization on" config.
1315 # "default_optimization" config can re-use these settings.
1316 if (is_win) {
1317 # Favor size over speed, /O1 must be before the common flags. The GYP
1318 # build also specifies /Os and /GF but these are implied by /O1.
1319 optimize_cflags = [ "/O1" ] + common_optimize_on_cflags + [ "/Oi" ]
1320 } else if (is_android || is_ios) {
1321 # Favor size over speed.
1322 optimize_cflags = [ "-Os" ] + common_optimize_on_cflags
1323 } else {
1324 # Linux & Mac favor speed over size.
1325 # TODO(brettw) it's weird that Mac and desktop Linux are different. We should
1326 # explore favoring size over speed in this case as well.
1327 optimize_cflags = [ "-O2" ] + common_optimize_on_cflags
1328 }
1329 optimize_ldflags = common_optimize_on_ldflags
1330
1331 config("optimize") { 1218 config("optimize") {
1332 cflags = optimize_cflags 1219 if (is_win) {
1333 ldflags = optimize_ldflags 1220 # Favor size over speed, /O1 must be before the common flags. The GYP
1221 # build also specifies /Os and /GF but these are implied by /O1.
1222 cflags = [ "/O1" ] + common_optimize_on_cflags + [ "/Oi" ]
1223 } else if (is_android || is_ios) {
1224 # Favor size over speed.
1225 cflags = [ "-Os" ] + common_optimize_on_cflags
1226 } else {
1227 # Linux & Mac favor speed over size.
1228 # TODO(brettw) it's weird that Mac and desktop Linux are different. We shoul d
1229 # explore favoring size over speed in this case as well.
1230 cflags = [ "-O2" ] + common_optimize_on_cflags
1231 }
1232 ldflags = common_optimize_on_ldflags
1334 } 1233 }
1335 1234
1336 # Turn off optimizations. Set up variables so the 1235 # Turn off optimizations.
1337 # "default_optimization" config can re-use these settings. 1236 config("no_optimize") {
1338 if (is_win) { 1237 if (is_win) {
1339 no_optimize_cflags = [ 1238 cflags = [
1340 "/Od", # Disable optimization. 1239 "/Od", # Disable optimization.
1341 "/Ob0", # Disable all inlining (on by default). 1240 "/Ob0", # Disable all inlining (on by default).
1342 "/RTC1", # Runtime checks for stack frame and uninitialized variables. 1241 "/RTC1", # Runtime checks for stack frame and uninitialized variables.
1343 ] 1242 ]
1344 no_optimize_ldflags = [] 1243 } else if (is_android && !android_full_debug) {
1345 } else if (is_android && !android_full_debug) { 1244 # On Android we kind of optimize some things that don't affect debugging
1346 # On Android we kind of optimize some things that don't affect debugging 1245 # much even when optimization is disabled to get the binary size down.
1347 # much even when optimization is disabled to get the binary size down. 1246 cflags = [
1348 no_optimize_cflags = [ 1247 "-Os",
1349 "-Os", 1248 "-fdata-sections",
1350 "-fdata-sections", 1249 "-ffunction-sections",
1351 "-ffunction-sections", 1250 ]
1352 ] 1251 if (!using_sanitizer) {
1353 if (!using_sanitizer) { 1252 cflags += [ "-fomit-frame-pointer" ]
1354 no_optimize_cflags += [ "-fomit-frame-pointer" ] 1253 }
1254 ldflags = common_optimize_on_ldflags
1255 } else {
1256 cflags = [ "-O0" ]
1257 ldflags = []
1355 } 1258 }
1356 no_optimize_ldflags = common_optimize_on_ldflags
1357 } else {
1358 no_optimize_cflags = [ "-O0" ]
1359 no_optimize_ldflags = []
1360 }
1361
1362 config("no_optimize") {
1363 cflags = no_optimize_cflags
1364 ldflags = no_optimize_ldflags
1365 } 1259 }
1366 1260
1367 # Turns up the optimization level. On Windows, this implies whole program 1261 # Turns up the optimization level. On Windows, this implies whole program
1368 # optimization and link-time code generation which is very expensive and should 1262 # optimization and link-time code generation which is very expensive and should
1369 # be used sparingly. 1263 # be used sparingly.
1370 config("optimize_max") { 1264 config("optimize_max") {
1371 ldflags = common_optimize_on_ldflags 1265 ldflags = common_optimize_on_ldflags
1372 if (is_win) { 1266 if (is_win) {
1373 # Favor speed over size, /O2 must be before the common flags. The GYP 1267 # Favor speed over size, /O2 must be before the common flags. The GYP
1374 # build also specifies /Ot, /Oi, and /GF, but these are implied by /O2. 1268 # build also specifies /Ot, /Oi, and /GF, but these are implied by /O2.
(...skipping 14 matching lines...) Expand all
1389 } 1283 }
1390 } else { 1284 } else {
1391 cflags = [ "-O2" ] + common_optimize_on_cflags 1285 cflags = [ "-O2" ] + common_optimize_on_cflags
1392 } 1286 }
1393 } 1287 }
1394 1288
1395 # The default optimization applied to all targets. This will be equivalent to 1289 # The default optimization applied to all targets. This will be equivalent to
1396 # either "optimize" or "no_optimize", depending on the build flags. 1290 # either "optimize" or "no_optimize", depending on the build flags.
1397 config("default_optimization") { 1291 config("default_optimization") {
1398 if (is_debug) { 1292 if (is_debug) {
1399 cflags = no_optimize_cflags 1293 configs = [ ":no_optimize" ]
1400 ldflags = no_optimize_ldflags
1401 } else { 1294 } else {
1402 cflags = optimize_cflags 1295 configs = [ ":optimize" ]
1403 ldflags = optimize_ldflags
1404 } 1296 }
1405 } 1297 }
1406 1298
1407 # Symbols ---------------------------------------------------------------------- 1299 # Symbols ----------------------------------------------------------------------
1408 1300
1409 # The BUILDCONFIG file sets the "default_symbols" config on targets by 1301 # The BUILDCONFIG file sets the "default_symbols" config on targets by
1410 # default. It will be equivalent to one the three specific symbol levels. 1302 # default. It will be equivalent to one the three specific symbol levels.
1411 # 1303 #
1412 # You can override the symbol level on a per-target basis by removing the 1304 # You can override the symbol level on a per-target basis by removing the
1413 # default config and then adding the named one you want: 1305 # default config and then adding the named one you want:
1414 # 1306 #
1415 # configs -= [ "//build/config/compiler:default_symbols" ] 1307 # configs -= [ "//build/config/compiler:default_symbols" ]
1416 # configs += [ "//build/config/compiler:symbols" ] 1308 # configs += [ "//build/config/compiler:symbols" ]
1417 1309
1418 # Full symbols. 1310 # Full symbols.
1419 if (is_win) { 1311 config("symbols") {
Dirk Pranke 2015/09/16 21:07:31 nit: I wonder if this would be better named as "fu
brettw 2015/09/16 21:34:32 I'm not opposed to renaming it but it's in like 5
1420 import("//build/toolchain/goma.gni") 1312 if (is_win) {
1421 if (use_goma) { 1313 import("//build/toolchain/goma.gni")
1422 symbols_cflags = [ "/Z7" ] # No PDB file 1314 if (use_goma) {
1315 cflags = [ "/Z7" ] # No PDB file
1316 } else {
1317 cflags = [ "/Zi" ] # Produce PDB file, no edit and continue.
1318 }
1319 if (is_win_fastlink) {
1320 # Tell VS 2015+ to create a PDB that references debug
1321 # information in .obj and .lib files instead of copying
1322 # it all. This flag is incompatible with /PROFILE
1323 ldflags = [ "/DEBUG:FASTLINK" ]
1324 } else {
1325 ldflags = [ "/DEBUG" ]
1326 }
1423 } else { 1327 } else {
1424 symbols_cflags = [ "/Zi" ] # Produce PDB file, no edit and continue. 1328 cflags = [ "-g2" ]
1329 if (use_debug_fission) {
1330 cflags += [ "-gsplit-dwarf" ]
1331 }
1332 ldflags = []
1425 } 1333 }
1426 if (is_win_fastlink) {
1427 # Tell VS 2015+ to create a PDB that references debug
1428 # information in .obj and .lib files instead of copying
1429 # it all. This flag is incompatible with /PROFILE
1430 symbols_ldflags = [ "/DEBUG:FASTLINK" ]
1431 } else {
1432 symbols_ldflags = [ "/DEBUG" ]
1433 }
1434 } else {
1435 symbols_cflags = [ "-g2" ]
1436 if (use_debug_fission) {
1437 symbols_cflags += [ "-gsplit-dwarf" ]
1438 }
1439 symbols_ldflags = []
1440 }
1441
1442 config("symbols") {
1443 cflags = symbols_cflags
1444 ldflags = symbols_ldflags
1445 } 1334 }
1446 1335
1447 # Minimal symbols. 1336 # Minimal symbols.
1448 if (is_win) { 1337 config("minimal_symbols") {
1449 # Linker symbols for backtraces only. 1338 if (is_win) {
1450 minimal_symbols_cflags = [] 1339 # Linker symbols for backtraces only.
1451 if (is_win_fastlink) { 1340 cflags = []
1452 # Tell VS 2015+ to create a PDB that references debug 1341 if (is_win_fastlink) {
1453 # information in .obj and .lib files instead of copying 1342 # Tell VS 2015+ to create a PDB that references debug
1454 # it all. This flag is incompatible with /PROFILE 1343 # information in .obj and .lib files instead of copying
1455 minimal_symbols_ldflags = [ "/DEBUG:FASTLINK" ] 1344 # it all. This flag is incompatible with /PROFILE
1345 ldflags = [ "/DEBUG:FASTLINK" ]
1346 } else {
1347 ldflags = [ "/DEBUG" ]
1348 }
1456 } else { 1349 } else {
1457 minimal_symbols_ldflags = [ "/DEBUG" ] 1350 cflags = [ "-g1" ]
1351 if (use_debug_fission) {
1352 cflags += [ "-gsplit-dwarf" ]
1353 }
1354 ldflags = []
1458 } 1355 }
1459 } else {
1460 minimal_symbols_cflags = [ "-g1" ]
1461 if (use_debug_fission) {
1462 minimal_symbols_cflags += [ "-gsplit-dwarf" ]
1463 }
1464 minimal_symbols_ldflags = []
1465 }
1466
1467 config("minimal_symbols") {
1468 cflags = minimal_symbols_cflags
1469 ldflags = minimal_symbols_ldflags
1470 } 1356 }
1471 1357
1472 # No symbols. 1358 # No symbols.
1473 if (is_win) {
1474 no_symbols_cflags = []
1475 } else {
1476 no_symbols_cflags = [ "-g0" ]
1477 }
1478
1479 config("no_symbols") { 1359 config("no_symbols") {
1480 cflags = no_symbols_cflags 1360 if (!is_win) {
1361 cflags = [ "-g0" ]
1362 }
1481 } 1363 }
1482 1364
1483 # Default symbols. 1365 # Default symbols.
1484 config("default_symbols") { 1366 config("default_symbols") {
1485 if (symbol_level == 0) { 1367 if (symbol_level == 0) {
1486 cflags = no_symbols_cflags 1368 configs = [ ":no_symbols" ]
1487 } else if (symbol_level == 1) { 1369 } else if (symbol_level == 1) {
1488 cflags = minimal_symbols_cflags 1370 configs = [ ":minimal_symbols" ]
1489 ldflags = minimal_symbols_ldflags
1490 } else if (symbol_level == 2) { 1371 } else if (symbol_level == 2) {
1491 cflags = symbols_cflags 1372 configs = [ ":symbols" ]
1492 ldflags = symbols_ldflags
1493 } else { 1373 } else {
1494 assert(false) 1374 assert(false)
1495 } 1375 }
1496 } 1376 }
OLDNEW
« no previous file with comments | « build/config/android/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698