1 
   2 # Don't use implicit rules or variables
   3 # we have explicit rules for everything
   4 MAKEFLAGS += -rR
   5 
   6 # Files with this suffixes are final, don't try to generate them
   7 # using implicit rules
   8 %.d:
   9 %.h:
  10 %.c:
  11 %.m:
  12 %.mak:
  13 
  14 # Flags for dependency generation
  15 QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d
  16 
  17 %.o: %.c
  18         $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  CC    $(TARGET_DIR)$@")
  19 
  20 %.o: %.S
  21         $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  AS    $(TARGET_DIR)$@")
  22 
  23 %.o: %.m
  24         $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  OBJC  $(TARGET_DIR)$@")
  25 
  26 LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS),"  LINK  $(TARGET_DIR)$@")
  27 
  28 CTFMERGE_CMD = $(call quiet-command, $(CTFMERGE) -L VERSION -o $@ $(1),"  CTFMERGE  $(TARGET_DIR)$@")
  29 
  30 CTFCONVERT_CMD = $(call quiet-command, CTFCONVERT=$(CTFCONVERT) find ../ -type f -name '*.o' -exec ../ctf.sh '{}' \;)
  31 
  32 ifeq ($(TRACE_BACKEND),dtrace)
  33 ifneq ($(strip $(CONFIG_SOLARIS)),)
  34 %$(EXESUF): %.o
  35         $(call quiet-command, dtrace $(CONFIG_DTRACE_FLAGS) -o trace-dtrace.o -s trace-dtrace.dtrace  -G $^,"  LINK  $(TARGET_DIR)$@.dtrace")
  36         $(call LINK,$^ trace-dtrace.o)
  37 else
  38 %$(EXESUF): %.o
  39         $(call LINK,$^)
  40 endif
  41 else
  42 %$(EXESUF): %.o
  43         $(call LINK,$^)
  44 endif
  45 
  46 %.a:
  47         $(call quiet-command,rm -f $@ && $(AR) rcs $@ $^,"  AR    $(TARGET_DIR)$@")
  48 
  49 quiet-command = $(if $(V),$1,$(if $(2),@echo $2 && $1, @$1))
  50 
  51 # cc-option
  52 # Usage: CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0)
  53 
  54 cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
  55               >/dev/null 2>&1 && echo OK), $2, $3)
  56 
  57 VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.texi
  58 set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1)))
  59 
  60 # find-in-path
  61 # Usage: $(call find-in-path, prog)
  62 # Looks in the PATH if the argument contains no slash, else only considers one
  63 # specific directory.  Returns an # empty string if the program doesn't exist
  64 # there.
  65 find-in-path = $(if $(find-string /, $1), \
  66         $(wildcard $1), \
  67         $(wildcard $(patsubst %, %/$1, $(subst :, ,$(PATH)))))
  68 
  69 # Generate timestamp files for .h include files
  70 
  71 %.h: %.h-timestamp
  72         @test -f $@ || cp $< $@
  73 
  74 %.h-timestamp: %.mak
  75         $(call quiet-command, sh $(SRC_PATH)/scripts/create_config < $< > $@, "  GEN   $*.h")
  76         @cmp $@ $*.h >/dev/null 2>&1 || cp $@ $*.h
  77 
  78 # will delete the target of a rule if commands exit with a nonzero exit status
  79 .DELETE_ON_ERROR: