configure: shorthand for only enabling native softmmu target
RFC PATCH 1/1 configure: shorthand for only enabling native softmmu target
With the huge number of QEMU targets, a default configuration will take a very long time to rebuild. When developing most code changes, it is sufficient to test compilation with a single target - rebuilding all targets just extends compile times while not detecting any new problems.
Developers will often thus specify a single target for configure, commonly matching the host architecture. eg
./configure --target-list=x86_64-softmmu
This works fine, but is a bit of a verbose thing to type out everytime configure is invoked. There are already short-hand args to disable all user targets, all softmmu targets, or all tcg targets. This adds one further shorthand to disable all non-native architecture targets.
./configure --native
---
Suggestions welcomed for better names than --native, but bear in mind the goal is to minimise amount of typing so nothing too verbose, hence why I didn't do something like --disable-non-native ...
configure | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
configure +24 -0
@@ -233,6 +233,22 @@ supported_whpx_target() { return 1 } +supported_native_target() { + glob "$1" "*-softmmu" || return 1 + case "${1%-softmmu}:$cpu" in + arm:arm | aarch64:aarch64 | \ + i386:i386 | i386:x32 | \ + x86_64:x86_64 | \ + mips:mips | mipsel:mips | \ + ppc:ppc | ppcemb:ppc | \ + ppc64:ppc64 | \ + s390x:s390x) + return 0 + ;; + esac + return 1 +} + supported_target() { case "$1" in *-softmmu)
@@ -254,6 +270,10 @@ supported_target() { return 1 ;; esac + if test "$native" = "yes" + then + supported_native_target "$1" || return 1 + fi test "$tcg" = "yes" && return 0 supported_kvm_target "$1" && return 0 supported_xen_target "$1" && return 0
@@ -390,6 +410,7 @@ cocoa="no" softmmu="yes" linux_user="no" bsd_user="no" +native="no" blobs="yes" pkgversion="" pie=""
@@ -1112,6 +1133,8 @@ for opt do cocoa="yes" ; audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" ;; + --native) native="yes" + ;; --disable-system) softmmu="no" ;; --enable-system) softmmu="yes"
@@ -1540,6 +1563,7 @@ Advanced options (experts only): xen pv domain builder --enable-debug-stack-usage track the maximum stack usage of stacks created by qemu_alloc_stack + --native only enable the softmmu target matching host architecture Optional features, enabled with --enable-FEATURE and disabled with --disable-FEATURE, default is enabled if available:
Signature · 1 line
2.14.3
Quoted 9 lines · Daniel P. Berrangé
With the huge number of QEMU targets, a default configuration will take a very long time to rebuild. When developing most code changes, it is sufficient to test compilation with a single target - rebuilding all targets just extends compile times while not detecting any new problems.
Developers will often thus specify a single target for configure, commonly matching the host architecture. eg
./configure --target-list=x86_64-softmmu
A while back I messed with a patch that allowed stems in --target-list so you could quickly select targets with stems:
Subject: [PATCH 0/4] Current Travis queue
Date: Fri, 15 Apr 2016 16:56:57 +0100
Message-Id: <[email protected]>
but if I recall Peter was worried about it breaking existing configure lines.
Quoted 7 lines
This works fine, but is a bit of a verbose thing to type out everytime configure is invoked. There are already short-hand args to disable all user targets, all softmmu targets, or all tcg targets. This adds one further shorthand to disable all non-native architecture targets.
./configure --native
I'm not sure this is really the case. My history tends to be littered with things like:
./configure --enable-debug --enable-debug-tcg --extra-cflags="-O0 -g3" --target-list=aarch64-linux-user
when compile time is an issue although my development box is an x86. Normally I do compile all targets and rely on ccache to keep the compile time reasonable.
Quoted 7 lines
Signed-off-by Daniel P. Berrangé <[email protected]>---
Suggestions welcomed for better names than --native, but bear in mind the goal is to minimise amount of typing so nothing too verbose, hence why I didn't do something like --disable-non-native ...
I would argue it's "almost" equivalent to --disable-tcg as most native users in my experience aren't looking to run X on X via TCG. I could be wrong of course.
Quoted 18 lines
configure | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)configure +6
-0@@ -233,6 +233,22 @@ supported_whpx_target() { return 1 } +supported_native_target() { + glob "$1" "*-softmmu" || return 1 + case "${1%-softmmu}:$cpu" in + arm:arm | aarch64:aarch64 | \ + i386:i386 | i386:x32 | \ + x86_64:x86_64 | \
configure supported_whpx_target() { · line 251
Quoted 10 lines
configure +10
-0+ mips:mips | mipsel:mips | \ + ppc:ppc | ppcemb:ppc | \ + ppc64:ppc64 | \ + s390x:s390x) + return 0 + ;; + esac + return 1 +} +
This strikes me as another place to mess about with when doing target specific changes to configure.
Quoted 32 lines
configure +7
-0supported_target() { case "$1" in *-softmmu)@@ -254,6 +270,10 @@ supported_target() { return 1 ;; esac + if test "$native" = "yes" + then + supported_native_target "$1" || return 1 + fi test "$tcg" = "yes" && return 0 supported_kvm_target "$1" && return 0 supported_xen_target "$1" && return 0@@ -390,6 +410,7 @@ cocoa="no" softmmu="yes" linux_user="no" bsd_user="no" +native="no" blobs="yes" pkgversion="" pie=""@@ -1112,6 +1133,8 @@ for opt do cocoa="yes" ; audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" ;; + --native) native="yes" + ;; --disable-system) softmmu="no" ;; --enable-system) softmmu="yes"
configure Advanced options (experts only): · line 1569
Quoted 7 lines
configure +1
-0@@ -1540,6 +1563,7 @@ Advanced options (experts only): xen pv domain builder --enable-debug-stack-usage track the maximum stack usage of stacks created by qemu_alloc_stack + --native only enable the softmmu target matching host architecture Optional features, enabled with --enable-FEATURE and disabled with --disable-FEATURE, default is enabled if available:
--
Alex Bennée
Quoted 8 lines · Daniel P. Berrangé
With the huge number of QEMU targets, a default configuration will take a very long time to rebuild. When developing most code changes, it is sufficient to test compilation with a single target - rebuilding all targets just extends compile times while not detecting any new problems.
Developers will often thus specify a single target for configure, commonly matching the host architecture. eg
Quoted 8 lines
./configure --target-list=x86_64-softmmuThis works fine, but is a bit of a verbose thing to type out everytime configure is invoked. There are already short-hand args to disable all user targets, all softmmu targets, or all tcg targets. This adds one further shorthand to disable all non-native architecture targets.
./configure --native
How common actually is that, though? Almost all the time when I'm picking targets I want something that's *not* the native target...
More to the point, I actually only fairly rarely run configure by hand at all. I have a source tree, with a subdir build/ which I have lots of subdirectories of for each config I care about or have cared about. So if I want to do something with sparc I'll just use 'make -C build/sparc' which will automatically rerun configure with the right arguments, because they're in the config.status in that build tree.
And as Alex points out you already usually want to feed configure a pile of options, like --enable-debug. I also like --with-pkgversion=foo, because without that the version depends on the git commit hash, which means every time the git hash changes multiple files and executables get pointlessly rebuilt because the version string changed. Keeping build dirs around means that all this sort of customisation of options stays around.
So I'm not hugely keen on this patch, because it saves 20 characters on a command line that really ought not to need typing more than once a month at most, but it adds another messy case statement in configure that knows about multiple architecture and subarchitecture names.
thanks
-- PMM