INSTALL ?= install
CC ?= "gcc"
-CFLAGS ?= -O2 -g
-CFLAGS += -Wall -Wextra -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common \
- -Werror-implicit-function-declaration -Wsign-compare -Wno-unused-parameter \
- -Wstringop-overflow=4
+cc-option = $(shell set -e ; $(CC) $(1) -c -x c /dev/null -o /dev/null >/dev/null 2>&1 && echo '$(1)')
-OBJS = iw.o genl.o event.o info.o phy.o \
- interface.o ibss.o station.o survey.o util.o ocb.o \
- mesh.o mpath.o mpp.o scan.o reg.o version.o \
- reason.o status.o connect.o link.o offch.o ps.o cqm.o \
- bitrate.o wowlan.o coalesce.o roc.o p2p.o vendor.o mgmt.o \
- ap.o sha256.o nan.o bloom.o \
- measurements.o ftm.o
-OBJS += sections.o
+CFLAGS_EVAL := $(call cc-option,-Wstringop-overflow=4)
-OBJS-$(HWSIM) += hwsim.o
+CFLAGS ?= -O2 -g
+CFLAGS += -Wall -Wextra -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
+CFLAGS += -Werror-implicit-function-declaration -Wsign-compare -Wno-unused-parameter
+CFLAGS += -Wdeclaration-after-statement
+CFLAGS += $(CFLAGS_EVAL)
-OBJS += $(OBJS-y) $(OBJS-Y)
+_OBJS := $(sort $(patsubst %.c,%.o,$(wildcard *.c)))
+VERSION_OBJS := $(filter-out version.o, $(_OBJS))
+OBJS := $(VERSION_OBJS) version.o
ALL = iw
all: $(ALL)
-VERSION_OBJS := $(filter-out version.o, $(OBJS))
-
version.c: version.sh $(patsubst %.o,%.c,$(VERSION_OBJS)) nl80211.h iw.h Makefile \
$(wildcard .git/index .git/refs/tags)
@$(NQ) ' GEN ' $@
$(Q)./version.sh $@
-%.o: %.c iw.h nl80211.h
+nl80211-commands.inc: nl80211.h
+ @$(NQ) ' GEN ' $@
+ $(Q)sed 's%^\tNL80211_CMD_%%;t n;d;:n s%^\([^=]*\),.*%\t[NL80211_CMD_\1] = \"\L\1\",%;t;d' nl80211.h | grep -v "reserved" > $@
+
+%.o: %.c iw.h nl80211.h nl80211-commands.inc
@$(NQ) ' CC ' $@
$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(Q)$(INSTALL) -m 644 iw.8.gz $(DESTDIR)$(MANDIR)/man8/
clean:
- $(Q)rm -f iw *.o *~ *.gz version.c *-stamp
+ $(Q)rm -f iw *.o *~ *.gz version.c *-stamp nl80211-commands.inc