1c1d255d3SCy Schubert.PHONY: all 2c1d255d3SCy Schubertall: _all 3c1d255d3SCy Schubert 4c1d255d3SCy Schubert# disable built-in rules 5c1d255d3SCy Schubert.SUFFIXES: 6c1d255d3SCy Schubert 7c1d255d3SCy Schubert# setup some variables 8c1d255d3SCy SchubertROOTDIR := $(dir $(lastword $(MAKEFILE_LIST))) 9c1d255d3SCy SchubertROOTDIR := $(dir $(ROOTDIR:%../src/=%))../ 10c1d255d3SCy SchubertBUILDDIR ?= $(abspath $(ROOTDIR)build) 11c1d255d3SCy SchubertBUILDDIR := $(BUILDDIR:%/=%) 12c1d255d3SCy SchubertABSROOT := $(abspath $(ROOTDIR)) 13c1d255d3SCy Schubertifeq ($(origin OUT),command line) 14c1d255d3SCy Schubert_PROJ := $(OUT:%/=%) 15c1d255d3SCy Schubert_PROJ := $(_PROJ:$(BUILDDIR)/%=%) 16c1d255d3SCy Schubertelse 17c1d255d3SCy Schubert_PROJ := $(abspath $(dir $(firstword $(MAKEFILE_LIST)))) 18c1d255d3SCy Schubert_PROJ := $(_PROJ:$(ABSROOT)/%=%) 19c1d255d3SCy Schubertendif 20c1d255d3SCy Schubert 21c1d255d3SCy Schubertifndef CC 22c1d255d3SCy SchubertCC=gcc 23c1d255d3SCy Schubertendif 24c1d255d3SCy Schubert 25c1d255d3SCy Schubertifndef RANLIB 26c1d255d3SCy SchubertRANLIB=ranlib 27c1d255d3SCy Schubertendif 28c1d255d3SCy Schubert 29c1d255d3SCy Schubertifndef LDO 30c1d255d3SCy SchubertLDO=$(CC) 31c1d255d3SCy Schubertendif 32c1d255d3SCy Schubert 33c1d255d3SCy Schubertifndef CFLAGS 34c1d255d3SCy SchubertCFLAGS = -MMD -O2 -Wall -g 35c1d255d3SCy Schubertendif 36c1d255d3SCy Schubert 37c1d255d3SCy Schubertifneq ($(CONFIG_FILE),) 38c1d255d3SCy Schubert-include $(CONFIG_FILE) 39c1d255d3SCy Schubert 40c1d255d3SCy Schubert# export for sub-makefiles 41c1d255d3SCy Schubertexport CONFIG_CODE_COVERAGE 42c1d255d3SCy Schubert 43c1d255d3SCy Schubert.PHONY: verify_config 44c1d255d3SCy Schubertverify_config: 45c1d255d3SCy Schubert @if [ ! -r $(CONFIG_FILE) ]; then \ 46c1d255d3SCy Schubert echo 'Building $(firstword $(ALL)) requires a configuration file'; \ 47c1d255d3SCy Schubert echo '(.config). See README for more instructions. You can'; \ 48c1d255d3SCy Schubert echo 'run "cp defconfig .config" to create an example'; \ 49c1d255d3SCy Schubert echo 'configuration.'; \ 50c1d255d3SCy Schubert exit 1; \ 51c1d255d3SCy Schubert fi 52c1d255d3SCy SchubertVERIFY := verify_config 53c1d255d3SCy Schubertelse 54c1d255d3SCy SchubertVERIFY := 55c1d255d3SCy Schubertendif 56c1d255d3SCy Schubert 57c1d255d3SCy Schubert# default target 58c1d255d3SCy Schubert.PHONY: _all 59c1d255d3SCy Schubert_all: $(VERIFY) $(ALL) $(EXTRA_TARGETS) 60c1d255d3SCy Schubert 61c1d255d3SCy Schubert# continue setup 62c1d255d3SCy SchubertCOVSUFFIX := $(if $(CONFIG_CODE_COVERAGE),-cov,) 63c1d255d3SCy SchubertPROJ := $(_PROJ)$(COVSUFFIX) 64c1d255d3SCy Schubert 65c1d255d3SCy SchubertQ=@ 66c1d255d3SCy SchubertE=echo 67c1d255d3SCy Schubertifeq ($(V), 1) 68c1d255d3SCy SchubertQ= 69c1d255d3SCy SchubertE=true 70c1d255d3SCy Schubertendif 71c1d255d3SCy Schubertifeq ($(QUIET), 1) 72c1d255d3SCy SchubertQ=@ 73c1d255d3SCy SchubertE=true 74c1d255d3SCy Schubertendif 75c1d255d3SCy Schubert 76c1d255d3SCy Schubertifeq ($(Q),@) 77c1d255d3SCy SchubertMAKEFLAGS += --no-print-directory 78c1d255d3SCy Schubertendif 79c1d255d3SCy Schubert 80c1d255d3SCy Schubert_DIRS := $(BUILDDIR)/$(PROJ) 81c1d255d3SCy Schubert.PHONY: _make_dirs 82c1d255d3SCy Schubert_make_dirs: 83*a90b9d01SCy Schubert @mkdir -p $(sort $(_DIRS)) 84c1d255d3SCy Schubert 85c1d255d3SCy Schubert$(BUILDDIR)/$(PROJ)/src/%.o: $(ROOTDIR)src/%.c $(CONFIG_FILE) | _make_dirs 86c1d255d3SCy Schubert $(Q)$(CC) -c -o $@ $(CFLAGS) $< 87c1d255d3SCy Schubert @$(E) " CC " $< 88c1d255d3SCy Schubert$(BUILDDIR)/$(PROJ)/%.o: %.c $(CONFIG_FILE) | _make_dirs 89c1d255d3SCy Schubert $(Q)$(CC) -c -o $@ $(CFLAGS) $< 90c1d255d3SCy Schubert @$(E) " CC " $< 91c1d255d3SCy Schubert# for the fuzzing tests 92c1d255d3SCy Schubert$(BUILDDIR)/$(PROJ)/wpa_supplicant/%.o: $(ROOTDIR)wpa_supplicant/%.c $(CONFIG_FILE) | _make_dirs 93c1d255d3SCy Schubert $(Q)$(CC) -c -o $@ $(CFLAGS) $< 94c1d255d3SCy Schubert @$(E) " CC " $< 95c1d255d3SCy Schubert 96c1d255d3SCy Schubert# libraries - they know how to build themselves 97c1d255d3SCy Schubert# (lib_phony so we recurse all the time) 98c1d255d3SCy Schubert.PHONY: lib_phony 99c1d255d3SCy Schubertlib_phony: 100c1d255d3SCy Schubert# nothing 101c1d255d3SCy Schubert 102c1d255d3SCy Schubert$(BUILDDIR)/$(PROJ)/%.a: $(CONFIG_FILE) lib_phony 103c1d255d3SCy Schubert $(Q)$(MAKE) -C $(ROOTDIR)$(dir $(@:$(BUILDDIR)/$(PROJ)/%=%)) OUT=$(abspath $(dir $@))/ 104c1d255d3SCy Schubert 105c1d255d3SCy SchubertBUILDOBJ = $(patsubst %,$(BUILDDIR)/$(PROJ)/%,$(patsubst $(ROOTDIR)%,%,$(1))) 106c1d255d3SCy Schubert 107c1d255d3SCy Schubert.PHONY: common-clean 108c1d255d3SCy Schubertcommon-clean: 109c1d255d3SCy Schubert $(Q)rm -rf $(ALL) $(BUILDDIR)/$(PROJ) 110