On 07/29/2017 06:30 AM, Peter Maydell wrote: > This happens because we have a rule that says > "Makefile: $(GENERATED_FILES)" > which is how we ensure that the autogenerated header > files are always built before any .c file is compiled. > The unfortunate side effect is that we rebuild the > generated files before processing *any* makefile > target, even those like 'clean' and 'help' that > don't actually require them. > > I did once have a go at fixing this some years back: > http://patchwork.ozlabs.org/patch/365288/ > but as you'll note from the last comment by me > in that mail thread it had a fatal flaw for > the "build from clean" case...
It's now getting worse, compiling dtc + capstone :) $ ./configure > /dev/null && time make help GEN aarch64-softmmu/config-devices.mak.tmp GEN aarch64-softmmu/config-devices.mak GEN alpha-softmmu/config-devices.mak.tmp GEN alpha-softmmu/config-devices.mak GEN arm-softmmu/config-devices.mak.tmp GEN arm-softmmu/config-devices.mak GEN cris-softmmu/config-devices.mak.tmp GEN cris-softmmu/config-devices.mak GEN i386-softmmu/config-devices.mak.tmp GEN i386-softmmu/config-devices.mak GEN lm32-softmmu/config-devices.mak.tmp GEN lm32-softmmu/config-devices.mak GEN m68k-softmmu/config-devices.mak.tmp GEN m68k-softmmu/config-devices.mak GEN microblaze-softmmu/config-devices.mak.tmp GEN microblaze-softmmu/config-devices.mak GEN microblazeel-softmmu/config-devices.mak.tmp GEN microblazeel-softmmu/config-devices.mak GEN mips-softmmu/config-devices.mak.tmp GEN mips-softmmu/config-devices.mak GEN mips64-softmmu/config-devices.mak.tmp GEN mips64-softmmu/config-devices.mak GEN mips64el-softmmu/config-devices.mak.tmp GEN mips64el-softmmu/config-devices.mak GEN mipsel-softmmu/config-devices.mak.tmp GEN mipsel-softmmu/config-devices.mak GEN moxie-softmmu/config-devices.mak.tmp GEN moxie-softmmu/config-devices.mak GEN nios2-softmmu/config-devices.mak.tmp GEN nios2-softmmu/config-devices.mak GEN or1k-softmmu/config-devices.mak.tmp GEN or1k-softmmu/config-devices.mak GEN ppc-softmmu/config-devices.mak.tmp GEN ppc-softmmu/config-devices.mak GEN ppc64-softmmu/config-devices.mak.tmp GEN ppc64-softmmu/config-devices.mak GEN ppcemb-softmmu/config-devices.mak.tmp GEN ppcemb-softmmu/config-devices.mak GEN s390x-softmmu/config-devices.mak.tmp GEN s390x-softmmu/config-devices.mak GEN sh4-softmmu/config-devices.mak.tmp GEN sh4-softmmu/config-devices.mak GEN sh4eb-softmmu/config-devices.mak.tmp GEN sh4eb-softmmu/config-devices.mak GEN sparc-softmmu/config-devices.mak.tmp GEN sparc-softmmu/config-devices.mak GEN sparc64-softmmu/config-devices.mak.tmp GEN sparc64-softmmu/config-devices.mak GEN tricore-softmmu/config-devices.mak.tmp GEN tricore-softmmu/config-devices.mak GEN unicore32-softmmu/config-devices.mak.tmp GEN unicore32-softmmu/config-devices.mak GEN x86_64-softmmu/config-devices.mak.tmp GEN x86_64-softmmu/config-devices.mak GEN xtensa-softmmu/config-devices.mak.tmp GEN xtensa-softmmu/config-devices.mak GEN xtensaeb-softmmu/config-devices.mak.tmp GEN xtensaeb-softmmu/config-devices.mak GEN aarch64-linux-user/config-devices.mak.tmp GEN aarch64-linux-user/config-devices.mak GEN alpha-linux-user/config-devices.mak.tmp GEN alpha-linux-user/config-devices.mak GEN arm-linux-user/config-devices.mak.tmp GEN arm-linux-user/config-devices.mak GEN armeb-linux-user/config-devices.mak.tmp GEN armeb-linux-user/config-devices.mak GEN cris-linux-user/config-devices.mak.tmp GEN cris-linux-user/config-devices.mak GEN hppa-linux-user/config-devices.mak.tmp GEN hppa-linux-user/config-devices.mak GEN i386-linux-user/config-devices.mak.tmp GEN i386-linux-user/config-devices.mak GEN m68k-linux-user/config-devices.mak.tmp GEN m68k-linux-user/config-devices.mak GEN microblaze-linux-user/config-devices.mak.tmp GEN microblaze-linux-user/config-devices.mak GEN microblazeel-linux-user/config-devices.mak.tmp GEN microblazeel-linux-user/config-devices.mak GEN mips-linux-user/config-devices.mak.tmp GEN mips-linux-user/config-devices.mak GEN mips64-linux-user/config-devices.mak.tmp GEN mips64-linux-user/config-devices.mak GEN mips64el-linux-user/config-devices.mak.tmp GEN mips64el-linux-user/config-devices.mak GEN mipsel-linux-user/config-devices.mak.tmp GEN mipsel-linux-user/config-devices.mak GEN mipsn32-linux-user/config-devices.mak.tmp GEN mipsn32-linux-user/config-devices.mak GEN mipsn32el-linux-user/config-devices.mak.tmp GEN mipsn32el-linux-user/config-devices.mak GEN nios2-linux-user/config-devices.mak.tmp GEN nios2-linux-user/config-devices.mak GEN or1k-linux-user/config-devices.mak.tmp GEN or1k-linux-user/config-devices.mak GEN ppc-linux-user/config-devices.mak.tmp GEN ppc-linux-user/config-devices.mak GEN ppc64-linux-user/config-devices.mak.tmp GEN ppc64-linux-user/config-devices.mak GEN ppc64abi32-linux-user/config-devices.mak.tmp GEN ppc64abi32-linux-user/config-devices.mak GEN ppc64le-linux-user/config-devices.mak.tmp GEN ppc64le-linux-user/config-devices.mak GEN s390x-linux-user/config-devices.mak.tmp GEN s390x-linux-user/config-devices.mak GEN sh4-linux-user/config-devices.mak.tmp GEN sh4-linux-user/config-devices.mak GEN sh4eb-linux-user/config-devices.mak.tmp GEN sh4eb-linux-user/config-devices.mak GEN sparc-linux-user/config-devices.mak.tmp GEN sparc-linux-user/config-devices.mak GEN sparc32plus-linux-user/config-devices.mak.tmp GEN sparc32plus-linux-user/config-devices.mak GEN sparc64-linux-user/config-devices.mak.tmp GEN sparc64-linux-user/config-devices.mak GEN tilegx-linux-user/config-devices.mak.tmp GEN tilegx-linux-user/config-devices.mak GEN x86_64-linux-user/config-devices.mak.tmp GEN x86_64-linux-user/config-devices.mak GEN config-all-devices.mak GEN config-host.h mkdir -p dtc/libfdt mkdir -p dtc/tests DEP dtc/tests/dumptrees.c DEP dtc/tests/trees.S DEP dtc/tests/testutils.c DEP dtc/tests/value-labels.c DEP dtc/tests/asm_tree_dump.c DEP dtc/tests/truncated_property.c DEP dtc/tests/check_path.c DEP dtc/tests/overlay_bad_fixup.c DEP dtc/tests/overlay.c DEP dtc/tests/subnode_iterate.c DEP dtc/tests/property_iterate.c DEP dtc/tests/integer-expressions.c DEP dtc/tests/utilfdt_test.c DEP dtc/tests/path_offset_aliases.c DEP dtc/tests/add_subnode_with_nops.c DEP dtc/tests/dtbs_equal_unordered.c DEP dtc/tests/dtb_reverse.c DEP dtc/tests/dtbs_equal_ordered.c DEP dtc/tests/extra-terminating-null.c DEP dtc/tests/incbin.c DEP dtc/tests/boot-cpuid.c DEP dtc/tests/phandle_format.c DEP dtc/tests/path-references.c DEP dtc/tests/references.c DEP dtc/tests/string_escapes.c DEP dtc/tests/propname_escapes.c DEP dtc/tests/appendprop2.c DEP dtc/tests/appendprop1.c DEP dtc/tests/del_node.c DEP dtc/tests/del_property.c DEP dtc/tests/setprop.c DEP dtc/tests/set_name.c DEP dtc/tests/rw_tree1.c DEP dtc/tests/open_pack.c DEP dtc/tests/nopulate.c DEP dtc/tests/mangle-layout.c DEP dtc/tests/move_and_save.c DEP dtc/tests/sw_tree1.c DEP dtc/tests/nop_node.c DEP dtc/tests/nop_property.c DEP dtc/tests/setprop_inplace.c DEP dtc/tests/stringlist.c DEP dtc/tests/addr_size_cells.c DEP dtc/tests/notfound.c DEP dtc/tests/sized_cells.c DEP dtc/tests/char_literal.c DEP dtc/tests/get_alias.c DEP dtc/tests/node_offset_by_compatible.c DEP dtc/tests/node_check_compatible.c DEP dtc/tests/node_offset_by_phandle.c DEP dtc/tests/node_offset_by_prop_value.c DEP dtc/tests/parent_offset.c DEP dtc/tests/supernode_atdepth_offset.c DEP dtc/tests/get_path.c DEP dtc/tests/get_phandle.c DEP dtc/tests/getprop.c DEP dtc/tests/get_name.c DEP dtc/tests/path_offset.c DEP dtc/tests/subnode_offset.c DEP dtc/tests/find_property.c DEP dtc/tests/root_node.c DEP dtc/tests/get_mem_rsv.c DEP dtc/libfdt/fdt_overlay.c DEP dtc/libfdt/fdt_addresses.c DEP dtc/libfdt/fdt_empty_tree.c DEP dtc/libfdt/fdt_strerror.c DEP dtc/libfdt/fdt_rw.c DEP dtc/libfdt/fdt_sw.c DEP dtc/libfdt/fdt_wip.c DEP dtc/libfdt/fdt_ro.c DEP dtc/libfdt/fdt.c DEP dtc/util.c DEP dtc/fdtput.c DEP dtc/fdtget.c DEP dtc/fdtdump.c LEX convert-dtsv0-lexer.lex.c make[1]: flex: Command not found DEP dtc/srcpos.c BISON dtc-parser.tab.c make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found DEP dtc/treesource.c DEP dtc/livetree.c DEP dtc/fstree.c DEP dtc/flattree.c DEP dtc/dtc.c DEP dtc/data.c DEP dtc/checks.c CHK version_gen.h UPD version_gen.h DEP dtc/util.c LEX convert-dtsv0-lexer.lex.c make[1]: flex: Command not found BISON dtc-parser.tab.c make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found LEX convert-dtsv0-lexer.lex.c make[1]: flex: Command not found BISON dtc-parser.tab.c make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found CC libfdt/fdt.o CC libfdt/fdt_ro.o CC libfdt/fdt_wip.o CC libfdt/fdt_sw.o CC libfdt/fdt_rw.o CC libfdt/fdt_strerror.o CC libfdt/fdt_empty_tree.o CC libfdt/fdt_addresses.o CC libfdt/fdt_overlay.o AR libfdt/libfdt.a ar: creating libfdt/libfdt.a a - libfdt/fdt.o a - libfdt/fdt_ro.o a - libfdt/fdt_wip.o a - libfdt/fdt_sw.o a - libfdt/fdt_rw.o a - libfdt/fdt_strerror.o a - libfdt/fdt_empty_tree.o a - libfdt/fdt_addresses.o a - libfdt/fdt_overlay.o CC cs.o CC utils.o CC SStream.o CC MCInstrDesc.o CC MCRegisterInfo.o CC arch/ARM/ARMDisassembler.o CC arch/ARM/ARMInstPrinter.o CC arch/ARM/ARMMapping.o CC arch/ARM/ARMModule.o CC arch/AArch64/AArch64BaseInfo.o CC arch/AArch64/AArch64Disassembler.o CC arch/AArch64/AArch64InstPrinter.o CC arch/AArch64/AArch64Mapping.o CC arch/AArch64/AArch64Module.o CC arch/Mips/MipsDisassembler.o CC arch/Mips/MipsInstPrinter.o CC arch/Mips/MipsMapping.o CC arch/Mips/MipsModule.o CC arch/PowerPC/PPCDisassembler.o CC arch/PowerPC/PPCInstPrinter.o CC arch/PowerPC/PPCMapping.o CC arch/PowerPC/PPCModule.o CC arch/Sparc/SparcDisassembler.o CC arch/Sparc/SparcInstPrinter.o CC arch/Sparc/SparcMapping.o CC arch/Sparc/SparcModule.o CC arch/SystemZ/SystemZDisassembler.o CC arch/SystemZ/SystemZInstPrinter.o CC arch/SystemZ/SystemZMapping.o CC arch/SystemZ/SystemZModule.o CC arch/SystemZ/SystemZMCTargetDesc.o CC arch/X86/X86DisassemblerDecoder.o CC arch/X86/X86Disassembler.o CC arch/X86/X86IntelInstPrinter.o CC arch/X86/X86ATTInstPrinter.o CC arch/X86/X86Mapping.o CC arch/X86/X86Module.o CC arch/XCore/XCoreDisassembler.o CC arch/XCore/XCoreInstPrinter.o CC arch/XCore/XCoreMapping.o CC arch/XCore/XCoreModule.o CC MCInst.o AR libcapstone.a ar: creating capstone/libcapstone.a GEN qemu-options.def GEN qmp-commands.h GEN qapi-types.h GEN qapi-visit.h GEN qapi-event.h GEN qmp-marshal.c GEN qapi-types.c GEN qapi-visit.c GEN qapi-event.c GEN qmp-introspect.h GEN qmp-introspect.c GEN trace/generated-tcg-tracers.h GEN trace/generated-helpers-wrappers.h GEN trace/generated-helpers.h GEN trace/generated-helpers.c GEN module_block.h GEN ui/input-keymap-linux-to-qcode.c GEN ui/input-keymap-qcode-to-qnum.c GEN ui/input-keymap-qnum-to-qcode.c GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h GEN tests/test-qapi-event.h GEN tests/test-qmp-introspect.h GEN trace-root.h GEN util/trace.h GEN crypto/trace.h GEN io/trace.h GEN migration/trace.h GEN block/trace.h GEN chardev/trace.h GEN hw/block/trace.h GEN hw/block/dataplane/trace.h GEN hw/char/trace.h GEN hw/intc/trace.h GEN hw/net/trace.h GEN hw/virtio/trace.h GEN hw/audio/trace.h GEN hw/misc/trace.h GEN hw/usb/trace.h GEN hw/scsi/trace.h GEN hw/nvram/trace.h GEN hw/display/trace.h GEN hw/input/trace.h GEN hw/timer/trace.h GEN hw/dma/trace.h GEN hw/sparc/trace.h GEN hw/sd/trace.h GEN hw/isa/trace.h GEN hw/mem/trace.h GEN hw/i386/trace.h GEN hw/i386/xen/trace.h GEN hw/9pfs/trace.h GEN hw/ppc/trace.h GEN hw/pci/trace.h GEN hw/s390x/trace.h GEN hw/vfio/trace.h GEN hw/acpi/trace.h GEN hw/arm/trace.h GEN hw/alpha/trace.h GEN hw/xen/trace.h GEN hw/ide/trace.h GEN ui/trace.h GEN audio/trace.h GEN net/trace.h GEN target/arm/trace.h GEN target/i386/trace.h GEN target/mips/trace.h GEN target/sparc/trace.h GEN target/s390x/trace.h GEN target/ppc/trace.h GEN qom/trace.h GEN linux-user/trace.h GEN qapi/trace.h GEN accel/tcg/trace.h GEN accel/kvm/trace.h GEN nbd/trace.h GEN scsi/trace.h GEN trace-root.c GEN util/trace.c GEN crypto/trace.c GEN io/trace.c GEN migration/trace.c GEN block/trace.c GEN chardev/trace.c GEN hw/block/trace.c GEN hw/block/dataplane/trace.c GEN hw/char/trace.c GEN hw/intc/trace.c GEN hw/net/trace.c GEN hw/virtio/trace.c GEN hw/audio/trace.c GEN hw/misc/trace.c GEN hw/usb/trace.c GEN hw/scsi/trace.c GEN hw/nvram/trace.c GEN hw/display/trace.c GEN hw/input/trace.c GEN hw/timer/trace.c GEN hw/dma/trace.c GEN hw/sparc/trace.c GEN hw/sd/trace.c GEN hw/isa/trace.c GEN hw/mem/trace.c GEN hw/i386/trace.c GEN hw/i386/xen/trace.c GEN hw/9pfs/trace.c GEN hw/ppc/trace.c GEN hw/pci/trace.c GEN hw/s390x/trace.c GEN hw/vfio/trace.c GEN hw/acpi/trace.c GEN hw/arm/trace.c GEN hw/alpha/trace.c GEN hw/xen/trace.c GEN hw/ide/trace.c GEN ui/trace.c GEN audio/trace.c GEN net/trace.c GEN target/arm/trace.c GEN target/i386/trace.c GEN target/mips/trace.c GEN target/sparc/trace.c GEN target/s390x/trace.c GEN target/ppc/trace.c GEN qom/trace.c GEN linux-user/trace.c GEN qapi/trace.c GEN accel/tcg/trace.c GEN accel/kvm/trace.c GEN nbd/trace.c GEN scsi/trace.c mkdir -p dtc/libfdt mkdir -p dtc/tests LEX convert-dtsv0-lexer.lex.c make[1]: flex: Command not found BISON dtc-parser.tab.c make[1]: bison: Command not found LEX dtc-lexer.lex.c make[1]: flex: Command not found make[1]: 'capstone/libcapstone.a' is up to date. Generic targets: all - Build all dir/file.o - Build specified target only install - Install QEMU, documentation and tools ctags/TAGS - Generate tags file for editors cscope - Generate cscope index Architecture specific targets: subdir-aarch64-softmmu - Build for aarch64-softmmu subdir-alpha-softmmu - Build for alpha-softmmu subdir-arm-softmmu - Build for arm-softmmu subdir-cris-softmmu - Build for cris-softmmu subdir-i386-softmmu - Build for i386-softmmu subdir-lm32-softmmu - Build for lm32-softmmu subdir-m68k-softmmu - Build for m68k-softmmu subdir-microblaze-softmmu - Build for microblaze-softmmu subdir-microblazeel-softmmu - Build for microblazeel-softmmu subdir-mips-softmmu - Build for mips-softmmu subdir-mips64-softmmu - Build for mips64-softmmu subdir-mips64el-softmmu - Build for mips64el-softmmu subdir-mipsel-softmmu - Build for mipsel-softmmu subdir-moxie-softmmu - Build for moxie-softmmu subdir-nios2-softmmu - Build for nios2-softmmu subdir-or1k-softmmu - Build for or1k-softmmu subdir-ppc-softmmu - Build for ppc-softmmu subdir-ppc64-softmmu - Build for ppc64-softmmu subdir-ppcemb-softmmu - Build for ppcemb-softmmu subdir-s390x-softmmu - Build for s390x-softmmu subdir-sh4-softmmu - Build for sh4-softmmu subdir-sh4eb-softmmu - Build for sh4eb-softmmu subdir-sparc-softmmu - Build for sparc-softmmu subdir-sparc64-softmmu - Build for sparc64-softmmu subdir-tricore-softmmu - Build for tricore-softmmu subdir-unicore32-softmmu - Build for unicore32-softmmu subdir-x86_64-softmmu - Build for x86_64-softmmu subdir-xtensa-softmmu - Build for xtensa-softmmu subdir-xtensaeb-softmmu - Build for xtensaeb-softmmu subdir-aarch64-linux-user - Build for aarch64-linux-user subdir-alpha-linux-user - Build for alpha-linux-user subdir-arm-linux-user - Build for arm-linux-user subdir-armeb-linux-user - Build for armeb-linux-user subdir-cris-linux-user - Build for cris-linux-user subdir-hppa-linux-user - Build for hppa-linux-user subdir-i386-linux-user - Build for i386-linux-user subdir-m68k-linux-user - Build for m68k-linux-user subdir-microblaze-linux-user - Build for microblaze-linux-user subdir-microblazeel-linux-user - Build for microblazeel-linux-user subdir-mips-linux-user - Build for mips-linux-user subdir-mips64-linux-user - Build for mips64-linux-user subdir-mips64el-linux-user - Build for mips64el-linux-user subdir-mipsel-linux-user - Build for mipsel-linux-user subdir-mipsn32-linux-user - Build for mipsn32-linux-user subdir-mipsn32el-linux-user - Build for mipsn32el-linux-user subdir-nios2-linux-user - Build for nios2-linux-user subdir-or1k-linux-user - Build for or1k-linux-user subdir-ppc-linux-user - Build for ppc-linux-user subdir-ppc64-linux-user - Build for ppc64-linux-user subdir-ppc64abi32-linux-user - Build for ppc64abi32-linux-user subdir-ppc64le-linux-user - Build for ppc64le-linux-user subdir-s390x-linux-user - Build for s390x-linux-user subdir-sh4-linux-user - Build for sh4-linux-user subdir-sh4eb-linux-user - Build for sh4eb-linux-user subdir-sparc-linux-user - Build for sparc-linux-user subdir-sparc32plus-linux-user - Build for sparc32plus-linux-user subdir-sparc64-linux-user - Build for sparc64-linux-user subdir-tilegx-linux-user - Build for tilegx-linux-user subdir-x86_64-linux-user - Build for x86_64-linux-user Cleaning targets: clean - Remove most generated files but keep the config distclean - Remove all generated files dist - Build a distributable tarball Test targets: check - Run all tests (check-help for details) docker - Help about targets running tests inside Docker containers vm-test - Help about targets running tests inside VM Documentation targets: html info pdf txt - Build documentation in specified format make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build real 0m33.636s user 0m30.637s sys 0m3.285s