From nobody Mon Feb 9 19:25:37 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1596742818; cv=none; d=zohomail.com; s=zohoarc; b=ZJgk2g6DhMGYwvfZtx/rrcUbSidcTaIk9/2fbC8yjecwbMJeE4rhUQcETWJdHBtRuCXXWfTuhQ7SBUAoD3f0BSwRw7lgDvVAy/v1R8F+/QrwYSImQn5l/71yg+SGYpItZOBhdsVVxcAD76jQ+RtYUk0B+dP4aH8ZMZLkcbmeVTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1596742818; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Kd6LcSxh1RbBx010AxbTjf/5Taer1LiZE3/2yM9hNuw=; b=W1mIt/SRj9ZuyStactymlyM/evDWd+bnb1prGbLJQSEqmu/vtL7PwZIkZFgJgfAqDZKhgy2CYnT219qnQjZUma6PhOnYLgRTRLW1gtiSSV96n0RVsa7PMxf0+yYOjFWHzx431EiHkXtXPGK2gDmwUZQX0JId10bTegB/FSZnGfw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159674281891234.45391212326717; Thu, 6 Aug 2020 12:40:18 -0700 (PDT) Received: from localhost ([::1]:32930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k3lkP-0001oF-Hk for importer@patchew.org; Thu, 06 Aug 2020 15:40:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43174) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k3lOy-0005zs-6D for qemu-devel@nongnu.org; Thu, 06 Aug 2020 15:18:08 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:46247 helo=us-smtp-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k3lOv-0006Y3-2l for qemu-devel@nongnu.org; Thu, 06 Aug 2020 15:18:07 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-250-VUqs4333MOeAkxhth06kjA-1; Thu, 06 Aug 2020 15:18:01 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 28D6A100AA21 for ; Thu, 6 Aug 2020 19:18:00 +0000 (UTC) Received: from 640k.localdomain.com (unknown [10.36.110.10]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3D96569315; Thu, 6 Aug 2020 19:17:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1596741484; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Kd6LcSxh1RbBx010AxbTjf/5Taer1LiZE3/2yM9hNuw=; b=FVKaO+J8tNx/DhwV1vYaViCUxzDsK+4Yn2o151Uyym7VGjG23TJqhPhys7wSD8BpWdeJm5 Y48lfHbRKyvHLIaq/PRZCVo+kOoFM0ekqnpn1Pu7bQ6tBeL9WSWN3nXmDEO+cBq75fd9E3 NtNdBPkE0ayMw6cqgvxB2CEVFDFhTOU= X-MC-Unique: VUqs4333MOeAkxhth06kjA-1 From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PATCH 054/143] meson: infrastructure for building emulators Date: Thu, 6 Aug 2020 21:14:50 +0200 Message-Id: <1596741379-12902-55-git-send-email-pbonzini@redhat.com> In-Reply-To: <1596741379-12902-1-git-send-email-pbonzini@redhat.com> References: <1596741379-12902-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pbonzini@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.120; envelope-from=pbonzini@redhat.com; helo=us-smtp-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/06 00:24:10 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -30 X-Spam_score: -3.1 X-Spam_bar: --- X-Spam_report: (-3.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Signed-off-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Paolo Bonzini --- Makefile | 74 +++------------------- Makefile.target | 19 +++--- configure | 6 -- hw/i386/fw_cfg.c | 2 +- hw/i386/pc.c | 2 +- hw/i386/pc_piix.c | 2 +- hw/i386/x86.c | 2 +- hw/vfio/pci-quirks.c | 2 +- hw/virtio/virtio-mem.c | 2 +- include/qemu/osdep.h | 2 +- meson.build | 166 +++++++++++++++++++++++++++++++++++++++++++++= +++- rules.mak | 8 --- scripts/create_config | 2 + scripts/grepy.sh | 3 + softmmu/qtest.c | 2 +- util/meson.build | 5 +- 16 files changed, 193 insertions(+), 106 deletions(-) create mode 100755 scripts/grepy.sh diff --git a/Makefile b/Makefile index 1d4dfe8..e5f68e0 100644 --- a/Makefile +++ b/Makefile @@ -105,8 +105,6 @@ include $(SRC_PATH)/rules.mak # lor is defined in rules.mak CONFIG_BLOCK :=3D $(call lor,$(CONFIG_SOFTMMU),$(CONFIG_TOOLS)) =20 -generated-files-y =3D config-host.h - generated-files-y +=3D module_block.h generated-files-y +=3D target/s390x/gen-features.h target/s390x/gen-features.h: Makefile.ninja @@ -163,65 +161,6 @@ DOCS=3D endif =20 SUBDIR_MAKEFLAGS=3D$(if $(V),,--no-print-directory --quiet) BUILD_DIR=3D$(= BUILD_DIR) -SUBDIR_DEVICES_MAK=3D$(patsubst %, %/config-devices.mak, $(filter %-softmm= u, $(TARGET_DIRS))) -SUBDIR_DEVICES_MAK_DEP=3D$(patsubst %, %.d, $(SUBDIR_DEVICES_MAK)) - -ifeq ($(SUBDIR_DEVICES_MAK),) -config-all-devices.mak: config-host.mak - $(call quiet-command,echo '# no devices' > $@,"GEN","$@") -else -config-all-devices.mak: $(SUBDIR_DEVICES_MAK) config-host.mak - $(call quiet-command, sed -n \ - 's|^\([^=3D]*\)=3D\(.*\)$$|\1:=3D$$(findstring y,$$(\1)\2)|p'= \ - $(SUBDIR_DEVICES_MAK) | sort -u > $@, \ - "GEN","$@") -endif - --include $(SUBDIR_DEVICES_MAK_DEP) - -# This has to be kept in sync with Kconfig.host. -MINIKCONF_ARGS =3D \ - $(CONFIG_MINIKCONF_MODE) \ - $@ $*/config-devices.mak.d $< $(SRC_PATH)/Kconfig \ - CONFIG_TCG=3D$(CONFIG_TCG) \ - CONFIG_KVM=3D$(CONFIG_KVM) \ - CONFIG_SPICE=3D$(CONFIG_SPICE) \ - CONFIG_IVSHMEM=3D$(CONFIG_IVSHMEM) \ - CONFIG_TPM=3D$(CONFIG_TPM) \ - CONFIG_XEN=3D$(CONFIG_XEN) \ - CONFIG_OPENGL=3D$(CONFIG_OPENGL) \ - CONFIG_X11=3D$(CONFIG_X11) \ - CONFIG_VHOST_USER=3D$(CONFIG_VHOST_USER) \ - CONFIG_VHOST_KERNEL=3D$(CONFIG_VHOST_KERNEL) \ - CONFIG_VIRTFS=3D$(CONFIG_VIRTFS) \ - CONFIG_LINUX=3D$(CONFIG_LINUX) \ - CONFIG_PVRDMA=3D$(CONFIG_PVRDMA) - -MINIKCONF =3D $(PYTHON) $(SRC_PATH)/scripts/minikconf.py - -$(SUBDIR_DEVICES_MAK): %/config-devices.mak: default-configs/%.mak $(SRC_P= ATH)/Kconfig $(BUILD_DIR)/config-host.mak - $(call quiet-command, $(MINIKCONF) $(MINIKCONF_ARGS) \ - > $@.tmp, "GEN", "$@.tmp") - $(call quiet-command, if test -f $@; then \ - if cmp -s $@.old $@; then \ - mv $@.tmp $@; \ - cp -p $@ $@.old; \ - else \ - if test -f $@.old; then \ - echo "WARNING: $@ (user modified) out of date.";\ - else \ - echo "WARNING: $@ out of date.";\ - fi; \ - echo "Run \"$(MAKE) defconfig\" to regenerate."; \ - rm $@.tmp; \ - fi; \ - else \ - mv $@.tmp $@; \ - cp -p $@ $@.old; \ - fi,"GEN","$@"); - -defconfig: - rm -f config-all-devices.mak $(SUBDIR_DEVICES_MAK) =20 ifneq ($(wildcard config-host.mak),) include $(SRC_PATH)/Makefile.objs @@ -264,10 +203,15 @@ $(SOFTMMU_FUZZ_RULES): $(io-obj-y) $(SOFTMMU_FUZZ_RULES): config-all-devices.mak $(SOFTMMU_FUZZ_RULES): $(edk2-decompressed) =20 +# meson: this is sub-optimal but going away after conversion +TARGET_DEPS =3D $(patsubst %,%-config-target.h, $(TARGET_DIRS)) +TARGET_DEPS +=3D $(patsubst %,%-config-devices.h, $(filter %-softmmu,$(TAR= GET_DIRS))) +TARGET_DEPS +=3D $(patsubst %,libqemu-%.fa, $(TARGET_DIRS)) + .PHONY: $(TARGET_DIRS_RULES) # The $(TARGET_DIRS_RULES) are of the form SUBDIR/GOAL, so that # $(dir $@) yields the sub-directory, and $(notdir $@) yields the sub-goal -$(TARGET_DIRS_RULES): +$(TARGET_DIRS_RULES): $(TARGET_DEPS) $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) V=3D"$(V)" = TARGET_DIR=3D"$(dir $@)" $(notdir $@),) =20 # LIBFDT_lib=3D"": avoid breaking existing trees with objects requiring -f= PIC @@ -354,7 +298,6 @@ module_block.h: $(SRC_PATH)/scripts/modules/module_bloc= k.py config-host.mak clean: recurse-clean # avoid old build problems by removing potentially incorrect old files rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h ge= n-op-arm.h - rm -f qemu-options.def find . \( -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]= ' \) -type f \ ! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-aarch64.a \ ! -path ./roms/edk2/ArmPkg/Library/GccLto/liblto-arm.a \ @@ -363,8 +306,6 @@ clean: recurse-clean rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) TAGS cscope.* *.pod *~ */= *~ rm -f fsdev/*.pod scsi/*.pod rm -f $(foreach f,$(generated-files-y),$(f) $(f)-timestamp) - rm -f config-all-devices.mak - rm -f $(SUBDIR_DEVICES_MAK) =20 VERSION ?=3D $(shell cat VERSION) =20 @@ -381,8 +322,7 @@ endef distclean: clean rm -f config-host.mak config-host.h* $(DOCS) rm -f tests/tcg/config-*.mak - rm -f config-all-devices.mak config-all-disas.mak config.status - rm -f $(SUBDIR_DEVICES_MAK) + rm -f config-all-disas.mak config.status rm -f po/*.mo tests/qemu-iotests/common.env rm -f roms/seabios/config.mak roms/vgabios/config.mak rm -f qemu-plugins-ld.symbols qemu-plugins-ld64.symbols diff --git a/Makefile.target b/Makefile.target index f6b7a86..43d2f97 100644 --- a/Makefile.target +++ b/Makefile.target @@ -6,8 +6,10 @@ include ../config-host.mak include config-target.mak include $(SRC_PATH)/rules.mak =20 +FULL_TARGET_NAME=3D$(TARGET_NAME)-$(if $(CONFIG_SOFTMMU),softmmu,linux-use= r) + ifdef CONFIG_SOFTMMU -include config-devices.mak +include ../$(FULL_TARGET_NAME)-config-devices.mak endif =20 $(call set-vpath, $(SRC_PATH):$(BUILD_DIR)) @@ -18,6 +20,9 @@ QEMU_CFLAGS +=3D -iquote .. -iquote $(SRC_PATH)/target/$(= TARGET_BASE_ARCH) -DNEED_ =20 QEMU_CFLAGS+=3D-iquote $(SRC_PATH)/include =20 +QEMU_CFLAGS +=3D -DCONFIG_TARGET=3D\"../$(FULL_TARGET_NAME)-config-target.= h\" +QEMU_CFLAGS +=3D -DCONFIG_DEVICES=3D\"../$(FULL_TARGET_NAME)-config-device= s.h\" + ifdef CONFIG_USER_ONLY # user emulator name QEMU_PROG=3Dqemu-$(TARGET_NAME) @@ -36,15 +41,10 @@ QEMU_PROG_BUILD =3D $(QEMU_PROG) endif endif =20 +LIBQEMU =3D ../libqemu-$(FULL_TARGET_NAME).fa PROGS=3D$(QEMU_PROG) $(QEMU_PROGW) STPFILES=3D =20 -config-target.h: config-target.h-timestamp -config-target.h-timestamp: config-target.mak - -config-devices.h: config-devices.h-timestamp -config-devices.h-timestamp: config-devices.mak - ifdef CONFIG_TRACE_SYSTEMTAP stap: $(QEMU_PROG).stp-installed $(QEMU_PROG).stp $(QEMU_PROG)-simpletrace= .stp $(QEMU_PROG)-log.stp =20 @@ -103,6 +103,7 @@ all: $(PROGS) stap # Dummy command so that make thinks it has done something @true =20 +obj-y +=3D $(LIBQEMU) obj-y +=3D trace/ =20 ######################################################### @@ -169,7 +170,6 @@ obj-y +=3D hw/$(TARGET_BASE_ARCH)/ endif =20 generated-files-y +=3D hmp-commands.h hmp-commands-info.h -generated-files-y +=3D config-devices.h =20 endif # CONFIG_SOFTMMU =20 @@ -210,7 +210,7 @@ all-obj-$(CONFIG_SOFTMMU) +=3D $(crypto-obj-y) all-obj-$(CONFIG_SOFTMMU) +=3D $(io-obj-y) =20 ifdef CONFIG_SOFTMMU -$(QEMU_PROG_BUILD): config-devices.mak +$(QEMU_PROG_BUILD): ../$(FULL_TARGET_NAME)-config-devices.mak endif =20 COMMON_LDADDS =3D ../libqemuutil.a @@ -262,5 +262,4 @@ ifdef CONFIG_TRACE_SYSTEMTAP $(INSTALL_DATA) $(QEMU_PROG)-log.stp "$(DESTDIR)$(qemu_datadir)/../system= tap/tapset/$(QEMU_PROG)-log.stp" endif =20 -generated-files-y +=3D config-target.h Makefile: $(generated-files-y) diff --git a/configure b/configure index 3c54abf..bbb5cf3 100755 --- a/configure +++ b/configure @@ -8093,18 +8093,12 @@ fi =20 if supported_xen_target $target; then echo "CONFIG_XEN=3Dy" >> $config_target_mak - echo "$target/config-devices.mak: CONFIG_XEN=3Dy" >> $config_host_mak if test "$xen_pci_passthrough" =3D yes; then echo "CONFIG_XEN_PCI_PASSTHROUGH=3Dy" >> "$config_target_mak" fi -else - echo "$target/config-devices.mak: CONFIG_XEN=3Dn" >> $config_host_mak fi if supported_kvm_target $target; then echo "CONFIG_KVM=3Dy" >> $config_target_mak - echo "$target/config-devices.mak: CONFIG_KVM=3Dy" >> $config_host_mak -else - echo "$target/config-devices.mak: CONFIG_KVM=3Dn" >> $config_host_mak fi if supported_hax_target $target; then echo "CONFIG_HAX=3Dy" >> $config_target_mak diff --git a/hw/i386/fw_cfg.c b/hw/i386/fw_cfg.c index c55abfb..33441ad 100644 --- a/hw/i386/fw_cfg.c +++ b/hw/i386/fw_cfg.c @@ -22,7 +22,7 @@ #include "hw/nvram/fw_cfg.h" #include "e820_memory_layout.h" #include "kvm_i386.h" -#include "config-devices.h" +#include CONFIG_DEVICES =20 struct hpet_fw_config hpet_cfg =3D {.count =3D UINT8_MAX}; =20 diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 47c5ca3..cc616e4 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -92,10 +92,10 @@ #include "hw/mem/memory-device.h" #include "sysemu/replay.h" #include "qapi/qmp/qerror.h" -#include "config-devices.h" #include "e820_memory_layout.h" #include "fw_cfg.h" #include "trace.h" +#include CONFIG_DEVICES =20 GlobalProperty pc_compat_5_0[] =3D { }; diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index b789e83..456e336 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -23,7 +23,7 @@ */ =20 #include "qemu/osdep.h" -#include "config-devices.h" +#include CONFIG_DEVICES =20 #include "qemu/units.h" #include "hw/loader.h" diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 67bee1b..cf384b9 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -49,7 +49,7 @@ #include "multiboot.h" #include "elf.h" #include "standard-headers/asm-x86/bootparam.h" -#include "config-devices.h" +#include CONFIG_DEVICES #include "kvm_i386.h" =20 #define BIOS_FILENAME "bios.bin" diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index 3a14b7c..5715091 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -11,7 +11,7 @@ */ =20 #include "qemu/osdep.h" -#include "config-devices.h" +#include CONFIG_DEVICES #include "exec/memop.h" #include "qemu/units.h" #include "qemu/error-report.h" diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index 7740fc6..8fbec77 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -29,7 +29,7 @@ #include "migration/misc.h" #include "hw/boards.h" #include "hw/qdev-properties.h" -#include "config-devices.h" +#include CONFIG_DEVICES #include "trace.h" =20 /* diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index 20872e7..412962d 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -29,7 +29,7 @@ =20 #include "config-host.h" #ifdef NEED_CPU_H -#include "config-target.h" +#include CONFIG_TARGET #else #include "exec/poison.h" #endif diff --git a/meson.build b/meson.build index 2c617ef..f582de6 100644 --- a/meson.build +++ b/meson.build @@ -9,6 +9,7 @@ ss =3D import('sourceset') sh =3D find_program('sh') cc =3D meson.get_compiler('c') config_host =3D keyval.load(meson.current_build_dir() / 'config-host.mak') +config_all_disas =3D keyval.load(meson.current_build_dir() / 'config-all-d= isas.mak') =20 add_project_arguments(config_host['QEMU_CFLAGS'].split(), language: ['c', 'objc']) @@ -130,16 +131,96 @@ if 'CONFIG_LIBUDEV' in config_host libudev =3D declare_dependency(link_args: config_host['LIBUDEV_LIBS'].sp= lit()) endif =20 +create_config =3D find_program('scripts/create_config') +minikconf =3D find_program('scripts/minikconf.py') target_dirs =3D config_host['TARGET_DIRS'].split() have_user =3D false have_system =3D false +config_devices_mak_list =3D [] +config_devices_h =3D {} +config_target_mak =3D {} +kconfig_external_symbols =3D [ + 'CONFIG_KVM', + 'CONFIG_XEN', + 'CONFIG_TPM', + 'CONFIG_SPICE', + 'CONFIG_IVSHMEM', + 'CONFIG_OPENGL', + 'CONFIG_X11', + 'CONFIG_VHOST_USER', + 'CONFIG_VHOST_KERNEL', + 'CONFIG_VIRTFS', + 'CONFIG_LINUX', + 'CONFIG_PVRDMA', +] foreach target : target_dirs have_user =3D have_user or target.endswith('-user') - have_system =3D have_system or target.endswith('-softmmu') + config_target =3D keyval.load(meson.current_build_dir() / target / 'conf= ig-target.mak') + config_host + + if target.endswith('-softmmu') + have_system =3D true + + base_kconfig =3D [] + foreach sym : kconfig_external_symbols + if sym in config_target + base_kconfig +=3D '@0@=3Dy'.format(sym) + endif + endforeach + + config_devices_mak =3D target + '-config-devices.mak' + config_devices_mak =3D configure_file( + input: ['default-configs' / target + '.mak', 'Kconfig'], + output: config_devices_mak, + depfile: config_devices_mak + '.d', + capture: true, + command: [minikconf, config_host['CONFIG_MINIKCONF_MODE'], + config_devices_mak, '@DEPFILE@', '@INPUT@', + base_kconfig]) + config_devices_h +=3D {target: custom_target( + target + '-config-devices.h', + input: config_devices_mak, + output: target + '-config-devices.h', + capture: true, + command: [create_config, '@INPUT@'])} + config_devices_mak_list +=3D config_devices_mak + config_target +=3D keyval.load(config_devices_mak) + endif + config_target_mak +=3D {target: config_target} endforeach have_tools =3D 'CONFIG_TOOLS' in config_host have_block =3D have_system or have_tools =20 +grepy =3D find_program('scripts/grepy.sh') +# This configuration is used to build files that are shared by +# multiple binaries, and then extracted out of the "common" +# static_library target. +# +# We do not use all_sources()/all_dependencies(), because it would +# build literally all source files, including devices only used by +# targets that are not built for this compilation. The CONFIG_ALL +# pseudo symbol replaces it. + +if have_system + config_all_devices_mak =3D configure_file( + output: 'config-all-devices.mak', + input: config_devices_mak_list, + capture: true, + command: [grepy, '@INPUT@'], + ) + config_all_devices =3D keyval.load(config_all_devices_mak) + config_all =3D config_all_devices +else + config_all =3D {} +endif +config_all +=3D config_host +config_all +=3D config_all_disas +config_all +=3D { + 'CONFIG_XEN': config_host.has_key('CONFIG_XEN_BACKEND'), + 'CONFIG_SOFTMMU': have_system, + 'CONFIG_USER_ONLY': have_user, + 'CONFIG_ALL': true, +} + # Generators =20 genh =3D [] @@ -175,6 +256,13 @@ qemu_version =3D custom_target('qemu-version.h', build_always_stale: true) genh +=3D qemu_version =20 +config_host_h =3D custom_target('config-host.h', + input: meson.current_build_dir() / 'config-h= ost.mak', + output: 'config-host.h', + capture: true, + command: [create_config, '@INPUT@']) +genh +=3D config_host_h + hxdep =3D [] hx_headers =3D [ ['qemu-options.hx', 'qemu-options.def'], @@ -200,6 +288,16 @@ endforeach util_ss =3D ss.source_set() stub_ss =3D ss.source_set() trace_ss =3D ss.source_set() +common_ss =3D ss.source_set() +softmmu_ss =3D ss.source_set() +user_ss =3D ss.source_set() +bsd_user_ss =3D ss.source_set() +linux_user_ss =3D ss.source_set() +specific_ss =3D ss.source_set() + +hw_arch =3D {} +target_arch =3D {} +target_softmmu_arch =3D {} =20 ############### # Trace files # @@ -308,10 +406,10 @@ subdir('ui') =20 # Build targets from sourcesets =20 -stub_ss =3D stub_ss.apply(config_host, strict: false) +stub_ss =3D stub_ss.apply(config_all, strict: false) =20 util_ss.add_all(trace_ss) -util_ss =3D util_ss.apply(config_host, strict: false) +util_ss =3D util_ss.apply(config_all, strict: false) libqemuutil =3D static_library('qemuutil', sources: util_ss.sources() + stub_ss.sources(= ) + genh, dependencies: [util_ss.dependencies(), m, gli= b, socket]) @@ -322,6 +420,68 @@ subdir('io') subdir('fsdev') subdir('target') =20 +common_ss.add_all(when: 'CONFIG_SOFTMMU', if_true: softmmu_ss) +common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss) + +common_all =3D common_ss.apply(config_all, strict: false) +common_all =3D static_library('common', + build_by_default: false, + sources: common_all.sources() + genh, + dependencies: common_all.dependencies(), + name_suffix: 'fa') + +foreach target : target_dirs + config_target =3D config_target_mak[target] + target_name =3D config_target['TARGET_NAME'] + arch =3D config_target['TARGET_BASE_ARCH'] + arch_srcs =3D [] + + target_inc =3D [include_directories('target' / config_target['TARGET_BAS= E_ARCH'])] + if host_machine.system() =3D=3D 'linux' + target_inc +=3D include_directories('linux-headers', is_system: true) + endif + if target.endswith('-softmmu') + qemu_target_name =3D 'qemu-system-' + target_name + target_type=3D'system' + arch_srcs +=3D config_devices_h[target] + else + target_type=3D'user' + qemu_target_name =3D 'qemu-' + target_name + if 'CONFIG_LINUX_USER' in config_target + base_dir =3D 'linux-user' + target_inc +=3D include_directories('linux-user/host/' / config_host= ['ARCH']) + else + base_dir =3D 'bsd-user' + endif + target_inc +=3D include_directories( + base_dir, + base_dir / config_target['TARGET_ABI_DIR'], + ) + endif + + target_common =3D common_ss.apply(config_target, strict: false) + objects =3D common_all.extract_objects(target_common.sources()) + + # TODO: Change to generator once obj-y goes away + config_target_h =3D custom_target(target + '-config-target.h', + input: meson.current_build_dir() / target / = 'config-target.mak', + output: target + '-config-target.h', + capture: true, + command: [create_config, '@INPUT@']) + + target_specific =3D specific_ss.apply(config_target, strict: false) + arch_srcs +=3D target_specific.sources() + + static_library('qemu-' + target, + sources: arch_srcs + [config_target_h] + genh, + objects: objects, + include_directories: target_inc, + c_args: ['-DNEED_CPU_H', + '-DCONFIG_TARGET=3D"@0@-config-target.h"'.format= (target), + '-DCONFIG_DEVICES=3D"@0@-config-devices.h"'.form= at(target)], + name_suffix: 'fa') +endforeach + # Other build targets if 'CONFIG_GUEST_AGENT' in config_host subdir('qga') diff --git a/rules.mak b/rules.mak index 1aa6394..d8d35f7 100644 --- a/rules.mak +++ b/rules.mak @@ -203,14 +203,6 @@ notempty =3D $(if $1,y,n) # Generate files with tracetool TRACETOOL=3D$(PYTHON) $(SRC_PATH)/scripts/tracetool.py =20 -# Generate timestamp files for .h include files - -config-%.h: config-%.h-timestamp - @cmp $< $@ >/dev/null 2>&1 || cp $< $@ - -config-%.h-timestamp: config-%.mak $(SRC_PATH)/scripts/create_config - $(call quiet-command, sh $(SRC_PATH)/scripts/create_config < $< > $@,"GEN= ","$(TARGET_DIR)config-$*.h") - .PHONY: clean-timestamp clean-timestamp: rm -f *.timestamp diff --git a/scripts/create_config b/scripts/create_config index 6d8f08b..bc82661 100755 --- a/scripts/create_config +++ b/scripts/create_config @@ -1,5 +1,7 @@ #!/bin/sh =20 +test $# -gt 0 && exec < $1 + echo "/* Automatically generated by create_config - do not modify */" =20 while read line; do diff --git a/scripts/grepy.sh b/scripts/grepy.sh new file mode 100755 index 0000000..33c74c6 --- /dev/null +++ b/scripts/grepy.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +grep --no-filename '=3Dy$' "$@" | sort -u diff --git a/softmmu/qtest.c b/softmmu/qtest.c index 5672b75..4e439ca 100644 --- a/softmmu/qtest.c +++ b/softmmu/qtest.c @@ -27,7 +27,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qemu/cutils.h" -#include "config-devices.h" +#include CONFIG_DEVICES #ifdef CONFIG_PSERIES #include "hw/ppc/spapr_rtas.h" #endif diff --git a/util/meson.build b/util/meson.build index 62113ba..9ee7425 100644 --- a/util/meson.build +++ b/util/meson.build @@ -62,7 +62,4 @@ util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-he= lpers.c')) util_ss.add(when: 'CONFIG_POSIX', if_true: files('drm.c')) util_ss.add(files('guest-random.c')) util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) - -if have_user then - util_ss.add(files('selfmap.c')) -endif +util_ss.add(when: 'CONFIG_USER_ONLY', if_true: [files('selfmap.c')]) --=20 1.8.3.1