$(Q)$(TOPDIR)/support/scripts/size-stats --builddir $(BASE_DIR) \
--graph $(GRAPHS_DIR)/graph-size.$(BR_GRAPH_OUT) \
--file-size-csv $(GRAPHS_DIR)/file-size-stats.csv \
- --package-size-csv $(GRAPHS_DIR)/package-size-stats.csv
+ --package-size-csv $(GRAPHS_DIR)/package-size-stats.csv \
+ $(BR2_GRAPH_SIZE_OPTS)
.PHONY: check-dependencies
check-dependencies:
xref:graph-depends[] for the accepted options
* +BR2_GRAPH_DOT_OPTS+ is passed verbatim as options to the +dot+ utility to
draw the dependency graph.
+* +BR2_GRAPH_SIZE_OPTS+ to pass extra options to the size graph; see
+ xref:graph-size[] for the acepted options
An example that uses config files located in the toplevel directory and
in your $HOME:
BR2_GRAPH_OUT=png make graph-build
----------------
+[[graph-size]]
=== Graphing the filesystem size contribution of packages
When your target system grows, it is sometimes useful to understand
supported to adjust the output file format. See xref:graph-depends[]
for details about this environment variable.
+Additionally, one may set the environment variable +BR2_GRAPH_SIZE_OPTS+
+to further control the generated graph. Accepted options are:
+
+* `--size-limit X`, `-l X`, will group all packages which individual
+ contribution is below `X` percent, to a single entry labelled _Others_
+ in the graph. By default, `X=0.01`, which means packages each
+ contributing less than 1% are grouped under _Others_. Accepted values
+ are in the range `[0.0..1.0]`.
+
.Note
The collected filesystem size data is only meaningful after a complete
clean rebuild. Be sure to run +make clean all+ before using +make
sys.stderr.write("You need python-matplotlib to generate the size graph\n")
exit(1)
-colors = ['#e60004', '#009836', '#2e1d86', '#ffed00',
- '#0068b5', '#f28e00', '#940084', '#97c000']
+
+class Config:
+ size_limit = 0.01
+ colors = ['#e60004', '#009836', '#2e1d86', '#ffed00',
+ '#0068b5', '#f28e00', '#940084', '#97c000']
#
other_value = 0
unknown_value = 0
for (p, sz) in sorted(pkgsize.items(), key=lambda x: x[1]):
- if sz < (total * 0.01):
+ if sz < (total * Config.size_limit):
other_value += sz
elif p == "unknown":
unknown_value = sz
plt.figure()
patches, texts, autotexts = plt.pie(values, labels=labels,
autopct='%1.1f%%', shadow=True,
- colors=colors)
+ colors=Config.colors)
# Reduce text size
proptease = fm.FontProperties()
proptease.set_size('xx-small')
help="CSV output file with file size statistics")
parser.add_argument("--package-size-csv", '-p', metavar="PKG_SIZE_CSV",
help="CSV output file with package size statistics")
+ parser.add_argument("--size-limit", "-l", type=float,
+ help='Under this size ratio, files are accounted to ' +
+ 'the generic "Other" package. Default: 0.01 (1%%)')
args = parser.parse_args()
+ if args.size_limit is not None:
+ if args.size_limit < 0.0 or args.size_limit > 1.0:
+ parser.error("--size-limit must be in [0.0..1.0]")
+ Config.size_limit = args.size_limit
+
# Find out which package installed what files
pkgdict = build_package_dict(args.builddir)