| ifneq ($(O),) |
| ifeq ($(origin O), command line) |
| dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),) |
| ABSOLUTE_O := $(shell cd $(O) ; pwd) |
| OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/) |
| COMMAND_O := O=$(ABSOLUTE_O) |
| ifeq ($(objtree),) |
| objtree := $(O) |
| endif |
| endif |
| endif |
| |
| # check that the output directory actually exists |
| ifneq ($(OUTPUT),) |
| OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd) |
| $(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist)) |
| endif |
| |
| # |
| # Include saner warnings here, which can catch bugs: |
| # |
| EXTRA_WARNINGS := -Wbad-function-cast |
| EXTRA_WARNINGS += -Wdeclaration-after-statement |
| EXTRA_WARNINGS += -Wformat-security |
| EXTRA_WARNINGS += -Wformat-y2k |
| EXTRA_WARNINGS += -Winit-self |
| EXTRA_WARNINGS += -Wmissing-declarations |
| EXTRA_WARNINGS += -Wmissing-prototypes |
| EXTRA_WARNINGS += -Wnested-externs |
| EXTRA_WARNINGS += -Wno-system-headers |
| EXTRA_WARNINGS += -Wold-style-definition |
| EXTRA_WARNINGS += -Wpacked |
| EXTRA_WARNINGS += -Wredundant-decls |
| EXTRA_WARNINGS += -Wshadow |
| EXTRA_WARNINGS += -Wstrict-aliasing=3 |
| EXTRA_WARNINGS += -Wstrict-prototypes |
| EXTRA_WARNINGS += -Wswitch-default |
| EXTRA_WARNINGS += -Wswitch-enum |
| EXTRA_WARNINGS += -Wundef |
| EXTRA_WARNINGS += -Wwrite-strings |
| EXTRA_WARNINGS += -Wformat |
| |
| ifneq ($(findstring $(MAKEFLAGS), w),w) |
| PRINT_DIR = --no-print-directory |
| else |
| NO_SUBDIR = : |
| endif |
| |
| # |
| # Define a callable command for descending to a new directory |
| # |
| # Call by doing: $(call descend,directory[,target]) |
| # |
| descend = \ |
| +mkdir -p $(OUTPUT)$(1) && \ |
| $(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1) $(2) |
| |
| QUIET_SUBDIR0 = +$(MAKE) $(COMMAND_O) -C # space to separate -C and subdir |
| QUIET_SUBDIR1 = |
| |
| ifneq ($(findstring $(MAKEFLAGS),s),s) |
| ifndef V |
| QUIET_CC = @echo ' ' CC $@; |
| QUIET_AR = @echo ' ' AR $@; |
| QUIET_LINK = @echo ' ' LINK $@; |
| QUIET_MKDIR = @echo ' ' MKDIR $@; |
| QUIET_GEN = @echo ' ' GEN $@; |
| QUIET_SUBDIR0 = +@subdir= |
| QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ |
| $(MAKE) $(PRINT_DIR) -C $$subdir |
| QUIET_FLEX = @echo ' ' FLEX $@; |
| QUIET_BISON = @echo ' ' BISON $@; |
| |
| descend = \ |
| +@echo ' ' DESCEND $(1); \ |
| mkdir -p $(OUTPUT)$(1) && \ |
| $(MAKE) $(COMMAND_O) subdir=$(if $(subdir),$(subdir)/$(1),$(1)) $(PRINT_DIR) -C $(1) $(2) |
| endif |
| endif |