2015-08-21 07:04:50 +00:00
|
|
|
# Makefile for QEMU - modified for Unicorn engine.
|
|
|
|
|
2019-08-08 18:29:09 +00:00
|
|
|
ifneq ($(words $(subst :, ,$(CURDIR))), 1)
|
|
|
|
$(error main directory cannot contain spaces nor colons)
|
|
|
|
endif
|
|
|
|
|
2015-08-21 07:04:50 +00:00
|
|
|
# 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 \
|
2018-03-05 19:15:55 +00:00
|
|
|
"$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
|
2015-08-21 07:04:50 +00:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2018-07-05 21:35:38 +00:00
|
|
|
CONFIG_SOFTMMU := $(if $(filter %-softmmu,$(TARGET_DIRS)),y)
|
|
|
|
CONFIG_USER_ONLY := $(if $(filter %-user,$(TARGET_DIRS)),y)
|
2015-08-21 07:04:50 +00:00
|
|
|
CONFIG_ALL=y
|
|
|
|
-include config-all-devices.mak
|
|
|
|
|
|
|
|
config-host.mak: $(SRC_PATH)/configure
|
|
|
|
@echo $@ is out-of-date, running configure
|
2019-08-08 21:21:09 +00:00
|
|
|
@./config.status
|
2015-08-21 07:04:50 +00:00
|
|
|
else
|
|
|
|
config-host.mak:
|
|
|
|
ifneq ($(filter-out %clean,$(MAKECMDGOALS)),$(if $(MAKECMDGOALS),,fail))
|
|
|
|
@echo "Please call configure before running make!"
|
|
|
|
@exit 1
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2018-03-09 13:12:41 +00:00
|
|
|
include $(SRC_PATH)/rules.mak
|
|
|
|
|
|
|
|
GENERATED_FILES = config-host.h
|
2018-03-09 15:28:28 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-builtin-types.h qapi/qapi-builtin-types.c
|
|
|
|
GENERATED_FILES += qapi/qapi-types.h qapi/qapi-types.c
|
qapi: Generate separate .h, .c for each module
Our qapi-schema.json is composed of modules connected by include
directives, but the generated code is monolithic all the same: one
qapi-types.h with all the types, one qapi-visit.h with all the
visitors, and so forth. These monolithic headers get included all
over the place. In my "build everything" tree, adding a QAPI type
recompiles about 4800 out of 5100 objects.
We wouldn't write such monolithic headers by hand. It stands to
reason that we shouldn't generate them, either.
Split up generated qapi-types.h to mirror the schema's modular
structure: one header per module. Name the main module's header
qapi-types.h, and sub-module D/B.json's header D/qapi-types-B.h.
Mirror the schema's includes in the headers, so that qapi-types.h gets
you everything exactly as before. If you need less, you can include
one or more of the sub-module headers. To be exploited shortly.
Split up qapi-types.c, qapi-visit.h, qapi-visit.c, qmp-commands.h,
qmp-commands.c, qapi-event.h, qapi-event.c the same way.
qmp-introspect.h, qmp-introspect.c and qapi.texi remain monolithic.
The split of qmp-commands.c duplicates static helper function
qmp_marshal_output_str() in qapi-commands-char.c and
qapi-commands-misc.c. This happens when commands returning the same
type occur in multiple modules. Not worth avoiding.
Since I'm going to rename qapi-event.[ch] to qapi-events.[ch], and
qmp-commands.[ch] to qapi-commands.[ch], name the shards that way
already, to reduce churn. This requires temporary hacks in
commands.py and events.py. Similarly, c_name() must temporarily
be taught to munge '/' in common.py. They'll go away with the rename.
Backports commit 252dc3105fc494182e236e97fe20f2d6b1d652cb from qemu
2018-03-09 14:38:13 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-types-common.h qapi/qapi-types-common.c
|
2018-03-09 15:13:16 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-types-misc.h qapi/qapi-types-misc.c
|
2018-03-09 15:28:28 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-builtin-visit.h qapi/qapi-builtin-visit.c
|
|
|
|
GENERATED_FILES += qapi/qapi-visit.h qapi/qapi-visit.c
|
2018-03-09 15:13:16 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-visit-misc.h qapi/qapi-visit-misc.c
|
qapi: Generate separate .h, .c for each module
Our qapi-schema.json is composed of modules connected by include
directives, but the generated code is monolithic all the same: one
qapi-types.h with all the types, one qapi-visit.h with all the
visitors, and so forth. These monolithic headers get included all
over the place. In my "build everything" tree, adding a QAPI type
recompiles about 4800 out of 5100 objects.
We wouldn't write such monolithic headers by hand. It stands to
reason that we shouldn't generate them, either.
Split up generated qapi-types.h to mirror the schema's modular
structure: one header per module. Name the main module's header
qapi-types.h, and sub-module D/B.json's header D/qapi-types-B.h.
Mirror the schema's includes in the headers, so that qapi-types.h gets
you everything exactly as before. If you need less, you can include
one or more of the sub-module headers. To be exploited shortly.
Split up qapi-types.c, qapi-visit.h, qapi-visit.c, qmp-commands.h,
qmp-commands.c, qapi-event.h, qapi-event.c the same way.
qmp-introspect.h, qmp-introspect.c and qapi.texi remain monolithic.
The split of qmp-commands.c duplicates static helper function
qmp_marshal_output_str() in qapi-commands-char.c and
qapi-commands-misc.c. This happens when commands returning the same
type occur in multiple modules. Not worth avoiding.
Since I'm going to rename qapi-event.[ch] to qapi-events.[ch], and
qmp-commands.[ch] to qapi-commands.[ch], name the shards that way
already, to reduce churn. This requires temporary hacks in
commands.py and events.py. Similarly, c_name() must temporarily
be taught to munge '/' in common.py. They'll go away with the rename.
Backports commit 252dc3105fc494182e236e97fe20f2d6b1d652cb from qemu
2018-03-09 14:38:13 +00:00
|
|
|
GENERATED_FILES += qapi/qapi-visit-common.h qapi/qapi-visit-common.c
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
# Don't try to regenerate Makefile or configure
|
|
|
|
# We don't generate any of them
|
|
|
|
Makefile: ;
|
|
|
|
configure: ;
|
|
|
|
|
2018-02-24 22:03:44 +00:00
|
|
|
.PHONY: all clean cscope distclean install recurse-all FORCE
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
$(call set-vpath, $(SRC_PATH))
|
|
|
|
|
|
|
|
LIBS+=-lz $(LIBS_TOOLS)
|
|
|
|
|
2018-03-08 13:58:03 +00:00
|
|
|
SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) BUILD_DIR=$(BUILD_DIR)
|
2018-07-05 21:35:38 +00:00
|
|
|
SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_DIRS))
|
|
|
|
SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_DIRS))
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
ifeq ($(SUBDIR_DEVICES_MAK),)
|
2019-03-29 23:30:54 +00:00
|
|
|
config-all-devices.mak: config-host.mak
|
2015-08-21 07:04:50 +00:00
|
|
|
$(call quiet-command,echo '# no devices' > $@," GEN $@")
|
|
|
|
else
|
2019-03-29 23:30:54 +00:00
|
|
|
config-all-devices.mak: $(SUBDIR_DEVICES_MAK) config-host.mak
|
2015-08-21 07:04:50 +00:00
|
|
|
$(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
|
|
|
|
$(call quiet-command,$(SHELL) $(SRC_PATH)/scripts/make_device_config.sh $@ $<, " GEN $@")
|
|
|
|
@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; \
|
2018-03-05 19:15:55 +00:00
|
|
|
echo "Run \"$(MAKE) defconfig\" to regenerate."; \
|
2015-08-21 07:04:50 +00:00
|
|
|
rm $@.tmp; \
|
|
|
|
fi; \
|
|
|
|
else \
|
|
|
|
mv $@.tmp $@; \
|
|
|
|
cp -p $@ $@.old; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
defconfig:
|
|
|
|
rm -f config-all-devices.mak $(SUBDIR_DEVICES_MAK)
|
|
|
|
|
|
|
|
ifneq ($(wildcard config-host.mak),)
|
|
|
|
include $(SRC_PATH)/Makefile.objs
|
|
|
|
endif
|
|
|
|
|
|
|
|
dummy := $(call unnest-vars,, \
|
|
|
|
util-obj-y \
|
|
|
|
block-obj-y \
|
|
|
|
block-obj-m \
|
2018-02-15 18:36:09 +00:00
|
|
|
crypto-obj-y \
|
|
|
|
crypto-aes-obj-y \
|
2015-08-21 07:04:50 +00:00
|
|
|
common-obj-y \
|
|
|
|
common-obj-m)
|
|
|
|
|
|
|
|
all: $(TOOLS) $(HELPERS-y) recurse-all modules
|
|
|
|
|
|
|
|
config-host.h: config-host.h-timestamp
|
|
|
|
config-host.h-timestamp: config-host.mak
|
|
|
|
|
Makefile: Rename targets for make recursion
We make a few sub-directories recursively, in particular
$(TARGET_DIRS).
For goal "all", we do it the nice way: "all" has a prerequisite
subdir-T for each T in $(TARGET_DIRS), and T's recipe runs make
recursively. Behaves nicely with -j and -k.
For other goals such as "clean" and "install", the recipe runs make
recursively in a for loop. Ignores -j and -k.
The next commit will fix that for "clean" and "install". This commit
prepares the ground by renaming the targets we use for "all" to
include the goal for the sub-make. This will permit reusing them for
goals other than "all".
Targets subdir-T for T in $(TARGET_DIRS) run "make all" in T. Rename
to T/all, and declare phony.
Targets romsubdir-R for R in $(ROMS) run "make" in pc-bios/R. Default
goal is "all" for all R. Rename to pc-bios/R/all, and declare phony.
The remainder are renamed just for consistency.
Target subdir-dtc runs "make libbft/libfdt.a" in dtc. Rename to
dtc/all, and declare phony.
Target subdir-capstone runs make $(BUILD_DIR)/capstone/$(LIBCAPSTONE)
in $(SRC_PATH)/capstone. Rename to capstone/all, and declare phony.
Target subdir-slirp runs "make" in $(SRC_PATH)/slirp. Default goal is
all, which builds $(BUILD_DIR)/libslirp.a. Rename to slirp/all, and
declare phony.
Backports commit 3b8593eeaa5778ae118f0cc2837e615acd13baeb from qemu
2019-08-08 21:26:46 +00:00
|
|
|
SUBDIR_RULES=$(addsuffix /all, $(TARGET_DIRS))
|
|
|
|
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu/all,$(SUBDIR_RULES))
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
|
2018-02-15 18:36:09 +00:00
|
|
|
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
|
2015-08-21 07:04:50 +00:00
|
|
|
$(SOFTMMU_SUBDIR_RULES): config-all-devices.mak
|
|
|
|
|
Makefile: Rename targets for make recursion
We make a few sub-directories recursively, in particular
$(TARGET_DIRS).
For goal "all", we do it the nice way: "all" has a prerequisite
subdir-T for each T in $(TARGET_DIRS), and T's recipe runs make
recursively. Behaves nicely with -j and -k.
For other goals such as "clean" and "install", the recipe runs make
recursively in a for loop. Ignores -j and -k.
The next commit will fix that for "clean" and "install". This commit
prepares the ground by renaming the targets we use for "all" to
include the goal for the sub-make. This will permit reusing them for
goals other than "all".
Targets subdir-T for T in $(TARGET_DIRS) run "make all" in T. Rename
to T/all, and declare phony.
Targets romsubdir-R for R in $(ROMS) run "make" in pc-bios/R. Default
goal is "all" for all R. Rename to pc-bios/R/all, and declare phony.
The remainder are renamed just for consistency.
Target subdir-dtc runs "make libbft/libfdt.a" in dtc. Rename to
dtc/all, and declare phony.
Target subdir-capstone runs make $(BUILD_DIR)/capstone/$(LIBCAPSTONE)
in $(SRC_PATH)/capstone. Rename to capstone/all, and declare phony.
Target subdir-slirp runs "make" in $(SRC_PATH)/slirp. Default goal is
all, which builds $(BUILD_DIR)/libslirp.a. Rename to slirp/all, and
declare phony.
Backports commit 3b8593eeaa5778ae118f0cc2837e615acd13baeb from qemu
2019-08-08 21:26:46 +00:00
|
|
|
.PHONY: $(SUBDIR_RULES)
|
|
|
|
$(SUBDIR_RULES):
|
|
|
|
$(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $(dir $@) V="$(V)" TARGET_DIR="$(dir $@)" all,)
|
2015-08-21 07:04:50 +00:00
|
|
|
|
2018-03-09 15:28:28 +00:00
|
|
|
$(SUBDIR_RULES): qapi/qapi-types.c qapi/qapi-types.h qapi/qapi-visit.c qapi/qapi-visit.h $(common-obj-y) $(util-obj-y)
|
2015-08-21 07:04:50 +00:00
|
|
|
|
2018-07-05 21:35:38 +00:00
|
|
|
ALL_SUBDIRS=$(TARGET_DIRS)
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
recurse-all: $(SUBDIR_RULES)
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
# Build libraries
|
|
|
|
|
|
|
|
util/module.o-cflags = -D'CONFIG_BLOCK_MODULES=$(block-modules)'
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
|
2018-03-09 13:12:41 +00:00
|
|
|
qapi-py = \
|
|
|
|
$(SRC_PATH)/scripts/qapi/types.py \
|
|
|
|
$(SRC_PATH)/scripts/qapi/visit.py \
|
|
|
|
$(SRC_PATH)/scripts/qapi/common.py \
|
|
|
|
$(SRC_PATH)/scripts/ordereddict.py \
|
|
|
|
$(SRC_PATH)/scripts/qapi-gen.py
|
2015-08-21 07:04:50 +00:00
|
|
|
|
2018-03-09 15:13:16 +00:00
|
|
|
qapi-modules = \
|
2018-03-09 15:28:28 +00:00
|
|
|
$(SRC_PATH)/qapi/qapi-schema.json \
|
2018-03-09 15:13:16 +00:00
|
|
|
$(SRC_PATH)/qapi/common.json \
|
|
|
|
$(SRC_PATH)/qapi/misc.json
|
|
|
|
|
2015-08-21 07:04:50 +00:00
|
|
|
|
2018-03-09 15:28:28 +00:00
|
|
|
qapi/qapi-builtin-types.c qapi/qapi-builtin-types.h \
|
|
|
|
qapi/qapi-types.c qapi/qapi-types.h \
|
qapi: Generate separate .h, .c for each module
Our qapi-schema.json is composed of modules connected by include
directives, but the generated code is monolithic all the same: one
qapi-types.h with all the types, one qapi-visit.h with all the
visitors, and so forth. These monolithic headers get included all
over the place. In my "build everything" tree, adding a QAPI type
recompiles about 4800 out of 5100 objects.
We wouldn't write such monolithic headers by hand. It stands to
reason that we shouldn't generate them, either.
Split up generated qapi-types.h to mirror the schema's modular
structure: one header per module. Name the main module's header
qapi-types.h, and sub-module D/B.json's header D/qapi-types-B.h.
Mirror the schema's includes in the headers, so that qapi-types.h gets
you everything exactly as before. If you need less, you can include
one or more of the sub-module headers. To be exploited shortly.
Split up qapi-types.c, qapi-visit.h, qapi-visit.c, qmp-commands.h,
qmp-commands.c, qapi-event.h, qapi-event.c the same way.
qmp-introspect.h, qmp-introspect.c and qapi.texi remain monolithic.
The split of qmp-commands.c duplicates static helper function
qmp_marshal_output_str() in qapi-commands-char.c and
qapi-commands-misc.c. This happens when commands returning the same
type occur in multiple modules. Not worth avoiding.
Since I'm going to rename qapi-event.[ch] to qapi-events.[ch], and
qmp-commands.[ch] to qapi-commands.[ch], name the shards that way
already, to reduce churn. This requires temporary hacks in
commands.py and events.py. Similarly, c_name() must temporarily
be taught to munge '/' in common.py. They'll go away with the rename.
Backports commit 252dc3105fc494182e236e97fe20f2d6b1d652cb from qemu
2018-03-09 14:38:13 +00:00
|
|
|
qapi/qapi-types-common.c qapi/qapi-types-common.h \
|
2018-03-09 15:13:16 +00:00
|
|
|
qapi/qapi-types-misc.c qapi/qapi-types-misc.h \
|
2018-03-09 15:28:28 +00:00
|
|
|
qapi/qapi-builtin-visit.c qapi/qapi-builtin-visit.h \
|
|
|
|
qapi/qapi-visit.c qapi/qapi-visit.h \
|
qapi: Generate separate .h, .c for each module
Our qapi-schema.json is composed of modules connected by include
directives, but the generated code is monolithic all the same: one
qapi-types.h with all the types, one qapi-visit.h with all the
visitors, and so forth. These monolithic headers get included all
over the place. In my "build everything" tree, adding a QAPI type
recompiles about 4800 out of 5100 objects.
We wouldn't write such monolithic headers by hand. It stands to
reason that we shouldn't generate them, either.
Split up generated qapi-types.h to mirror the schema's modular
structure: one header per module. Name the main module's header
qapi-types.h, and sub-module D/B.json's header D/qapi-types-B.h.
Mirror the schema's includes in the headers, so that qapi-types.h gets
you everything exactly as before. If you need less, you can include
one or more of the sub-module headers. To be exploited shortly.
Split up qapi-types.c, qapi-visit.h, qapi-visit.c, qmp-commands.h,
qmp-commands.c, qapi-event.h, qapi-event.c the same way.
qmp-introspect.h, qmp-introspect.c and qapi.texi remain monolithic.
The split of qmp-commands.c duplicates static helper function
qmp_marshal_output_str() in qapi-commands-char.c and
qapi-commands-misc.c. This happens when commands returning the same
type occur in multiple modules. Not worth avoiding.
Since I'm going to rename qapi-event.[ch] to qapi-events.[ch], and
qmp-commands.[ch] to qapi-commands.[ch], name the shards that way
already, to reduce churn. This requires temporary hacks in
commands.py and events.py. Similarly, c_name() must temporarily
be taught to munge '/' in common.py. They'll go away with the rename.
Backports commit 252dc3105fc494182e236e97fe20f2d6b1d652cb from qemu
2018-03-09 14:38:13 +00:00
|
|
|
qapi/qapi-visit-common.c qapi/qapi-visit-common.h \
|
2018-03-09 15:13:16 +00:00
|
|
|
qapi/qapi-visit-misc.c qapi/qapi-visit-misc.h \
|
2018-03-09 13:12:41 +00:00
|
|
|
qapi-doc.texi: \
|
|
|
|
qapi-gen-timestamp ;
|
|
|
|
qapi-gen-timestamp: $(qapi-modules) $(qapi-py)
|
2018-07-03 03:03:01 +00:00
|
|
|
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \
|
2018-03-09 15:28:28 +00:00
|
|
|
-o "qapi" -b $<, \
|
2018-03-09 13:12:41 +00:00
|
|
|
"GEN","$(@:%-timestamp=%)")
|
|
|
|
@>$@
|
2015-08-21 07:04:50 +00:00
|
|
|
|
|
|
|
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 gen-op-arm.h
|
|
|
|
find . \( -name '*.l[oa]' -o -name '*.so' -o -name '*.dll' -o -name '*.mo' -o -name '*.[oda]' \) -type f -exec rm {} +
|
|
|
|
rm -f $(filter-out %.tlb,$(TOOLS)) $(HELPERS-y) qemu-ga TAGS cscope.* *.pod *~ */*~
|
|
|
|
rm -rf .libs */.libs
|
2018-03-09 13:12:41 +00:00
|
|
|
@# May not be present in GENERATED_FILES
|
|
|
|
rm -f $(foreach f,$(GENERATED_FILES),$(f) $(f)-timestamp)
|
|
|
|
rm -f qapi-gen-timestamp
|
2015-08-21 07:04:50 +00:00
|
|
|
for d in $(ALL_SUBDIRS); do \
|
|
|
|
if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \
|
|
|
|
done
|
|
|
|
|
|
|
|
distclean: clean
|
|
|
|
rm -f config-host.mak config-host.h* config-host.ld qemu-img-cmds.texi qemu-monitor.texi
|
|
|
|
rm -f config-all-devices.mak config-all-disas.mak
|
|
|
|
rm -f config.log
|
2018-07-05 21:35:38 +00:00
|
|
|
for d in $(TARGET_DIRS); do \
|
2015-08-21 07:04:50 +00:00
|
|
|
rm -rf $$d || exit 1 ; \
|
|
|
|
done
|
|
|
|
rm -Rf .sdk
|
|
|
|
|
|
|
|
|
|
|
|
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))
|
2018-03-09 13:12:41 +00:00
|
|
|
Makefile: $(GENERATED_FILES)
|
2015-08-21 07:04:50 +00:00
|
|
|
endif
|
|
|
|
|