configure: allow the selection of alternate config in the build

While the default config works well enough it does end up enabling a
lot of stuff. For more minimal builds we can select a different list
of devices and let Kconfig work out what we want. For example:

  ../../configure --without-default-features \
    --target-list=arm-softmmu,aarch64-softmmu \
    --with-devices-aarch64=minimal

will override the aarch64-softmmu default set of devices with a more
minimal set of devices that just enables the virt and sbsa-ref models.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210707131744.26027-6-alex.bennee@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Alex Bennée 2021-07-07 14:17:44 +01:00 committed by Paolo Bonzini
parent 812b31d3f9
commit d1d5e9eefd
3 changed files with 34 additions and 2 deletions

View File

@ -0,0 +1,9 @@
#
# A minimal version of the config that only supports only a few
# virtual machines. This avoids bringing in any of numerous legacy
# features from the 32bit platform (although virt still supports 32bit
# itself)
#
CONFIG_ARM_VIRT=y
CONFIG_SBSA_REF=y

24
configure vendored
View File

@ -915,6 +915,18 @@ for opt do
;; ;;
--without-default-devices) default_devices="false" --without-default-devices) default_devices="false"
;; ;;
--with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
;;
--with-devices-*) device_arch=${opt#--with-devices-};
device_arch=${device_arch%%=*}
cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
if test -f "$cf"; then
device_archs="$device_archs $device_arch"
eval "devices_${device_arch}=\$optarg"
else
error_exit "File $cf does not exist"
fi
;;
--without-default-features) # processed above --without-default-features) # processed above
;; ;;
--enable-gprof) gprof="yes" --enable-gprof) gprof="yes"
@ -1764,7 +1776,8 @@ Advanced options (experts only):
--without-default-features default all --enable-* options to "disabled" --without-default-features default all --enable-* options to "disabled"
--without-default-devices do not include any device that is not needed to --without-default-devices do not include any device that is not needed to
start the emulator (only use if you are including start the emulator (only use if you are including
desired devices in default-configs/devices/) desired devices in configs/devices/)
--with-devices-ARCH=NAME override default configs/devices
--enable-debug enable common debug build options --enable-debug enable common debug build options
--enable-sanitizers enable default sanitizers --enable-sanitizers enable default sanitizers
--enable-tsan enable thread sanitizer --enable-tsan enable thread sanitizer
@ -5082,6 +5095,15 @@ if test "$skip_meson" = no; then
echo "# Automatically generated by configure - do not modify" > $cross echo "# Automatically generated by configure - do not modify" > $cross
echo "[properties]" >> $cross echo "[properties]" >> $cross
# unroll any custom device configs
if test -n "$device_archs"; then
for a in $device_archs; do
eval "c=\$devices_${a}"
echo "${a}-softmmu = '$c'" >> $cross
done
fi
test -z "$cxx" && echo "link_language = 'c'" >> $cross test -z "$cxx" && echo "link_language = 'c'" >> $cross
echo "[built-in options]" >> $cross echo "[built-in options]" >> $cross
echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross

View File

@ -1595,9 +1595,10 @@ foreach target : target_dirs
configuration: config_target_data)} configuration: config_target_data)}
if target.endswith('-softmmu') if target.endswith('-softmmu')
config_input = meson.get_external_property(target, 'default')
config_devices_mak = target + '-config-devices.mak' config_devices_mak = target + '-config-devices.mak'
config_devices_mak = configure_file( config_devices_mak = configure_file(
input: ['configs/devices' / target / 'default.mak', 'Kconfig'], input: ['configs/devices' / target / config_input + '.mak', 'Kconfig'],
output: config_devices_mak, output: config_devices_mak,
depfile: config_devices_mak + '.d', depfile: config_devices_mak + '.d',
capture: true, capture: true,