]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
build: Put object files into build/ folder
authorJohannes Berg <johannes.berg@intel.com>
Fri, 18 Sep 2020 09:49:53 +0000 (11:49 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 10 Oct 2020 09:51:39 +0000 (12:51 +0300)
Instead of building in the source tree, put most object
files into the build/ folder at the root, and put each
thing that's being built into a separate folder.

This then allows us to build hostapd and wpa_supplicant
(or other combinations) without "make clean" inbetween.

For the tests keep the objects in place for now (and to
do that, add the build rule) so that we don't have to
rewrite all of that with $(call BUILDOBJS,...) which is
just noise there.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
26 files changed:
.gitignore
eap_example/Makefile
hostapd/Makefile
hs20/client/Makefile
hs20/server/Makefile
radius_example/Makefile
src/ap/Makefile
src/build.rules
src/common/Makefile
src/crypto/Makefile
src/eap_common/Makefile
src/eap_peer/Makefile
src/eap_server/Makefile
src/eapol_auth/Makefile
src/eapol_supp/Makefile
src/l2_packet/Makefile
src/objs.mk [new file with mode: 0644]
src/p2p/Makefile
src/radius/Makefile
src/rsn_supp/Makefile
src/tls/Makefile
src/utils/Makefile
src/wps/Makefile
tests/Makefile
wlantest/Makefile
wpa_supplicant/Makefile

index e057b54ea1e617185b5bc14dfe4eeb7ef09f5bd2..52a77fc01b9e16fa68620766c896edb6adc536a0 100644 (file)
@@ -34,3 +34,4 @@ wlantest/wlantest
 wlantest/wlantest_cli
 **/parallel-vm.log
 tags
+build/
index ecef3c97662ba8478a7b24152c916c3f329638dc..7660b8ddd0361a61b89cabe59f23e0a5c281c44e 100644 (file)
@@ -7,9 +7,9 @@ CFLAGS += -I../src
 CFLAGS += -I../src/utils
 
 
-OBJS_both += ../src/utils/libutils.a
-OBJS_both += ../src/crypto/libcrypto.a
-OBJS_both += ../src/tls/libtls.a
+EAP_LIBS += ../src/utils/libutils.a
+EAP_LIBS += ../src/crypto/libcrypto.a
+EAP_LIBS += ../src/tls/libtls.a
 
 OBJS_both += ../src/eap_common/eap_peap_common.o
 OBJS_both += ../src/eap_common/eap_psk_common.o
@@ -83,8 +83,12 @@ CFLAGS += -DEAP_SERVER
 
 
 OBJS_lib=$(OBJS_both) $(OBJS_peer) $(OBJS_server)
+_OBJS_VAR := OBJS_lib
+include ../src/objs.mk
 
 OBJS_ex = eap_example.o eap_example_peer.o eap_example_server.o
+_OBJS_VAR := OBJS_ex
+include ../src/objs.mk
 
 
 ../src/utils/libutils.a:
@@ -99,8 +103,8 @@ OBJS_ex = eap_example.o eap_example_peer.o eap_example_server.o
 
 ifneq ($(CONFIG_SOLIB), yes)
 LIBEAP = libeap.a
-libeap.a: $(OBJS_lib)
-       $(AR) crT libeap.a $(OBJS_lib)
+libeap.a: $(EAP_LIBS) $(OBJS_lib)
+       $(AR) crT libeap.a $^
        $(RANLIB) libeap.a
 
 else
@@ -108,8 +112,8 @@ CFLAGS  += -fPIC -DPIC
 LDFLAGS += -shared
 
 LIBEAP  = libeap.so
-libeap.so: $(OBJS_lib)
-       $(LDO) $(LDFLAGS) $(OBJS_lib) -o $(LIBEAP)
+libeap.so: $(EAP_LIBS) $(OBJS_lib)
+       $(LDO) $(LDFLAGS) $^ -o $(LIBEAP)
 
 endif
 
index ac83730e962127704ca7c03b6f572d1bb87a4e8d..f07acdf2447835a7c292697b0c6113c6bcf9e8cb 100644 (file)
@@ -1272,6 +1272,9 @@ install: $(addprefix $(DESTDIR)$(BINDIR)/,$(ALL))
 
 BCHECK=../src/drivers/build.hostapd
 
+_OBJS_VAR := OBJS
+include ../src/objs.mk
+
 hostapd: $(BCHECK) $(OBJS)
        $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
        @$(E) "  LD " $@
@@ -1279,6 +1282,10 @@ hostapd: $(BCHECK) $(OBJS)
 ifdef CONFIG_WPA_TRACE
 OBJS_c += ../src/utils/trace.o
 endif
+
+_OBJS_VAR := OBJS_c
+include ../src/objs.mk
+
 hostapd_cli: $(OBJS_c)
        $(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
        @$(E) "  LD " $@
@@ -1335,6 +1342,13 @@ SOBJS += ../src/crypto/sha256-kdf.o
 SOBJS += ../src/crypto/sha384-kdf.o
 SOBJS += ../src/crypto/sha512-kdf.o
 
+_OBJS_VAR := NOBJS
+include ../src/objs.mk
+_OBJS_VAR := HOBJS
+include ../src/objs.mk
+_OBJS_VAR := SOBJS
+include ../src/objs.mk
+
 nt_password_hash: $(NOBJS)
        $(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n)
        @$(E) "  LD " $@
@@ -1347,15 +1361,13 @@ sae_pk_gen: $(SOBJS)
        $(Q)$(CC) $(LDFLAGS) -o sae_pk_gen $(SOBJS) $(LIBS_s)
        @$(E) "  LD " $@
 
+.PHONY: lcov-html
 lcov-html:
-       lcov -c -d .. > lcov.info
+       lcov -c -d $(BUILDDIR) > lcov.info
        genhtml lcov.info --output-directory lcov-html
 
 clean: common-clean
-       rm -f core *~ *.o nt_password_hash hlr_auc_gw
+       rm -f core *~ nt_password_hash hlr_auc_gw
        rm -f sae_pk_gen
-       rm -f *.d *.gcno *.gcda *.gcov
        rm -f lcov.info
        rm -rf lcov-html
-
--include $(OBJS:%.o=%.d)
index cbb1105e186b679932e81e15c314c70d1f659033..4dcfe2d3bf2c406360dd705a18d200f60f8fb639 100644 (file)
@@ -71,19 +71,11 @@ CFLAGS += -DEAP_TLS_OPENSSL
 OBJS += ../../src/crypto/tls_openssl_ocsp.o
 LIBS += -lssl -lcrypto
 
+_OBJS_VAR := OBJS
+include ../../src/objs.mk
 hs20-osu-client: $(OBJS)
        $(Q)$(LDO) $(LDFLAGS) -o hs20-osu-client $(OBJS) $(LIBS)
        @$(E) "  LD " $@
 
 clean: common-clean
-       rm -f core *~ *.o *.d
-       rm -f ../../src/utils/*.o
-       rm -f ../../src/utils/*.d
-       rm -f ../../src/common/*.o
-       rm -f ../../src/common/*.d
-       rm -f ../../src/crypto/*.o
-       rm -f ../../src/crypto/*.d
-       rm -f ../../src/wps/*.o
-       rm -f ../../src/wps/*.d
-
--include $(OBJS:%.o=%.d)
+       rm -f core *~
index 24b81cd8a28aa7ea1b3bb1ad56aecebe941ac29c..0cab6d6b010a1d03615f6d0e24b839a1391f5669 100644 (file)
@@ -33,14 +33,10 @@ CFLAGS += $(shell xml2-config --cflags)
 LIBS += $(shell xml2-config --libs)
 OBJS += ../../src/utils/xml_libxml2.o
 
+_OBJS_VAR := OBJS
+include ../../src/objs.mk
 hs20_spp_server: $(OBJS)
        $(LDO) $(LDFLAGS) -o hs20_spp_server $(OBJS) $(LIBS)
 
 clean: common-clean
-       rm -f core *~ *.o *.d
-       rm -f ../../src/utils/*.o
-       rm -f ../../src/utils/*.d
-       rm -f ../../src/crypto/*.o
-       rm -f ../../src/crypto/*.d
-
--include $(OBJS:%.o=%.d)
+       rm -f core *~
index 3492ac70fc4949ffa54fa7fc6d1bacf41485ed92..f0e4e535aa3ce7d9f0e38891569a24983b47c038 100644 (file)
@@ -24,10 +24,11 @@ LLIBS = -lrt
 
 OBJS_ex = radius_example.o
 
+_OBJS_VAR := OBJS_ex
+include ../src/objs.mk
+
 radius_example: $(OBJS_ex) $(LIBS)
        $(LDO) $(LDFLAGS) -o radius_example $(OBJS_ex) $(LIBS) $(LLIBS)
 
 clean: common-clean
        rm -f core *~ *.o *.d
-
--include $(OBJS:%.o=%.d)
index 805181d00c1259204d14de77b222cb33434dc66e..425b123405a48f0bfcfe5381b317aa2398acae56 100644 (file)
@@ -65,7 +65,7 @@ LIB_OBJS= \
        wps_hostapd.o \
        x_snoop.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libap.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 486fea65861eb080b0ecd22e2f91f254da46889c..4b04eca58cf6e53106db6e8bb258fcb82de3d95d 100644 (file)
@@ -4,8 +4,13 @@ all: _all
 # disable built-in rules
 .SUFFIXES:
 
+# setup some variables
 ROOTDIR := $(dir $(lastword $(MAKEFILE_LIST)))
-ROOTDIR := $(dir $(ROOTDIR:%/=%))
+ROOTDIR := $(dir $(ROOTDIR:%../src/=%))../
+BUILDDIR := $(ROOTDIR)build
+_PROJ := $(abspath $(dir $(firstword $(MAKEFILE_LIST))))
+ABSROOT := $(abspath $(ROOTDIR))
+_PROJ := $(_PROJ:$(ABSROOT)/%=%)
 
 ifndef CC
 CC=gcc
@@ -26,6 +31,9 @@ endif
 ifneq ($(CONFIG_FILE),)
 -include $(CONFIG_FILE)
 
+# export for sub-makefiles
+export CONFIG_CODE_COVERAGE
+
 .PHONY: verify_config
 verify_config:
        @if [ ! -r $(CONFIG_FILE) ]; then \
@@ -44,6 +52,10 @@ endif
 .PHONY: _all
 _all: $(VERIFY) $(ALL) $(EXTRA_TARGETS)
 
+# continue setup
+COVSUFFIX := $(if $(CONFIG_CODE_COVERAGE),-cov,)
+PROJ := $(_PROJ)$(COVSUFFIX)
+
 Q=@
 E=echo
 ifeq ($(V), 1)
@@ -59,17 +71,21 @@ ifeq ($(Q),@)
 MAKEFLAGS += --no-print-directory
 endif
 
-ifdef CONFIG_CODE_COVERAGE
-%.o: %.c
+_DIRS := $(BUILDDIR)/$(PROJ)
+.PHONY: _make_dirs
+_make_dirs:
+       @mkdir -p $(_DIRS)
+
+$(BUILDDIR)/$(PROJ)/src/%.o: $(ROOTDIR)src/%.c | _make_dirs
+       $(Q)$(CC) -c -o $@ $(CFLAGS) $<
        @$(E) "  CC " $<
-       $(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
-else
-%.o: %.c
+$(BUILDDIR)/$(PROJ)/%.o: %.c | _make_dirs
        $(Q)$(CC) -c -o $@ $(CFLAGS) $<
        @$(E) "  CC " $<
-endif
+
+BUILDOBJ = $(patsubst %,$(BUILDDIR)/$(PROJ)/%,$(patsubst $(ROOTDIR)%,%,$(1)))
 
 .PHONY: common-clean
 common-clean:
        $(Q)$(MAKE) -C $(ROOTDIR)/src clean
-       $(Q)rm -f $(ALL)
+       $(Q)rm -rf $(ALL) $(BUILDDIR)/$(PROJ)
index eeb69f0d4ff3062b2a5384f5903070f8c087fbbc..4cd48d9fd8ceb1f29fe9bb3ce58e11f83d870217 100644 (file)
@@ -19,7 +19,7 @@ LIB_OBJS= \
        sae.o \
        wpa_common.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libcommon.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 94eac66fa955535d052adaff425220b93934668d..3af5406ea3811b54512eb52b17b13ec6e77eb485 100644 (file)
@@ -66,7 +66,7 @@ LIB_OBJS += random.o
 endif
 
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libcrypto.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 7d6777babf4fd500f326ecdc9faa28b2f5eb1e94..49fbbde026916893c85c8727cbbc11269ce9bf6f 100644 (file)
@@ -23,7 +23,7 @@ LIB_OBJS= \
        eap_wsc_common.o \
        ikev2_common.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libeap_common.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 282b89696e5c62f30414dc5cd8c02cb83d3dd426..36439b7883797bd2b1f77edba0c14ab719c51749 100644 (file)
@@ -15,7 +15,7 @@ LIB_OBJS= \
        eap.o \
        eap_methods.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libeap_peer.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 4ece9aa67b35ab9f598abfdfa993853eb7d873f5..946ac195e2513825664afb67deec3350c14747e0 100644 (file)
@@ -13,7 +13,7 @@ LIB_OBJS= \
        eap_server_identity.o \
        eap_server_methods.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libeap_server.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 0175a19d940ee677d75cd4ebdb5f0c17ee81f0fe..777979ce7c4f646cdcee3a368bf8d31ce9a4cdd2 100644 (file)
@@ -8,7 +8,7 @@ install:
 
 LIB_OBJS = eapol_auth_sm.o eapol_auth_dump.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libeapol_auth.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index c98280b469b7c94ebaf4e9ed40d568e88ea9d3cb..265e5f25c37c1777cb0bfb3af6a9e6fc0f1919da 100644 (file)
@@ -10,7 +10,7 @@ CFLAGS += -DIEEE8021X_EAPOL
 
 LIB_OBJS = eapol_supp_sm.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libeapol_supp.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 20f229511e9c646ffcb34ea93eff636a6fc425b0..ab8c86ecc43d022d50c89822c601c401c9b61e1e 100644 (file)
@@ -8,7 +8,7 @@ install:
 
 LIB_OBJS = l2_packet_linux.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libl2_packet.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
diff --git a/src/objs.mk b/src/objs.mk
new file mode 100644 (file)
index 0000000..df9fb17
--- /dev/null
@@ -0,0 +1,3 @@
+$(_OBJS_VAR) := $(call BUILDOBJ,$($(_OBJS_VAR)))
+-include $($(_OBJS_VAR):%.o=%.d)
+_DIRS += $(dir $($(_OBJS_VAR)))
index 174cf6f6f7f4579f9bf7abe2c7fce9056a619085..c6b406661182c7dea0d44596fc6efa96746c9faf 100644 (file)
@@ -21,7 +21,7 @@ LIB_OBJS= \
        p2p_sd.o \
        p2p_utils.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libp2p.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index dbe9a9a9fa71714861fd66702fb40a913bb45dc3..83096f0c7fbbc638696891c78a0c646707066fc9 100644 (file)
@@ -14,7 +14,7 @@ LIB_OBJS= \
        radius_das.o \
        radius_server.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libradius.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 255cb73a750576fb6c2a087f3210674e20d6e4c7..43288e3fd688fc9eb54e6fe799a81ef080244007 100644 (file)
@@ -19,7 +19,7 @@ LIB_OBJS= \
        wpa.o \
        wpa_ie.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 librsn_supp.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 0a36cf9e4530ff8fe56d5a5c6e456946ef4fc8be..3fac5ee8c6cd62b5e9ab0958cdc9aaf5a026a30b 100644 (file)
@@ -31,7 +31,7 @@ LIB_OBJS= \
        x509v3.o
 
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libtls.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 29fb1295d72652057bcce1af621fc392e8471735..7be05101fc30ced7f1a0897d859d80f2ab5d4d34 100644 (file)
@@ -34,7 +34,7 @@ LIB_OBJS += edit.o
 
 #LIB_OBJS += pcsc_funcs.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libutils.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 811b62977be818bd50e4b2b9c8c516b89f54e7b1..ed928ef41e94e1dedd0f69009e80ecc00518a886 100644 (file)
@@ -33,7 +33,7 @@ LIB_OBJS= \
        wps_upnp_ssdp.o \
        wps_upnp_web.o
 
+_OBJS_VAR := LIB_OBJS
+include ../objs.mk
 libwps.a: $(LIB_OBJS)
        $(AR) crT $@ $?
-
--include $(OBJS:%.o=%.d)
index 4d9f2e0ab8c1a04d2d727fbd53f859d703c746a8..4a07a5dc55ca0bc7d3daff7dc2324eee10ba828e 100644 (file)
@@ -5,6 +5,13 @@ ALL=test-base64 test-md4 test-milenage \
 
 include ../src/build.rules
 
+# for now, keep building in this folder, otherwise we need to
+# put each object for each test into a separate variable and
+# then do the objs.mk dance for it ...
+%.o: %.c
+       $(Q)$(CC) -c -o $@ $(CFLAGS) $<
+       @$(E) "  CC " $<
+
 ifdef LIBFUZZER
 CC=clang
 CFLAGS = -MMD -O2 -Wall -g
index fee80f6f4e2cc2095d43cca89bace4e3099d6b3f..410c309d474556be099c07ee90eb247f2ed48b44 100644 (file)
@@ -71,6 +71,12 @@ TOBJS += gcmp.o
 
 OBJS_cli = wlantest_cli.o
 
+_OBJS_VAR := OBJS
+include ../src/objs.mk
+_OBJS_VAR := TOBJS
+include ../src/objs.mk
+_OBJS_VAR := OBJS_cli
+include ../src/objs.mk
 
 wlantest: $(OBJS) $(OWN_LIBS)
        $(LDO) $(LDFLAGS) -o wlantest $(OBJS) $(OWN_LIBS) $(LIBS)
@@ -82,6 +88,4 @@ test_vectors: $(TOBJS) $(OWN_LIBS)
        $(LDO) $(LDFLAGS) -o test_vectors $(TOBJS) $(OWN_LIBS) $(LIBS)
 
 clean: common-clean
-       rm -f core *~ *.o *.d
-
--include $(OBJS:%.o=%.d)
+       rm -f core *~
index 8645d908f821c4c167ff4831f03073e8c8832661..9f81addd8228b286190967b2701981054c3de5e3 100644 (file)
@@ -1860,28 +1860,40 @@ dynamic_eap_methods: $(EAPDYN)
 
 BCHECK=../src/drivers/build.wpa_supplicant
 
+_OBJS_VAR := OBJS_priv
+include ../src/objs.mk
 wpa_priv: $(BCHECK) $(OBJS_priv)
        $(Q)$(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS)
        @$(E) "  LD " $@
 
 $(OBJS_c) $(OBJS_t) $(OBJS_t2) $(OBJS) $(BCHECK) $(EXTRA_progs): .config
 
+_OBJS_VAR := OBJS
+include ../src/objs.mk
 wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
        $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
        @$(E) "  LD " $@
 
+_OBJS_VAR := OBJS_t
+include ../src/objs.mk
 eapol_test: $(OBJS_t)
        $(Q)$(LDO) $(LDFLAGS) -o eapol_test $(OBJS_t) $(LIBS)
        @$(E) "  LD " $@
 
+_OBJS_VAR := OBJS_t2
+include ../src/objs.mk
 preauth_test: $(OBJS_t2)
        $(Q)$(LDO) $(LDFLAGS) -o preauth_test $(OBJS_t2) $(LIBS)
        @$(E) "  LD " $@
 
+_OBJS_VAR := OBJS_p
+include ../src/objs.mk
 wpa_passphrase: $(OBJS_p)
        $(Q)$(LDO) $(LDFLAGS) -o wpa_passphrase $(OBJS_p) $(LIBS_p) $(LIBS)
        @$(E) "  LD " $@
 
+_OBJS_VAR := OBJS_c
+include ../src/objs.mk
 wpa_cli: $(OBJS_c)
        $(Q)$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
        @$(E) "  LD " $@
@@ -1895,6 +1907,8 @@ LIBCTRLSO += ../src/utils/os_$(CONFIG_OS).c
 LIBCTRLSO += ../src/utils/common.c
 LIBCTRLSO += ../src/utils/wpa_debug.c
 
+_OBJS_VAR := LIBCTRL
+include ../src/objs.mk
 libwpa_client.a: $(LIBCTRL)
        $(Q)rm -f $@
        $(Q)$(AR) crs $@ $?
@@ -1904,14 +1918,19 @@ libwpa_client.so: $(LIBCTRLSO)
        @$(E) "  CC  $@ ($^)"
        $(Q)$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -fPIC $^
 
-libwpa_test1: libwpa_test.o libwpa_client.a
-       $(Q)$(LDO) $(LDFLAGS) -o libwpa_test1 libwpa_test.o libwpa_client.a $(LIBS_c)
+OBJS_wpatest := libwpa_test.o
+_OBJS_VAR := OBJS_wpatest
+include ../src/objs.mk
+libwpa_test1: $(OBJS_wpatest) libwpa_client.a
+       $(Q)$(LDO) $(LDFLAGS) -o libwpa_test1 $(OBJS_wpatest) libwpa_client.a $(LIBS_c)
        @$(E) "  LD " $@
 
-libwpa_test2: libwpa_test.o libwpa_client.so
-       $(Q)$(LDO) $(LDFLAGS) -o libwpa_test2 libwpa_test.o -L. -lwpa_client $(LIBS_c)
+libwpa_test2: $(OBJS_wpatest) libwpa_client.so
+       $(Q)$(LDO) $(LDFLAGS) -o libwpa_test2 $(OBJS_wpatest) -L. -lwpa_client $(LIBS_c)
        @$(E) "  LD " $@
 
+_OBJS_VAR := OBJS_nfc
+include ../src/objs.mk
 nfc_pw_token: $(OBJS_nfc)
        $(Q)$(LDO) $(LDFLAGS) -o nfc_pw_token $(OBJS_nfc) $(LIBS)
        @$(E) "  LD " $@
@@ -1989,8 +2008,9 @@ FIPSLD=$(FIPSDIR)/bin/fipsld
 fips:
        $(MAKE) CC=$(FIPSLD) FIPSLD_CC="$(CC)"
 
-lcov-html: wpa_supplicant.gcda
-       lcov -c -d .. > lcov.info
+.PHONY: lcov-html
+lcov-html: $(call BUILDOBJ,wpa_supplicant.gcda)
+       lcov -c -d $(BUILDDIR) > lcov.info
        genhtml lcov.info --output-directory lcov-html
 
 clean: common-clean
@@ -2005,5 +2025,3 @@ clean: common-clean
        rm -f libwpa_client.a
        rm -f libwpa_client.so
        rm -f libwpa_test1 libwpa_test2
-
--include $(OBJS:%.o=%.d)