Use -ffunction-sections and -fdata-sections
This results in a greater size reduction as it can eliminate all
unnecessary function and data symbols. On Linux it reduce the binary
size from 2624088 to 2016216 bytes.
Change-Id: Ie15ca7b87a4f8430ef5a0d443a2c0cec0badd915
Reviewed-on: https://gn-review.googlesource.com/2201
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 fe16882..3e1630a 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -258,7 +258,16 @@
if options.debug:
cflags.extend(['-O0', '-g'])
else:
- cflags.extend(['-O3', '-DNDEBUG'])
+ cflags.append('-DNDEBUG')
+ cflags.append('-O3')
+ ldflags.append('-O3')
+ # Use -fdata-sections and -ffunction-sections to place each function
+ # or data item into its own section so --gc-sections can eliminate any
+ # unused functions and data items.
+ cflags.extend(['-fdata-sections', '-ffunction-sections'])
+ ldflags.extend(['-fdata-sections', '-ffunction-sections'])
+ ldflags.append('-Wl,-dead_strip' if is_mac else '-Wl,--gc-sections')
+ # Omit all symbol information from the output file.
ldflags.append('-Wl,-S' if is_mac else '-Wl,-strip-all')
cflags.extend([