pw_toolchain_size_report template
This change adds a GN template which creates a size report card across
a set of different toolchains. The toolchains are defined in a build
variable, each with an optional linker script and Bloaty config. The
size report template builds a base and diff executable with each of the
toolchains and compares the size difference of each.
Example output for the host target:
simple_bloat_toolchain
──────────────────────
┌───────────┬─────────┬────────┬───────┬───────┐
│ Label │ Segment │ Before │ Delta │ After │
├═══════════┼═════════┼════════┼═══════┼═══════┤
│ gcc -Og │ CODE │ 413 │ +32 │ 445 │
│ │ RAM │ 576 │ +8 │ 584 │
├───────────┼─────────┼────────┼───────┼───────┤
│ gcc -Os │ CODE │ 429 │ +16 │ 445 │
│ │ RAM │ 576 │ +8 │ 584 │
├───────────┼─────────┼────────┼───────┼───────┤
│ gcc -O2 │ CODE │ 429 │ +32 │ 461 │
│ │ RAM │ 576 │ +8 │ 584 │
├───────────┼─────────┼────────┼───────┼───────┤
│ clang -Og │ CODE │ 448 │ +32 │ 480 │
│ │ RAM │ 113 │ +15 │ 128 │
├───────────┼─────────┼────────┼───────┼───────┤
│ clang -Os │ CODE │ 432 │ +16 │ 448 │
│ │ RAM │ 113 │ +15 │ 128 │
├───────────┼─────────┼────────┼───────┼───────┤
│ clang -O2 │ CODE │ 448 │ +80 │ 528 │
│ │ RAM │ 113 │ +15 │ 128 │
└───────────┴─────────┴────────┴───────┴───────┘
Change-Id: I2c65f4d4f61354b9779628f207297eacd04470b9
diff --git a/pw_bloat/py/no_toolchains.py b/pw_bloat/py/no_toolchains.py
new file mode 100644
index 0000000..3df6fe5
--- /dev/null
+++ b/pw_bloat/py/no_toolchains.py
@@ -0,0 +1,37 @@
+# Copyright 2019 The Pigweed Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+"""Outputs a ReST warning about the size toolchains variable being empty."""
+
+import os
+import sys
+
+_NO_TOOLCHAIN_ERROR: str = '''
+.. warning::
+
+ The ``pw_size_report_toolchains`` build variable is empty for this target.
+ Size reports will not be generated.
+
+ See :ref:`bloat-howto` for details on how to set up size reports.
+'''
+
+
+def main() -> int:
+ os.makedirs(os.path.dirname(sys.argv[1]), exist_ok=True)
+ with open(sys.argv[1], 'w') as fd:
+ fd.write(_NO_TOOLCHAIN_ERROR)
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())