Make LTO an option in gen.py

Previously, LTO was enabled unconditionally for all release builds
but this was causing issues and got reverted in
https://gn-review.googlesource.com/2120, but LTO still makes sense
for release builds where we control the compiler, so we make it an
option which can be enabled as needed.

Change-Id: I4650210a326aeeb00a44d853b8b2da0c90ef17a5
Reviewed-on: https://gn-review.googlesource.com/2200
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/build/gen.py b/build/gen.py
index 9dda914..fe16882 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -31,6 +31,8 @@
   parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
   parser.add_option('-d', '--debug', action='store_true',
                     help='Do a debug build. Defaults to release build.')
+  parser.add_option('--use-lto', action='store_true',
+                    help='Enable the use of LTO')
   parser.add_option('--no-sysroot', action='store_true',
                     help='(Linux only) Do not build with the Debian sysroot.')
   parser.add_option('--no-last-commit-position', action='store_true',
@@ -291,6 +293,10 @@
       cflags.append(min_mac_version_flag)
       ldflags.append(min_mac_version_flag)
 
+    if options.use_lto:
+      cflags.extend(['-flto', '-fwhole-program-vtables'])
+      ldflags.extend(['-flto', '-fwhole-program-vtables'])
+
   elif is_win:
     if not options.debug:
       cflags.extend(['/Ox', '/DNDEBUG', '/GL'])