1*03f9172cSAndroid Build Coastguard Worker.PHONY: all 2*03f9172cSAndroid Build Coastguard Workerall: _all 3*03f9172cSAndroid Build Coastguard Worker 4*03f9172cSAndroid Build Coastguard Worker# disable built-in rules 5*03f9172cSAndroid Build Coastguard Worker.SUFFIXES: 6*03f9172cSAndroid Build Coastguard Worker 7*03f9172cSAndroid Build Coastguard Worker# setup some variables 8*03f9172cSAndroid Build Coastguard WorkerROOTDIR := $(dir $(lastword $(MAKEFILE_LIST))) 9*03f9172cSAndroid Build Coastguard WorkerROOTDIR := $(dir $(ROOTDIR:%../src/=%))../ 10*03f9172cSAndroid Build Coastguard WorkerBUILDDIR ?= $(abspath $(ROOTDIR)build) 11*03f9172cSAndroid Build Coastguard WorkerBUILDDIR := $(BUILDDIR:%/=%) 12*03f9172cSAndroid Build Coastguard WorkerABSROOT := $(abspath $(ROOTDIR)) 13*03f9172cSAndroid Build Coastguard Workerifeq ($(origin OUT),command line) 14*03f9172cSAndroid Build Coastguard Worker_PROJ := $(OUT:%/=%) 15*03f9172cSAndroid Build Coastguard Worker_PROJ := $(_PROJ:$(BUILDDIR)/%=%) 16*03f9172cSAndroid Build Coastguard Workerelse 17*03f9172cSAndroid Build Coastguard Worker_PROJ := $(abspath $(dir $(firstword $(MAKEFILE_LIST)))) 18*03f9172cSAndroid Build Coastguard Worker_PROJ := $(_PROJ:$(ABSROOT)/%=%) 19*03f9172cSAndroid Build Coastguard Workerendif 20*03f9172cSAndroid Build Coastguard Worker 21*03f9172cSAndroid Build Coastguard Workerifndef CC 22*03f9172cSAndroid Build Coastguard WorkerCC=gcc 23*03f9172cSAndroid Build Coastguard Workerendif 24*03f9172cSAndroid Build Coastguard Worker 25*03f9172cSAndroid Build Coastguard Workerifndef RANLIB 26*03f9172cSAndroid Build Coastguard WorkerRANLIB=ranlib 27*03f9172cSAndroid Build Coastguard Workerendif 28*03f9172cSAndroid Build Coastguard Worker 29*03f9172cSAndroid Build Coastguard Workerifndef LDO 30*03f9172cSAndroid Build Coastguard WorkerLDO=$(CC) 31*03f9172cSAndroid Build Coastguard Workerendif 32*03f9172cSAndroid Build Coastguard Worker 33*03f9172cSAndroid Build Coastguard Workerifndef CFLAGS 34*03f9172cSAndroid Build Coastguard WorkerCFLAGS = -MMD -O2 -Wall -g 35*03f9172cSAndroid Build Coastguard Workerendif 36*03f9172cSAndroid Build Coastguard Worker 37*03f9172cSAndroid Build Coastguard Workerifneq ($(CONFIG_FILE),) 38*03f9172cSAndroid Build Coastguard Worker-include $(CONFIG_FILE) 39*03f9172cSAndroid Build Coastguard Worker 40*03f9172cSAndroid Build Coastguard Worker# export for sub-makefiles 41*03f9172cSAndroid Build Coastguard Workerexport CONFIG_CODE_COVERAGE 42*03f9172cSAndroid Build Coastguard Worker 43*03f9172cSAndroid Build Coastguard Worker.PHONY: verify_config 44*03f9172cSAndroid Build Coastguard Workerverify_config: 45*03f9172cSAndroid Build Coastguard Worker @if [ ! -r $(CONFIG_FILE) ]; then \ 46*03f9172cSAndroid Build Coastguard Worker echo 'Building $(firstword $(ALL)) requires a configuration file'; \ 47*03f9172cSAndroid Build Coastguard Worker echo '(.config). See README for more instructions. You can'; \ 48*03f9172cSAndroid Build Coastguard Worker echo 'run "cp defconfig .config" to create an example'; \ 49*03f9172cSAndroid Build Coastguard Worker echo 'configuration.'; \ 50*03f9172cSAndroid Build Coastguard Worker exit 1; \ 51*03f9172cSAndroid Build Coastguard Worker fi 52*03f9172cSAndroid Build Coastguard WorkerVERIFY := verify_config 53*03f9172cSAndroid Build Coastguard Workerelse 54*03f9172cSAndroid Build Coastguard WorkerVERIFY := 55*03f9172cSAndroid Build Coastguard Workerendif 56*03f9172cSAndroid Build Coastguard Worker 57*03f9172cSAndroid Build Coastguard Worker# default target 58*03f9172cSAndroid Build Coastguard Worker.PHONY: _all 59*03f9172cSAndroid Build Coastguard Worker_all: $(VERIFY) $(ALL) $(EXTRA_TARGETS) 60*03f9172cSAndroid Build Coastguard Worker 61*03f9172cSAndroid Build Coastguard Worker# continue setup 62*03f9172cSAndroid Build Coastguard WorkerCOVSUFFIX := $(if $(CONFIG_CODE_COVERAGE),-cov,) 63*03f9172cSAndroid Build Coastguard WorkerPROJ := $(_PROJ)$(COVSUFFIX) 64*03f9172cSAndroid Build Coastguard Worker 65*03f9172cSAndroid Build Coastguard WorkerQ=@ 66*03f9172cSAndroid Build Coastguard WorkerE=echo 67*03f9172cSAndroid Build Coastguard Workerifeq ($(V), 1) 68*03f9172cSAndroid Build Coastguard WorkerQ= 69*03f9172cSAndroid Build Coastguard WorkerE=true 70*03f9172cSAndroid Build Coastguard Workerendif 71*03f9172cSAndroid Build Coastguard Workerifeq ($(QUIET), 1) 72*03f9172cSAndroid Build Coastguard WorkerQ=@ 73*03f9172cSAndroid Build Coastguard WorkerE=true 74*03f9172cSAndroid Build Coastguard Workerendif 75*03f9172cSAndroid Build Coastguard Worker 76*03f9172cSAndroid Build Coastguard Workerifeq ($(Q),@) 77*03f9172cSAndroid Build Coastguard WorkerMAKEFLAGS += --no-print-directory 78*03f9172cSAndroid Build Coastguard Workerendif 79*03f9172cSAndroid Build Coastguard Worker 80*03f9172cSAndroid Build Coastguard Worker_DIRS := $(BUILDDIR)/$(PROJ) 81*03f9172cSAndroid Build Coastguard Worker.PHONY: _make_dirs 82*03f9172cSAndroid Build Coastguard Worker_make_dirs: 83*03f9172cSAndroid Build Coastguard Worker @mkdir -p $(sort $(_DIRS)) 84*03f9172cSAndroid Build Coastguard Worker 85*03f9172cSAndroid Build Coastguard Worker$(BUILDDIR)/$(PROJ)/src/%.o: $(ROOTDIR)src/%.c $(CONFIG_FILE) | _make_dirs 86*03f9172cSAndroid Build Coastguard Worker $(Q)$(CC) -c -o $@ $(CFLAGS) $< 87*03f9172cSAndroid Build Coastguard Worker @$(E) " CC " $< 88*03f9172cSAndroid Build Coastguard Worker$(BUILDDIR)/$(PROJ)/%.o: %.c $(CONFIG_FILE) | _make_dirs 89*03f9172cSAndroid Build Coastguard Worker $(Q)$(CC) -c -o $@ $(CFLAGS) $< 90*03f9172cSAndroid Build Coastguard Worker @$(E) " CC " $< 91*03f9172cSAndroid Build Coastguard Worker# for the fuzzing tests 92*03f9172cSAndroid Build Coastguard Worker$(BUILDDIR)/$(PROJ)/wpa_supplicant/%.o: $(ROOTDIR)wpa_supplicant/%.c $(CONFIG_FILE) | _make_dirs 93*03f9172cSAndroid Build Coastguard Worker $(Q)$(CC) -c -o $@ $(CFLAGS) $< 94*03f9172cSAndroid Build Coastguard Worker @$(E) " CC " $< 95*03f9172cSAndroid Build Coastguard Worker 96*03f9172cSAndroid Build Coastguard Worker# libraries - they know how to build themselves 97*03f9172cSAndroid Build Coastguard Worker# (lib_phony so we recurse all the time) 98*03f9172cSAndroid Build Coastguard Worker.PHONY: lib_phony 99*03f9172cSAndroid Build Coastguard Workerlib_phony: 100*03f9172cSAndroid Build Coastguard Worker# nothing 101*03f9172cSAndroid Build Coastguard Worker 102*03f9172cSAndroid Build Coastguard Worker$(BUILDDIR)/$(PROJ)/%.a: $(CONFIG_FILE) lib_phony 103*03f9172cSAndroid Build Coastguard Worker $(Q)$(MAKE) -C $(ROOTDIR)$(dir $(@:$(BUILDDIR)/$(PROJ)/%=%)) OUT=$(abspath $(dir $@))/ 104*03f9172cSAndroid Build Coastguard Worker 105*03f9172cSAndroid Build Coastguard WorkerBUILDOBJ = $(patsubst %,$(BUILDDIR)/$(PROJ)/%,$(patsubst $(ROOTDIR)%,%,$(1))) 106*03f9172cSAndroid Build Coastguard Worker 107*03f9172cSAndroid Build Coastguard Worker.PHONY: common-clean 108*03f9172cSAndroid Build Coastguard Workercommon-clean: 109*03f9172cSAndroid Build Coastguard Worker $(Q)rm -rf $(ALL) $(BUILDDIR)/$(PROJ) 110