xref: /freebsd/contrib/wpa/src/build.rules (revision a90b9d0159070121c221b966469c3e36d912bf82)
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