# we have explicit rules for everything
MAKEFLAGS += -rR
-SHELL = /usr/bin/env bash -o pipefail
+SHELL = bash -o pipefail
# Usage: $(call quiet-command,command and args,"NAME","args to print")
# This will run "command and args", and either:
Makefile: .git-submodule-status
.PHONY: git-submodule-update
-
-git_module_status := $(shell \
- cd '$(SRC_PATH)' && \
- GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
- echo $$?; \
-)
-
-ifeq (1,$(git_module_status))
-ifeq (no,$(GIT_UPDATE))
-git-submodule-update:
- $(call quiet-command, \
- echo && \
- echo "GIT submodule checkout is out of date. Please run" && \
- echo " scripts/git-submodule.sh update $(GIT_SUBMODULES)" && \
- echo "from the source directory checkout $(SRC_PATH)" && \
- echo && \
- exit 1)
-else
git-submodule-update:
+ifneq ($(GIT_SUBMODULES_ACTION),ignore)
$(call quiet-command, \
- (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
- "GIT","$(GIT_SUBMODULES)")
-endif
+ (GIT="$(GIT)" "$(SRC_PATH)/scripts/git-submodule.sh" $(GIT_SUBMODULES_ACTION) $(GIT_SUBMODULES)), \
+ "GIT","$(GIT_SUBMODULES)")
endif
# 0. ensure the build tree is okay
# 4. Rules to bridge to other makefiles
ifneq ($(NINJA),)
-MAKE.n = $(findstring n,$(firstword $(MAKEFLAGS)))
-MAKE.k = $(findstring k,$(firstword $(MAKEFLAGS)))
-MAKE.q = $(findstring q,$(firstword $(MAKEFLAGS)))
+# Filter out long options to avoid flags like --no-print-directory which
+# may result in false positive match for MAKE.n
+MAKE.n = $(findstring n,$(firstword $(filter-out --%,$(MAKEFLAGS))))
+MAKE.k = $(findstring k,$(firstword $(filter-out --%,$(MAKEFLAGS))))
+MAKE.q = $(findstring q,$(firstword $(filter-out --%,$(MAKEFLAGS))))
MAKE.nq = $(if $(word 2, $(MAKE.n) $(MAKE.q)),nq)
NINJAFLAGS = $(if $V,-v) $(if $(MAKE.n), -n) $(if $(MAKE.k), -k0) \
$(filter-out -j, $(lastword -j1 $(filter -l% -j%, $(MAKEFLAGS)))) \
# --output-sync line.
run-ninja: config-host.mak
ifneq ($(filter $(ninja-targets), $(ninja-cmd-goals)),)
- +$(quiet-@)$(if $(MAKE.nq),@:, $(NINJA) \
+ +$(quiet-@)$(if $(MAKE.nq),@:, $(NINJA) -d keepdepfile \
$(NINJAFLAGS) $(sort $(filter $(ninja-targets), $(ninja-cmd-goals))) | cat)
endif
endif
distclean: clean
-$(quiet-@)test -f build.ninja && $(NINJA) $(NINJAFLAGS) -t clean -g || :
- rm -f config-host.mak config-host.h*
+ rm -f config-host.mak config-host.h* config-poison.h
rm -f tests/tcg/config-*.mak
rm -f config-all-disas.mak config.status
- rm -f 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
rm -f *-config-target.h *-config-devices.mak *-config-devices.h
.PHONY: TAGS
TAGS:
- rm -f "$(SRC_PATH)/"TAGS
- $(find-src-path) -exec etags -f "$(SRC_PATH)/"TAGS --append {} +
+ $(call quiet-command, \
+ rm -f "$(SRC_PATH)/"TAGS, \
+ "TAGS", "Remove old $@")
+ $(call quiet-command, \
+ $(find-src-path) -exec etags \
+ -f "$(SRC_PATH)/"TAGS --append {} +, \
+ "TAGS", "Re-index $(SRC_PATH)")
.PHONY: cscope
cscope:
- rm -f "$(SRC_PATH)"/cscope.*
- $(find-src-path) -print | sed -e 's,^\./,,' > "$(SRC_PATH)/cscope.files"
- cscope -b -i"$(SRC_PATH)/cscope.files" -f"$(SRC_PATH)"/cscope.out
+ $(call quiet-command, \
+ rm -f "$(SRC_PATH)/"cscope.* , \
+ "cscope", "Remove old $@ files")
+ $(call quiet-command, \
+ ($(find-src-path) -print | sed -e 's,^\./,,' \
+ > "$(SRC_PATH)/cscope.files"), \
+ "cscope", "Create file list")
+ $(call quiet-command, \
+ cscope -b -i"$(SRC_PATH)/cscope.files" \
+ -f"$(SRC_PATH)"/cscope.out, \
+ "cscope", "Re-index $(SRC_PATH)")
# Needed by "meson install"
export DESTDIR
@echo 'Test targets:'
$(call print-help,check,Run all tests (check-help for details))
$(call print-help,bench,Run all benchmarks)
- $(call print-help,docker,Help about targets running tests inside containers)
+ $(call print-help,docker-help,Help about targets running tests inside containers)
$(call print-help,vm-help,Help about targets running tests inside VM)
@echo ''
@echo 'Documentation targets:'
ifdef CONFIG_WIN32
@echo 'Windows targets:'
$(call print-help,installer,Build NSIS-based installer for QEMU)
-ifdef CONFIG_QGA_MSI
$(call print-help,msi,Build MSI-based installer for qemu-ga)
-endif
@echo ''
endif
$(call print-help,$(MAKE) [targets],(quiet build, default))