2015-08-21 10:04:50 +03:00
|
|
|
# Makefile for QEMU - modified for Unicorn engine.
|
|
|
|
|
|
|
|
# Always point to the root of the build tree (needs GNU make).
|
|
|
|
BUILD_DIR=$(CURDIR)
|
|
|
|
|
|
|
|
# All following code might depend on configuration variables
|
|
|
|
ifneq ($(wildcard config-host.mak),)
|
|
|
|
# Put the all: rule here so that config-host.mak can contain dependencies.
|
|
|
|
all:
|
|
|
|
include config-host.mak
|
|
|
|
|
|
|
|
# Check that we're not trying to do an out-of-tree build from
|
|
|
|
# a tree that's been used for an in-tree build.
|
|
|
|
ifneq ($(realpath $(SRC_PATH)),$(realpath .))
|
|
|
|
ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
|
|
|
|
$(error This is an out of tree build but your source tree ($(SRC_PATH)) \
|
|
|
|
seems to have been used for an in-tree build. You can fix this by running \
|
|
|
|
"make distclean && rm -rf *-linux-user *-softmmu" in your source tree)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
|
|
|
|
-include config-all-devices.mak
|
|
|
|
|
|
|
|
include $(SRC_PATH)/rules.mak
|
|
|
|
config-host.mak: $(SRC_PATH)/configure
|
|
|
|
@echo $@ is out-of-date, running configure
|
|
|
|
else
|
|
|
|
config-host.mak:
|
|
|
|
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
|
|
|
@echo "Please call configure before running make!"
|
|
|
|
@exit 1
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
GENERATED_HEADERS = config-host.h
|
|
|
|
GENERATED_HEADERS += qapi-types.h qapi-visit.h
|
|
|
|
GENERATED_SOURCES += qapi-types.c qapi-visit.c
|
|
|
|
|
|
|
|
# Don't try to regenerate Makefile or configure
|
|
|
|
# We don't generate any of them
|
|
|
|
Makefile: ;
|
|
|
|
configure: ;
|
|
|
|
|
2020-04-24 10:34:06 +03:00
|
|
|
.PHONY: all clean cscope distclean recurse-all
|
2015-08-21 10:04:50 +03:00
|
|
|
|
|
|
|
$(call set-vpath, $(SRC_PATH))
|
|
|
|
|
|
|
|
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory) BUILD_DIR=$(BUILD_DIR)
|
|
|
|
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
|
|
|
|
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
|
|
|
|
|
|
|
|
ifeq ($(SUBDIR_DEVICES_MAK),)
|
|
|
|
config-all-devices.mak:
|
|
|
|
$(call quiet-command,echo '# no devices' > $@," GEN $@")
|
|
|
|
else
|
|
|
|
config-all-devices.mak: $(SUBDIR_DEVICES_MAK)
|
|
|
|
$(call quiet-command, sed -n \
|
|
|
|
's|^\([^=]*\)=\(.*\)$$|\1:=$$(findstring y,$$(\1)\2)|p' \
|
|
|
|
$(SUBDIR_DEVICES_MAK) | sort -u > $@, \
|
|
|
|
" GEN $@")
|
|
|
|
endif
|
|
|
|
|
|
|
|
-include $(SUBDIR_DEVICES_MAK_DEP)
|
|
|
|
|
|
|
|
%/config-devices.mak: default-configs/%.mak
|
2020-04-28 04:39:10 +03:00
|
|
|
$(call quiet-command, cp $< $@, " GEN $@")
|
2015-08-21 10:04:50 +03:00
|
|
|
|
|
|
|
ifneq ($(wildcard config-host.mak),)
|
|
|
|
include $(SRC_PATH)/Makefile.objs
|
|
|
|
endif
|
|
|
|
|
2020-04-27 21:38:51 +03:00
|
|
|
dummy := $(call unnest-vars,,util-obj-y common-obj-y)
|
2015-08-21 10:04:50 +03:00
|
|
|
|
2020-04-28 08:30:18 +03:00
|
|
|
all: recurse-all
|
2015-08-21 10:04:50 +03:00
|
|
|
|
|
|
|
config-host.h: config-host.h-timestamp
|
|
|
|
config-host.h-timestamp: config-host.mak
|
|
|
|
|
|
|
|
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
|
|
|
|
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))
|
|
|
|
|
|
|
|
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
|
|
|
|
|
|
|
|
subdir-%:
|
|
|
|
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,)
|
|
|
|
|
|
|
|
$(SUBDIR_RULES): qapi-types.c qapi-types.h qapi-visit.c qapi-visit.h $(common-obj-y) $(util-obj-y)
|
|
|
|
|
|
|
|
recurse-all: $(SUBDIR_RULES)
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
gen-out-type = $(subst .,-,$(suffix $@))
|
|
|
|
|
|
|
|
qapi-py = $(SRC_PATH)/scripts/qapi.py $(SRC_PATH)/scripts/ordereddict.py
|
|
|
|
|
|
|
|
qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json
|
|
|
|
|
|
|
|
qapi-types.c qapi-types.h :\
|
|
|
|
$(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py)
|
|
|
|
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-types.py \
|
|
|
|
$(gen-out-type) -o "." -b -i $<, \
|
|
|
|
" GEN $@")
|
|
|
|
qapi-visit.c qapi-visit.h :\
|
|
|
|
$(qapi-modules) $(SRC_PATH)/scripts/qapi-visit.py $(qapi-py)
|
|
|
|
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-visit.py \
|
|
|
|
$(gen-out-type) -o "." -b -i $<, \
|
|
|
|
" GEN $@")
|
|
|
|
|
|
|
|
clean:
|
|
|
|
find . \( -name '*.l[oa]' -o -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
|
2020-04-28 08:30:18 +03:00
|
|
|
rm -f TAGS cscope.* *~ */*~
|
2015-08-21 10:04:50 +03:00
|
|
|
@# May not be present in GENERATED_HEADERS
|
|
|
|
rm -f $(foreach f,$(GENERATED_HEADERS),$(f) $(f)-timestamp)
|
|
|
|
rm -f $(foreach f,$(GENERATED_SOURCES),$(f) $(f)-timestamp)
|
2020-04-28 08:30:18 +03:00
|
|
|
for d in $(TARGET_DIRS); do \
|
2015-08-21 10:04:50 +03:00
|
|
|
if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
|
|
|
|
done
|
|
|
|
|
|
|
|
distclean: clean
|
2020-04-28 08:30:18 +03:00
|
|
|
rm -f config-host.mak config-host.h*
|
|
|
|
rm -f config-all-devices.mak
|
2015-08-21 10:04:50 +03:00
|
|
|
rm -f config.log
|
|
|
|
for d in $(TARGET_DIRS); do \
|
|
|
|
rm -rf $$d || exit 1 ; \
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
cscope:
|
|
|
|
rm -f ./cscope.*
|
|
|
|
find "$(SRC_PATH)" -name "*.[chsS]" -print | sed 's,^\./,,' > ./cscope.files
|
|
|
|
cscope -b
|
|
|
|
|
|
|
|
|
|
|
|
# Add a dependency on the generated files, so that they are always
|
|
|
|
# rebuilt before other object files
|
|
|
|
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
|
|
|
Makefile: $(GENERATED_HEADERS)
|
|
|
|
endif
|
|
|
|
|