From f115a19c40b6ef19f08d12eeb032d88f176d6870 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 31 Mar 2016 12:36:43 +0200 Subject: scripts: add script to build QEMU and analyze inclusions Signed-off-by: Paolo Bonzini --- scripts/analyze-inclusions | 102 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 scripts/analyze-inclusions (limited to 'scripts') diff --git a/scripts/analyze-inclusions b/scripts/analyze-inclusions new file mode 100644 index 0000000000..a8108d9b88 --- /dev/null +++ b/scripts/analyze-inclusions @@ -0,0 +1,102 @@ +#! /bin/sh +# +# Copyright (C) 2016 Red Hat, Inc. +# +# Author: Paolo Bonzini +# +# Print statistics about header file inclusions. +# +# The script has two modes of execution: +# +# 1) if invoked with a path on the command line (possibly +# preceded by a "--" argument), it will run the analysis on +# an existing build directory +# +# 2) otherwise, it will configure and builds QEMU itself in a +# "+build" subdirectory which is left around when the script +# exits. In this case the command line is passed directly to +# "make" (typically used for a "-j" argument suitable for your +# system). +# +# Inspired by a post by Markus Armbruster. + +case "x$1" in +x--) + shift + cd "$1" || exit $? + ;; +x-* | x) + mkdir -p +build + cd +build + test -f Makefile && make distclean + ../configure + make "$@" + ;; +*) + cd "$1" || exit $? +esac + +QEMU_CFLAGS=$(sed -n s/^QEMU_CFLAGS=//p config-host.mak) +QEMU_INCLUDES=$(sed -n s/^QEMU_INCLUDES=//p config-host.mak | \ + sed 's/$(SRC_PATH)/../g' ) +CFLAGS=$(sed -n s/^CFLAGS=//p config-host.mak) + +grep_include() { + find . -name "*.d" -exec grep -l "$@" {} + | wc -l +} + +echo Found $(find . -name "*.d" | wc -l) object files +echo $(grep_include -F 'include/qemu-common.h') files include qemu-common.h +echo $(grep_include -F 'hw/hw.h') files include hw/hw.h +echo $(grep_include 'target-[a-z0-9]*/cpu\.h') files include cpu.h +echo $(grep_include -F 'qapi-types.h') files include qapi-types.h +echo $(grep_include -F 'trace/generated-tracers.h') files include generated-tracers.h +echo $(grep_include -F 'qapi/error.h') files include qapi/error.h +echo $(grep_include -F 'qom/object.h') files include qom/object.h +echo $(grep_include -F 'block/aio.h') files include block/aio.h +echo $(grep_include -F 'exec/memory.h') files include exec/memory.h +echo $(grep_include -F 'fpu/softfloat.h') files include fpu/softfloat.h +echo $(grep_include -F 'qemu/bswap.h') files include qemu/bswap.h +echo + +awk1=' + /^# / { file = $3;next } + NR>1 { bytes[file]+=length()+1; lines[file]++ } + END { for(i in lines) print i,lines[i],bytes[i] }' + +awk2=' + {tot_l+=$2;tot_b+=$3;tot_f++} + /\/usr.*\/glib/ {glib_l+=$2;glib_b+=$3;glib_f++;next} + /\/usr/ {sys_l+=$2;sys_b+=$3;sys_f++;next} + {qemu_l+=$2;qemu_b+=$3;qemu_f++;next} + END { + printf "%s\t %s\t %s\t %s\n", "lines", "bytes", "files", "source" + printf "%s\t %s\t %s\t %s\n", qemu_l, qemu_b, qemu_f, "QEMU" + printf "%s\t %s\t %s\t %s\n", sys_l, sys_b, sys_f, "system" + printf "%s\t %s\t %s\t %s\n", glib_l, glib_b, glib_f, "glib" + printf "%s\t %s\t %s\t %s\n", tot_l, tot_b, tot_f, "total" + }' + +analyze() { + cc $QEMU_CFLAGS $QEMU_INCLUDES $CFLAGS -E -o - "$@" | \ + awk "$awk1" | awk "$awk2" + echo +} + +echo osdep.h: +analyze ../include/qemu/osdep.h + +echo qemu-common.h: +analyze -include ../include/qemu/osdep.h ../include/qemu-common.h + +echo hw/hw.h: +analyze -include ../include/qemu/osdep.h ../include/hw/hw.h + +echo trace/generated-tracers.h: +analyze -include ../include/qemu/osdep.h trace/generated-tracers.h + +echo target-i386/cpu.h: +analyze -DNEED_CPU_H -I../target-i386 -Ii386-softmmu -include ../include/qemu/osdep.h ../target-i386/cpu.h + +echo hw/hw.h + NEED_CPU_H: +analyze -DNEED_CPU_H -I../target-i386 -Ii386-softmmu -include ../include/qemu/osdep.h ../include/hw/hw.h -- cgit v1.2.3 From bdd902277c784cfcc0c2e602afe79515070b9e02 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 15 Mar 2016 12:46:10 +0100 Subject: include: poison symbols in osdep.h Ensure that all target-independent files ignore poisoned symbols, and fix the fallout. Signed-off-by: Paolo Bonzini --- scripts/create_config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/create_config b/scripts/create_config index 9cb176f1ba..b2d2ebb452 100755 --- a/scripts/create_config +++ b/scripts/create_config @@ -52,7 +52,7 @@ case $line in done echo " NULL" ;; - CONFIG_*=y) # configuration + CONFIG_*='$(CONFIG_SOFTMMU)'|CONFIG_*=y) # configuration name=${line%=*} echo "#define $name 1" ;; -- cgit v1.2.3 From da163845602bf75999054d2a9b9f8f877cb36ce2 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 25 Aug 2014 16:27:30 +0200 Subject: gdbstub: remove unnecessary includes from gdbstub-xml.c gdbstub-xml.c defines a bunch of arrays of strings; there is no need to include anything. Keep osdep.h for consistency, but remove the rest. Signed-off-by: Paolo Bonzini --- scripts/feature_to_c.sh | 2 -- 1 file changed, 2 deletions(-) (limited to 'scripts') diff --git a/scripts/feature_to_c.sh b/scripts/feature_to_c.sh index fb1f3363f7..e4387b7fcf 100644 --- a/scripts/feature_to_c.sh +++ b/scripts/feature_to_c.sh @@ -37,8 +37,6 @@ for input; do ${AWK:-awk} 'BEGIN { n = 0 printf "#include \"qemu/osdep.h\"\n" - printf "#include \"qemu-common.h\"\n" - printf "#include \"exec/gdbstub.h\"\n" print "static const char '$arrayname'[] = {" for (i = 0; i < 255; i++) _ord_[sprintf("%c", i)] = i -- cgit v1.2.3 From 33c11879fd422b759483ed25fef133ea900ea8d7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 15 Mar 2016 16:58:45 +0100 Subject: qemu-common: push cpu.h inclusion out of qemu-common.h Signed-off-by: Paolo Bonzini --- scripts/tracetool/format/tcg_helper_c.py | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts') diff --git a/scripts/tracetool/format/tcg_helper_c.py b/scripts/tracetool/format/tcg_helper_c.py index a089b0bf05..e3485b7f92 100644 --- a/scripts/tracetool/format/tcg_helper_c.py +++ b/scripts/tracetool/format/tcg_helper_c.py @@ -48,6 +48,7 @@ def generate(events, backend): '', '#include "qemu/osdep.h"', '#include "qemu-common.h"', + '#include "cpu.h"', '#include "trace.h"', '#include "exec/helper-proto.h"', '', -- cgit v1.2.3