Reintroduce the ICF flag, turn it on for bots

This was brought up on https://gn-review.googlesource.com/c/gn/+/3741,
some of GN users use linkers that don't support ICF so we need to
provide an option to disable it rather than enabling it unconditionally.

Change-Id: I8300f2b1883468a586ca26f358c6fdfc1c93afb5
Reviewed-on: https://gn-review.googlesource.com/c/3820
Reviewed-by: Scott Graham <scottmg@chromium.org>
Commit-Queue: Petr Hosek <phosek@google.com>
diff --git a/build/gen.py b/build/gen.py
index ee4f8e1..77fe5b5 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -83,6 +83,8 @@
                     choices=Platform.known_platforms())
   parser.add_option('--use-lto', action='store_true',
                     help='Enable the use of LTO')
+  parser.add_option('--use-icf', action='store_true',
+                    help='Enable the use of Identical Code Folding')
   parser.add_option('--no-last-commit-position', action='store_true',
                     help='Do not generate last_commit_position.h.')
   parser.add_option('--out-path',
@@ -299,7 +301,7 @@
           ldflags.append('-Wl,-strip-all')
 
       # Enable identical code-folding.
-      if not platform.is_darwin():
+      if options.use_icf and not platform.is_darwin():
         ldflags.append('-Wl,--icf=all')
 
     cflags.extend([
diff --git a/infra/recipes/gn.expected/ci_linux.json b/infra/recipes/gn.expected/ci_linux.json
index 7a91854..0179799 100644
--- a/infra/recipes/gn.expected/ci_linux.json
+++ b/infra/recipes/gn.expected/ci_linux.json
@@ -155,7 +155,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/ci_mac.json b/infra/recipes/gn.expected/ci_mac.json
index 155a77e..bb30be4 100644
--- a/infra/recipes/gn.expected/ci_mac.json
+++ b/infra/recipes/gn.expected/ci_mac.json
@@ -212,7 +212,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/ci_win.json b/infra/recipes/gn.expected/ci_win.json
index a565841..764f2fa 100644
--- a/infra/recipes/gn.expected/ci_win.json
+++ b/infra/recipes/gn.expected/ci_win.json
@@ -246,7 +246,8 @@
       "python",
       "-u",
       "[START_DIR]\\gn\\build\\gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
diff --git a/infra/recipes/gn.expected/cipd_exists.json b/infra/recipes/gn.expected/cipd_exists.json
index 4c2bd96..a1b32ae 100644
--- a/infra/recipes/gn.expected/cipd_exists.json
+++ b/infra/recipes/gn.expected/cipd_exists.json
@@ -155,7 +155,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/cipd_register.json b/infra/recipes/gn.expected/cipd_register.json
index 4e562db..a626fa6 100644
--- a/infra/recipes/gn.expected/cipd_register.json
+++ b/infra/recipes/gn.expected/cipd_register.json
@@ -155,7 +155,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/cq_linux.json b/infra/recipes/gn.expected/cq_linux.json
index 452b8fd..6c00b06 100644
--- a/infra/recipes/gn.expected/cq_linux.json
+++ b/infra/recipes/gn.expected/cq_linux.json
@@ -182,7 +182,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/cq_mac.json b/infra/recipes/gn.expected/cq_mac.json
index fe4105c..7872a57 100644
--- a/infra/recipes/gn.expected/cq_mac.json
+++ b/infra/recipes/gn.expected/cq_mac.json
@@ -239,7 +239,8 @@
       "python",
       "-u",
       "[START_DIR]/gn/build/gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]/gn",
     "env": {
diff --git a/infra/recipes/gn.expected/cq_win.json b/infra/recipes/gn.expected/cq_win.json
index 21f6dd2..92f665a 100644
--- a/infra/recipes/gn.expected/cq_win.json
+++ b/infra/recipes/gn.expected/cq_win.json
@@ -273,7 +273,8 @@
       "python",
       "-u",
       "[START_DIR]\\gn\\build\\gen.py",
-      "--use-lto"
+      "--use-lto",
+      "--use-icf"
     ],
     "cwd": "[START_DIR]\\gn",
     "env": {
diff --git a/infra/recipes/gn.py b/infra/recipes/gn.py
index f3280c0..c19672e 100644
--- a/infra/recipes/gn.py
+++ b/infra/recipes/gn.py
@@ -69,7 +69,7 @@
       },
       {
           'name': 'release',
-          'args': ['--use-lto']
+          'args': ['--use-lto', '--use-icf']
       },
   ]