1ifndef CC
2CC=gcc
3endif
4
5ifndef CFLAGS
6CFLAGS = -MMD -O2 -Wall -g
7endif
8
9ifdef LIBS
10# If LIBS is set with some global build system defaults, clone those for
11# LIBS_c and LIBS_p to cover wpa_passphrase and wpa_cli as well.
12ifndef LIBS_c
13LIBS_c := $(LIBS)
14endif
15ifndef LIBS_p
16LIBS_p := $(LIBS)
17endif
18endif
19
20export LIBDIR ?= /usr/local/lib/
21export INCDIR ?= /usr/local/include/
22export BINDIR ?= /usr/local/sbin/
23PKG_CONFIG ?= pkg-config
24
25CFLAGS += $(EXTRA_CFLAGS)
26CFLAGS += -I$(abspath ../src)
27CFLAGS += -I$(abspath ../src/utils)
28
29-include .config
30
31ifndef CONFIG_NO_GITVER
32# Add VERSION_STR postfix for builds from a git repository
33ifeq ($(wildcard ../.git),../.git)
34GITVER := $(shell git describe --dirty=+)
35ifneq ($(GITVER),)
36CFLAGS += -DGIT_VERSION_STR_POSTFIX=\"-$(GITVER)\"
37endif
38endif
39endif
40
41ifdef CONFIG_TESTING_OPTIONS
42CFLAGS += -DCONFIG_TESTING_OPTIONS
43CONFIG_WPS_TESTING=y
44CONFIG_TDLS_TESTING=y
45endif
46
47BINALL=wpa_supplicant wpa_cli
48
49ifndef CONFIG_NO_WPA_PASSPHRASE
50BINALL += wpa_passphrase
51endif
52
53ALL = $(BINALL)
54ALL += systemd/wpa_supplicant.service
55ALL += systemd/wpa_supplicant@.service
56ALL += systemd/wpa_supplicant-nl80211@.service
57ALL += systemd/wpa_supplicant-wired@.service
58ALL += dbus/fi.w1.wpa_supplicant1.service
59ifdef CONFIG_BUILD_WPA_CLIENT_SO
60ALL += libwpa_client.so
61endif
62
63
64all: verify_config $(ALL) dynamic_eap_methods
65
66verify_config:
67	@if [ ! -r .config ]; then \
68		echo 'Building wpa_supplicant requires a configuration file'; \
69		echo '(.config). See README for more instructions. You can'; \
70		echo 'run "cp defconfig .config" to create an example'; \
71		echo 'configuration.'; \
72		exit 1; \
73	fi
74
75mkconfig:
76	@if [ -f .config ]; then \
77		echo '.config exists - did not replace it'; \
78		exit 1; \
79	fi
80	echo CONFIG_DRIVER_HOSTAP=y >> .config
81	echo CONFIG_DRIVER_WEXT=y >> .config
82
83$(DESTDIR)$(BINDIR)/%: %
84	install -D $(<) $(@)
85
86install: $(addprefix $(DESTDIR)$(BINDIR)/,$(BINALL))
87	$(MAKE) -C ../src install
88ifdef CONFIG_BUILD_WPA_CLIENT_SO
89	install -m 0644 -D libwpa_client.so $(DESTDIR)/$(LIBDIR)/libwpa_client.so
90	install -m 0644 -D ../src/common/wpa_ctrl.h $(DESTDIR)/$(INCDIR)/wpa_ctrl.h
91endif
92
93ifdef CONFIG_FIPS
94CONFIG_NO_RANDOM_POOL=
95CONFIG_OPENSSL_CMAC=y
96endif
97
98OBJS = config.o
99OBJS += notify.o
100OBJS += bss.o
101OBJS += eap_register.o
102OBJS += ../src/utils/common.o
103OBJS += ../src/utils/wpa_debug.o
104OBJS += ../src/utils/wpabuf.o
105OBJS += ../src/utils/bitfield.o
106OBJS += op_classes.o
107OBJS += rrm.o
108OBJS_p = wpa_passphrase.o
109OBJS_p += ../src/utils/common.o
110OBJS_p += ../src/utils/wpa_debug.o
111OBJS_p += ../src/utils/wpabuf.o
112OBJS_c = wpa_cli.o ../src/common/wpa_ctrl.o
113OBJS_c += ../src/utils/wpa_debug.o
114OBJS_c += ../src/utils/common.o
115OBJS_c += ../src/common/cli.o
116OBJS += wmm_ac.o
117
118ifndef CONFIG_OS
119ifdef CONFIG_NATIVE_WINDOWS
120CONFIG_OS=win32
121else
122CONFIG_OS=unix
123endif
124endif
125
126ifeq ($(CONFIG_OS), internal)
127CFLAGS += -DOS_NO_C_LIB_DEFINES
128endif
129
130OBJS += ../src/utils/os_$(CONFIG_OS).o
131OBJS_p += ../src/utils/os_$(CONFIG_OS).o
132OBJS_c += ../src/utils/os_$(CONFIG_OS).o
133
134ifdef CONFIG_WPA_TRACE
135CFLAGS += -DWPA_TRACE
136OBJS += ../src/utils/trace.o
137OBJS_p += ../src/utils/trace.o
138OBJS_c += ../src/utils/trace.o
139OBJS_priv += ../src/utils/trace.o
140LIBCTRL += ../src/utils/trace.o
141LIBCTRLSO += ../src/utils/trace.c
142LDFLAGS += -rdynamic
143CFLAGS += -funwind-tables
144ifdef CONFIG_WPA_TRACE_BFD
145CFLAGS += -DPACKAGE="wpa_supplicant" -DWPA_TRACE_BFD
146LIBS += -lbfd -ldl -liberty -lz
147LIBS_p += -lbfd -ldl -liberty -lz
148LIBS_c += -lbfd -ldl -liberty -lz
149endif
150endif
151
152ifndef CONFIG_ELOOP
153CONFIG_ELOOP=eloop
154endif
155OBJS += ../src/utils/$(CONFIG_ELOOP).o
156OBJS_c += ../src/utils/$(CONFIG_ELOOP).o
157
158ifndef CONFIG_OSX
159ifeq ($(CONFIG_ELOOP), eloop)
160# Using glibc < 2.17 requires -lrt for clock_gettime()
161# OS X has an alternate implementation
162LIBS += -lrt
163LIBS_c += -lrt
164LIBS_p += -lrt
165endif
166endif
167
168ifdef CONFIG_ELOOP_POLL
169CFLAGS += -DCONFIG_ELOOP_POLL
170endif
171
172ifdef CONFIG_ELOOP_EPOLL
173CFLAGS += -DCONFIG_ELOOP_EPOLL
174endif
175
176ifdef CONFIG_ELOOP_KQUEUE
177CFLAGS += -DCONFIG_ELOOP_KQUEUE
178endif
179
180ifdef CONFIG_EAPOL_TEST
181CFLAGS += -Werror -DEAPOL_TEST
182endif
183
184ifdef CONFIG_CODE_COVERAGE
185CFLAGS += -O0 -fprofile-arcs -ftest-coverage
186LIBS += -lgcov
187LIBS_c += -lgcov
188LIBS_p += -lgcov
189endif
190
191ifdef CONFIG_HT_OVERRIDES
192CFLAGS += -DCONFIG_HT_OVERRIDES
193endif
194
195ifdef CONFIG_VHT_OVERRIDES
196CFLAGS += -DCONFIG_VHT_OVERRIDES
197endif
198
199ifndef CONFIG_BACKEND
200CONFIG_BACKEND=file
201endif
202
203ifeq ($(CONFIG_BACKEND), file)
204OBJS += config_file.o
205ifndef CONFIG_NO_CONFIG_BLOBS
206NEED_BASE64=y
207endif
208CFLAGS += -DCONFIG_BACKEND_FILE
209endif
210
211ifeq ($(CONFIG_BACKEND), winreg)
212OBJS += config_winreg.o
213endif
214
215ifeq ($(CONFIG_BACKEND), none)
216OBJS += config_none.o
217endif
218
219ifdef CONFIG_NO_CONFIG_WRITE
220CFLAGS += -DCONFIG_NO_CONFIG_WRITE
221endif
222
223ifdef CONFIG_NO_CONFIG_BLOBS
224CFLAGS += -DCONFIG_NO_CONFIG_BLOBS
225endif
226
227ifdef CONFIG_NO_SCAN_PROCESSING
228CFLAGS += -DCONFIG_NO_SCAN_PROCESSING
229endif
230
231ifdef CONFIG_SUITEB
232CFLAGS += -DCONFIG_SUITEB
233NEED_SHA256=y
234NEED_AES_OMAC1=y
235endif
236
237ifdef CONFIG_SUITEB192
238CFLAGS += -DCONFIG_SUITEB192
239NEED_SHA384=y
240endif
241
242ifdef CONFIG_OCV
243CFLAGS += -DCONFIG_OCV
244OBJS += ../src/common/ocv.o
245CONFIG_IEEE80211W=y
246endif
247
248ifdef CONFIG_IEEE80211W
249CFLAGS += -DCONFIG_IEEE80211W
250NEED_SHA256=y
251NEED_AES_OMAC1=y
252endif
253
254ifdef CONFIG_IEEE80211R
255CFLAGS += -DCONFIG_IEEE80211R
256OBJS += ../src/rsn_supp/wpa_ft.o
257NEED_SHA256=y
258NEED_AES_OMAC1=y
259endif
260
261ifdef CONFIG_MESH
262NEED_80211_COMMON=y
263NEED_SHA256=y
264NEED_AES_SIV=y
265CONFIG_SAE=y
266CONFIG_AP=y
267CFLAGS += -DCONFIG_MESH
268OBJS += mesh.o
269OBJS += mesh_mpm.o
270OBJS += mesh_rsn.o
271endif
272
273ifdef CONFIG_SAE
274CFLAGS += -DCONFIG_SAE
275OBJS += ../src/common/sae.o
276NEED_ECC=y
277NEED_DH_GROUPS=y
278NEED_DRAGONFLY=y
279endif
280
281ifdef CONFIG_DPP
282CFLAGS += -DCONFIG_DPP
283OBJS += ../src/common/dpp.o
284OBJS += dpp_supplicant.o
285NEED_AES_SIV=y
286NEED_HMAC_SHA256_KDF=y
287NEED_HMAC_SHA384_KDF=y
288NEED_HMAC_SHA512_KDF=y
289NEED_SHA256=y
290NEED_SHA384=y
291NEED_SHA512=y
292NEED_JSON=y
293NEED_GAS_SERVER=y
294NEED_BASE64=y
295ifdef CONFIG_DPP2
296CFLAGS += -DCONFIG_DPP2
297endif
298endif
299
300ifdef CONFIG_OWE
301CFLAGS += -DCONFIG_OWE
302NEED_ECC=y
303NEED_HMAC_SHA256_KDF=y
304NEED_HMAC_SHA384_KDF=y
305NEED_HMAC_SHA512_KDF=y
306NEED_SHA256=y
307NEED_SHA384=y
308NEED_SHA512=y
309endif
310
311ifdef CONFIG_FILS
312CFLAGS += -DCONFIG_FILS
313NEED_SHA384=y
314NEED_AES_SIV=y
315ifdef CONFIG_FILS_SK_PFS
316CFLAGS += -DCONFIG_FILS_SK_PFS
317NEED_ECC=y
318endif
319endif
320
321ifdef CONFIG_MBO
322CONFIG_WNM=y
323endif
324
325ifdef CONFIG_WNM
326CFLAGS += -DCONFIG_WNM
327OBJS += wnm_sta.o
328endif
329
330ifdef CONFIG_TDLS
331CFLAGS += -DCONFIG_TDLS
332OBJS += ../src/rsn_supp/tdls.o
333NEED_SHA256=y
334NEED_AES_OMAC1=y
335endif
336
337ifdef CONFIG_TDLS_TESTING
338CFLAGS += -DCONFIG_TDLS_TESTING
339endif
340
341ifdef CONFIG_PMKSA_CACHE_EXTERNAL
342CFLAGS += -DCONFIG_PMKSA_CACHE_EXTERNAL
343endif
344
345ifndef CONFIG_NO_WPA
346OBJS += ../src/rsn_supp/wpa.o
347OBJS += ../src/rsn_supp/preauth.o
348OBJS += ../src/rsn_supp/pmksa_cache.o
349OBJS += ../src/rsn_supp/wpa_ie.o
350OBJS += ../src/common/wpa_common.o
351NEED_AES=y
352NEED_SHA1=y
353NEED_MD5=y
354NEED_RC4=y
355else
356CFLAGS += -DCONFIG_NO_WPA
357ifeq ($(CONFIG_TLS), internal)
358NEED_SHA1=y
359NEED_MD5=y
360endif
361endif
362
363ifdef CONFIG_IBSS_RSN
364NEED_RSN_AUTHENTICATOR=y
365CFLAGS += -DCONFIG_IBSS_RSN
366CFLAGS += -DCONFIG_NO_VLAN
367OBJS += ibss_rsn.o
368endif
369
370ifdef CONFIG_MATCH_IFACE
371CFLAGS += -DCONFIG_MATCH_IFACE
372endif
373
374ifdef CONFIG_P2P
375OBJS += p2p_supplicant.o
376OBJS += p2p_supplicant_sd.o
377OBJS += ../src/p2p/p2p.o
378OBJS += ../src/p2p/p2p_utils.o
379OBJS += ../src/p2p/p2p_parse.o
380OBJS += ../src/p2p/p2p_build.o
381OBJS += ../src/p2p/p2p_go_neg.o
382OBJS += ../src/p2p/p2p_sd.o
383OBJS += ../src/p2p/p2p_pd.o
384OBJS += ../src/p2p/p2p_invitation.o
385OBJS += ../src/p2p/p2p_dev_disc.o
386OBJS += ../src/p2p/p2p_group.o
387OBJS += ../src/ap/p2p_hostapd.o
388CFLAGS += -DCONFIG_P2P
389NEED_GAS=y
390NEED_OFFCHANNEL=y
391CONFIG_WPS=y
392CONFIG_AP=y
393ifdef CONFIG_P2P_STRICT
394CFLAGS += -DCONFIG_P2P_STRICT
395endif
396endif
397
398ifdef CONFIG_WIFI_DISPLAY
399CFLAGS += -DCONFIG_WIFI_DISPLAY
400OBJS += wifi_display.o
401endif
402
403ifdef CONFIG_HS20
404OBJS += hs20_supplicant.o
405CFLAGS += -DCONFIG_HS20
406CONFIG_INTERWORKING=y
407NEED_AES_OMAC1=y
408endif
409
410ifdef CONFIG_INTERWORKING
411OBJS += interworking.o
412CFLAGS += -DCONFIG_INTERWORKING
413NEED_GAS=y
414endif
415
416ifdef CONFIG_NO_ROAMING
417CFLAGS += -DCONFIG_NO_ROAMING
418endif
419
420include ../src/drivers/drivers.mak
421ifdef CONFIG_AP
422OBJS_d += $(DRV_BOTH_OBJS)
423CFLAGS += $(DRV_BOTH_CFLAGS)
424LDFLAGS += $(DRV_BOTH_LDFLAGS)
425LIBS += $(DRV_BOTH_LIBS)
426else
427NEED_AP_MLME=
428OBJS_d += $(DRV_WPA_OBJS)
429CFLAGS += $(DRV_WPA_CFLAGS)
430LDFLAGS += $(DRV_WPA_LDFLAGS)
431LIBS += $(DRV_WPA_LIBS)
432endif
433
434ifndef CONFIG_L2_PACKET
435CONFIG_L2_PACKET=linux
436endif
437
438OBJS_l2 += ../src/l2_packet/l2_packet_$(CONFIG_L2_PACKET).o
439
440ifeq ($(CONFIG_L2_PACKET), pcap)
441ifdef CONFIG_WINPCAP
442CFLAGS += -DCONFIG_WINPCAP
443LIBS += -lwpcap -lpacket
444LIBS_w += -lwpcap
445else
446LIBS += -ldnet -lpcap
447endif
448endif
449
450ifeq ($(CONFIG_L2_PACKET), winpcap)
451LIBS += -lwpcap -lpacket
452LIBS_w += -lwpcap
453endif
454
455ifeq ($(CONFIG_L2_PACKET), freebsd)
456LIBS += -lpcap
457endif
458
459ifdef CONFIG_ERP
460CFLAGS += -DCONFIG_ERP
461NEED_SHA256=y
462NEED_HMAC_SHA256_KDF=y
463endif
464
465ifdef CONFIG_EAP_TLS
466# EAP-TLS
467ifeq ($(CONFIG_EAP_TLS), dyn)
468CFLAGS += -DEAP_TLS_DYNAMIC
469EAPDYN += ../src/eap_peer/eap_tls.so
470else
471CFLAGS += -DEAP_TLS
472OBJS += ../src/eap_peer/eap_tls.o
473endif
474TLS_FUNCS=y
475CONFIG_IEEE8021X_EAPOL=y
476endif
477
478ifdef CONFIG_EAP_UNAUTH_TLS
479# EAP-UNAUTH-TLS
480CFLAGS += -DEAP_UNAUTH_TLS
481ifndef CONFIG_EAP_TLS
482OBJS += ../src/eap_peer/eap_tls.o
483TLS_FUNCS=y
484endif
485CONFIG_IEEE8021X_EAPOL=y
486endif
487
488ifdef CONFIG_EAP_PEAP
489# EAP-PEAP
490ifeq ($(CONFIG_EAP_PEAP), dyn)
491CFLAGS += -DEAP_PEAP_DYNAMIC
492EAPDYN += ../src/eap_peer/eap_peap.so
493else
494CFLAGS += -DEAP_PEAP
495OBJS += ../src/eap_peer/eap_peap.o
496OBJS += ../src/eap_common/eap_peap_common.o
497endif
498TLS_FUNCS=y
499CONFIG_IEEE8021X_EAPOL=y
500endif
501
502ifdef CONFIG_EAP_TTLS
503# EAP-TTLS
504ifeq ($(CONFIG_EAP_TTLS), dyn)
505CFLAGS += -DEAP_TTLS_DYNAMIC
506EAPDYN += ../src/eap_peer/eap_ttls.so
507else
508CFLAGS += -DEAP_TTLS
509OBJS += ../src/eap_peer/eap_ttls.o
510endif
511TLS_FUNCS=y
512ifndef CONFIG_FIPS
513MS_FUNCS=y
514CHAP=y
515endif
516CONFIG_IEEE8021X_EAPOL=y
517endif
518
519ifdef CONFIG_EAP_MD5
520# EAP-MD5
521ifeq ($(CONFIG_EAP_MD5), dyn)
522CFLAGS += -DEAP_MD5_DYNAMIC
523EAPDYN += ../src/eap_peer/eap_md5.so
524else
525CFLAGS += -DEAP_MD5
526OBJS += ../src/eap_peer/eap_md5.o
527endif
528CHAP=y
529CONFIG_IEEE8021X_EAPOL=y
530endif
531
532# backwards compatibility for old spelling
533ifdef CONFIG_MSCHAPV2
534ifndef CONFIG_EAP_MSCHAPV2
535CONFIG_EAP_MSCHAPV2=y
536endif
537endif
538
539ifdef CONFIG_EAP_MSCHAPV2
540# EAP-MSCHAPv2
541ifeq ($(CONFIG_EAP_MSCHAPV2), dyn)
542CFLAGS += -DEAP_MSCHAPv2_DYNAMIC
543EAPDYN += ../src/eap_peer/eap_mschapv2.so
544EAPDYN += ../src/eap_peer/mschapv2.so
545else
546CFLAGS += -DEAP_MSCHAPv2
547OBJS += ../src/eap_peer/eap_mschapv2.o
548OBJS += ../src/eap_peer/mschapv2.o
549endif
550MS_FUNCS=y
551CONFIG_IEEE8021X_EAPOL=y
552endif
553
554ifdef CONFIG_EAP_GTC
555# EAP-GTC
556ifeq ($(CONFIG_EAP_GTC), dyn)
557CFLAGS += -DEAP_GTC_DYNAMIC
558EAPDYN += ../src/eap_peer/eap_gtc.so
559else
560CFLAGS += -DEAP_GTC
561OBJS += ../src/eap_peer/eap_gtc.o
562endif
563CONFIG_IEEE8021X_EAPOL=y
564endif
565
566ifdef CONFIG_EAP_OTP
567# EAP-OTP
568ifeq ($(CONFIG_EAP_OTP), dyn)
569CFLAGS += -DEAP_OTP_DYNAMIC
570EAPDYN += ../src/eap_peer/eap_otp.so
571else
572CFLAGS += -DEAP_OTP
573OBJS += ../src/eap_peer/eap_otp.o
574endif
575CONFIG_IEEE8021X_EAPOL=y
576endif
577
578ifdef CONFIG_EAP_SIM
579# EAP-SIM
580ifeq ($(CONFIG_EAP_SIM), dyn)
581CFLAGS += -DEAP_SIM_DYNAMIC
582EAPDYN += ../src/eap_peer/eap_sim.so
583else
584CFLAGS += -DEAP_SIM
585OBJS += ../src/eap_peer/eap_sim.o
586endif
587CONFIG_IEEE8021X_EAPOL=y
588CONFIG_EAP_SIM_COMMON=y
589NEED_AES_CBC=y
590endif
591
592ifdef CONFIG_EAP_LEAP
593# EAP-LEAP
594ifeq ($(CONFIG_EAP_LEAP), dyn)
595CFLAGS += -DEAP_LEAP_DYNAMIC
596EAPDYN += ../src/eap_peer/eap_leap.so
597else
598CFLAGS += -DEAP_LEAP
599OBJS += ../src/eap_peer/eap_leap.o
600endif
601MS_FUNCS=y
602CONFIG_IEEE8021X_EAPOL=y
603endif
604
605ifdef CONFIG_EAP_PSK
606# EAP-PSK
607ifeq ($(CONFIG_EAP_PSK), dyn)
608CFLAGS += -DEAP_PSK_DYNAMIC
609EAPDYN += ../src/eap_peer/eap_psk.so
610else
611CFLAGS += -DEAP_PSK
612OBJS += ../src/eap_peer/eap_psk.o ../src/eap_common/eap_psk_common.o
613endif
614CONFIG_IEEE8021X_EAPOL=y
615NEED_AES=y
616NEED_AES_OMAC1=y
617NEED_AES_ENCBLOCK=y
618NEED_AES_EAX=y
619endif
620
621ifdef CONFIG_EAP_AKA
622# EAP-AKA
623ifeq ($(CONFIG_EAP_AKA), dyn)
624CFLAGS += -DEAP_AKA_DYNAMIC
625EAPDYN += ../src/eap_peer/eap_aka.so
626else
627CFLAGS += -DEAP_AKA
628OBJS += ../src/eap_peer/eap_aka.o
629endif
630CONFIG_IEEE8021X_EAPOL=y
631CONFIG_EAP_SIM_COMMON=y
632NEED_AES_CBC=y
633endif
634
635ifdef CONFIG_EAP_PROXY
636CFLAGS += -DCONFIG_EAP_PROXY
637OBJS += ../src/eap_peer/eap_proxy_$(CONFIG_EAP_PROXY).o
638include eap_proxy_$(CONFIG_EAP_PROXY).mak
639CONFIG_IEEE8021X_EAPOL=y
640endif
641
642ifdef CONFIG_EAP_AKA_PRIME
643# EAP-AKA'
644ifeq ($(CONFIG_EAP_AKA_PRIME), dyn)
645CFLAGS += -DEAP_AKA_PRIME_DYNAMIC
646else
647CFLAGS += -DEAP_AKA_PRIME
648endif
649NEED_SHA256=y
650endif
651
652ifdef CONFIG_EAP_SIM_COMMON
653OBJS += ../src/eap_common/eap_sim_common.o
654NEED_AES=y
655NEED_FIPS186_2_PRF=y
656endif
657
658ifdef CONFIG_EAP_FAST
659# EAP-FAST
660ifeq ($(CONFIG_EAP_FAST), dyn)
661CFLAGS += -DEAP_FAST_DYNAMIC
662EAPDYN += ../src/eap_peer/eap_fast.so
663EAPDYN += ../src/eap_common/eap_fast_common.o
664else
665CFLAGS += -DEAP_FAST
666OBJS += ../src/eap_peer/eap_fast.o ../src/eap_peer/eap_fast_pac.o
667OBJS += ../src/eap_common/eap_fast_common.o
668endif
669TLS_FUNCS=y
670CONFIG_IEEE8021X_EAPOL=y
671NEED_T_PRF=y
672endif
673
674ifdef CONFIG_EAP_TEAP
675# EAP-TEAP
676ifeq ($(CONFIG_EAP_TEAP), dyn)
677CFLAGS += -DEAP_TEAP_DYNAMIC
678EAPDYN += ../src/eap_peer/eap_teap.so
679EAPDYN += ../src/eap_common/eap_teap_common.o
680else
681CFLAGS += -DEAP_TEAP
682OBJS += ../src/eap_peer/eap_teap.o ../src/eap_peer/eap_teap_pac.o
683OBJS += ../src/eap_common/eap_teap_common.o
684endif
685TLS_FUNCS=y
686CONFIG_IEEE8021X_EAPOL=y
687NEED_T_PRF=y
688NEED_SHA384=y
689endif
690
691ifdef CONFIG_EAP_PAX
692# EAP-PAX
693ifeq ($(CONFIG_EAP_PAX), dyn)
694CFLAGS += -DEAP_PAX_DYNAMIC
695EAPDYN += ../src/eap_peer/eap_pax.so
696else
697CFLAGS += -DEAP_PAX
698OBJS += ../src/eap_peer/eap_pax.o ../src/eap_common/eap_pax_common.o
699endif
700CONFIG_IEEE8021X_EAPOL=y
701endif
702
703ifdef CONFIG_EAP_SAKE
704# EAP-SAKE
705ifeq ($(CONFIG_EAP_SAKE), dyn)
706CFLAGS += -DEAP_SAKE_DYNAMIC
707EAPDYN += ../src/eap_peer/eap_sake.so
708else
709CFLAGS += -DEAP_SAKE
710OBJS += ../src/eap_peer/eap_sake.o ../src/eap_common/eap_sake_common.o
711endif
712CONFIG_IEEE8021X_EAPOL=y
713endif
714
715ifdef CONFIG_EAP_GPSK
716# EAP-GPSK
717ifeq ($(CONFIG_EAP_GPSK), dyn)
718CFLAGS += -DEAP_GPSK_DYNAMIC
719EAPDYN += ../src/eap_peer/eap_gpsk.so
720else
721CFLAGS += -DEAP_GPSK
722OBJS += ../src/eap_peer/eap_gpsk.o ../src/eap_common/eap_gpsk_common.o
723endif
724CONFIG_IEEE8021X_EAPOL=y
725ifdef CONFIG_EAP_GPSK_SHA256
726CFLAGS += -DEAP_GPSK_SHA256
727endif
728NEED_SHA256=y
729NEED_AES_OMAC1=y
730endif
731
732ifdef CONFIG_EAP_PWD
733CFLAGS += -DEAP_PWD
734ifeq ($(CONFIG_TLS), wolfssl)
735CFLAGS += -DCONFIG_ECC
736endif
737OBJS += ../src/eap_peer/eap_pwd.o ../src/eap_common/eap_pwd_common.o
738CONFIG_IEEE8021X_EAPOL=y
739NEED_SHA256=y
740NEED_ECC=y
741NEED_DRAGONFLY=y
742endif
743
744ifdef CONFIG_EAP_EKE
745# EAP-EKE
746ifeq ($(CONFIG_EAP_EKE), dyn)
747CFLAGS += -DEAP_EKE_DYNAMIC
748EAPDYN += ../src/eap_peer/eap_eke.so
749else
750CFLAGS += -DEAP_EKE
751OBJS += ../src/eap_peer/eap_eke.o ../src/eap_common/eap_eke_common.o
752endif
753CONFIG_IEEE8021X_EAPOL=y
754NEED_DH_GROUPS=y
755NEED_DH_GROUPS_ALL=y
756NEED_SHA256=y
757NEED_AES_CBC=y
758endif
759
760ifdef CONFIG_WPS
761# EAP-WSC
762CFLAGS += -DCONFIG_WPS -DEAP_WSC
763OBJS += wps_supplicant.o
764OBJS += ../src/utils/uuid.o
765OBJS += ../src/eap_peer/eap_wsc.o ../src/eap_common/eap_wsc_common.o
766OBJS += ../src/wps/wps.o
767OBJS += ../src/wps/wps_common.o
768OBJS += ../src/wps/wps_attr_parse.o
769OBJS += ../src/wps/wps_attr_build.o
770OBJS += ../src/wps/wps_attr_process.o
771OBJS += ../src/wps/wps_dev_attr.o
772OBJS += ../src/wps/wps_enrollee.o
773OBJS += ../src/wps/wps_registrar.o
774CONFIG_IEEE8021X_EAPOL=y
775NEED_DH_GROUPS=y
776NEED_SHA256=y
777NEED_BASE64=y
778NEED_AES_CBC=y
779NEED_MODEXP=y
780
781ifdef CONFIG_WPS_NFC
782CFLAGS += -DCONFIG_WPS_NFC
783OBJS += ../src/wps/ndef.o
784NEED_WPS_OOB=y
785endif
786
787ifdef NEED_WPS_OOB
788CFLAGS += -DCONFIG_WPS_OOB
789endif
790
791ifdef CONFIG_WPS_ER
792CONFIG_WPS_UPNP=y
793CFLAGS += -DCONFIG_WPS_ER
794OBJS += ../src/wps/wps_er.o
795OBJS += ../src/wps/wps_er_ssdp.o
796endif
797
798ifdef CONFIG_WPS_UPNP
799CFLAGS += -DCONFIG_WPS_UPNP
800OBJS += ../src/wps/wps_upnp.o
801OBJS += ../src/wps/wps_upnp_ssdp.o
802OBJS += ../src/wps/wps_upnp_web.o
803OBJS += ../src/wps/wps_upnp_event.o
804OBJS += ../src/wps/wps_upnp_ap.o
805OBJS += ../src/wps/upnp_xml.o
806OBJS += ../src/wps/httpread.o
807OBJS += ../src/wps/http_client.o
808OBJS += ../src/wps/http_server.o
809endif
810
811ifdef CONFIG_WPS_STRICT
812CFLAGS += -DCONFIG_WPS_STRICT
813OBJS += ../src/wps/wps_validate.o
814endif
815
816ifdef CONFIG_WPS_TESTING
817CFLAGS += -DCONFIG_WPS_TESTING
818endif
819
820ifdef CONFIG_WPS_REG_DISABLE_OPEN
821CFLAGS += -DCONFIG_WPS_REG_DISABLE_OPEN
822endif
823
824endif
825
826ifdef CONFIG_EAP_IKEV2
827# EAP-IKEv2
828ifeq ($(CONFIG_EAP_IKEV2), dyn)
829CFLAGS += -DEAP_IKEV2_DYNAMIC
830EAPDYN += ../src/eap_peer/eap_ikev2.so ../src/eap_peer/ikev2.o
831EAPDYN += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
832else
833CFLAGS += -DEAP_IKEV2
834OBJS += ../src/eap_peer/eap_ikev2.o ../src/eap_peer/ikev2.o
835OBJS += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
836endif
837CONFIG_IEEE8021X_EAPOL=y
838NEED_DH_GROUPS=y
839NEED_DH_GROUPS_ALL=y
840NEED_MODEXP=y
841NEED_CIPHER=y
842endif
843
844ifdef CONFIG_EAP_VENDOR_TEST
845ifeq ($(CONFIG_EAP_VENDOR_TEST), dyn)
846CFLAGS += -DEAP_VENDOR_TEST_DYNAMIC
847EAPDYN += ../src/eap_peer/eap_vendor_test.so
848else
849CFLAGS += -DEAP_VENDOR_TEST
850OBJS += ../src/eap_peer/eap_vendor_test.o
851endif
852CONFIG_IEEE8021X_EAPOL=y
853endif
854
855ifdef CONFIG_EAP_TNC
856# EAP-TNC
857CFLAGS += -DEAP_TNC
858OBJS += ../src/eap_peer/eap_tnc.o
859OBJS += ../src/eap_peer/tncc.o
860NEED_BASE64=y
861ifndef CONFIG_NATIVE_WINDOWS
862ifndef CONFIG_DRIVER_BSD
863LIBS += -ldl
864endif
865endif
866endif
867
868ifdef CONFIG_MACSEC
869CFLAGS += -DCONFIG_MACSEC
870CONFIG_IEEE8021X_EAPOL=y
871NEED_AES_ENCBLOCK=y
872NEED_AES_UNWRAP=y
873NEED_AES_WRAP=y
874NEED_AES_OMAC1=y
875OBJS += wpas_kay.o
876OBJS += ../src/pae/ieee802_1x_cp.o
877OBJS += ../src/pae/ieee802_1x_kay.o
878OBJS += ../src/pae/ieee802_1x_key.o
879OBJS += ../src/pae/ieee802_1x_secy_ops.o
880ifdef CONFIG_AP
881OBJS += ../src/ap/wpa_auth_kay.o
882endif
883endif
884
885ifdef CONFIG_IEEE8021X_EAPOL
886# IEEE 802.1X/EAPOL state machines (e.g., for RADIUS authentication)
887CFLAGS += -DIEEE8021X_EAPOL
888OBJS += ../src/eapol_supp/eapol_supp_sm.o
889OBJS += ../src/eap_peer/eap.o ../src/eap_peer/eap_methods.o
890NEED_EAP_COMMON=y
891ifdef CONFIG_DYNAMIC_EAP_METHODS
892CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
893LIBS += -ldl -rdynamic
894endif
895endif
896
897ifdef CONFIG_AP
898NEED_EAP_COMMON=y
899NEED_RSN_AUTHENTICATOR=y
900CFLAGS += -DCONFIG_AP
901OBJS += ap.o
902CFLAGS += -DCONFIG_NO_RADIUS
903CFLAGS += -DCONFIG_NO_ACCOUNTING
904CFLAGS += -DCONFIG_NO_VLAN
905OBJS += ../src/ap/hostapd.o
906OBJS += ../src/ap/wpa_auth_glue.o
907OBJS += ../src/ap/utils.o
908OBJS += ../src/ap/authsrv.o
909OBJS += ../src/ap/ap_config.o
910OBJS += ../src/utils/ip_addr.o
911OBJS += ../src/ap/sta_info.o
912OBJS += ../src/ap/tkip_countermeasures.o
913OBJS += ../src/ap/ap_mlme.o
914OBJS += ../src/ap/ieee802_1x.o
915OBJS += ../src/eapol_auth/eapol_auth_sm.o
916OBJS += ../src/ap/ieee802_11_auth.o
917OBJS += ../src/ap/ieee802_11_shared.o
918OBJS += ../src/ap/drv_callbacks.o
919OBJS += ../src/ap/ap_drv_ops.o
920OBJS += ../src/ap/beacon.o
921OBJS += ../src/ap/bss_load.o
922OBJS += ../src/ap/eap_user_db.o
923OBJS += ../src/ap/neighbor_db.o
924OBJS += ../src/ap/rrm.o
925ifdef CONFIG_IEEE80211N
926OBJS += ../src/ap/ieee802_11_ht.o
927ifdef CONFIG_IEEE80211AC
928OBJS += ../src/ap/ieee802_11_vht.o
929endif
930ifdef CONFIG_IEEE80211AX
931OBJS += ../src/ap/ieee802_11_he.o
932endif
933endif
934ifdef CONFIG_WNM_AP
935CFLAGS += -DCONFIG_WNM_AP
936OBJS += ../src/ap/wnm_ap.o
937endif
938ifdef CONFIG_MBO
939OBJS += ../src/ap/mbo_ap.o
940endif
941ifdef CONFIG_FILS
942OBJS += ../src/ap/fils_hlp.o
943endif
944ifdef CONFIG_CTRL_IFACE
945OBJS += ../src/ap/ctrl_iface_ap.o
946endif
947
948CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
949OBJS += ../src/eap_server/eap_server.o
950OBJS += ../src/eap_server/eap_server_identity.o
951OBJS += ../src/eap_server/eap_server_methods.o
952
953ifdef CONFIG_IEEE80211N
954CFLAGS += -DCONFIG_IEEE80211N
955ifdef CONFIG_IEEE80211AC
956CFLAGS += -DCONFIG_IEEE80211AC
957endif
958ifdef CONFIG_IEEE80211AX
959CFLAGS += -DCONFIG_IEEE80211AX
960endif
961endif
962
963ifdef NEED_AP_MLME
964OBJS += ../src/ap/wmm.o
965OBJS += ../src/ap/ap_list.o
966OBJS += ../src/ap/ieee802_11.o
967OBJS += ../src/ap/hw_features.o
968OBJS += ../src/ap/dfs.o
969CFLAGS += -DNEED_AP_MLME
970endif
971ifdef CONFIG_WPS
972CFLAGS += -DEAP_SERVER_WSC
973OBJS += ../src/ap/wps_hostapd.o
974OBJS += ../src/eap_server/eap_server_wsc.o
975endif
976ifdef CONFIG_DPP
977OBJS += ../src/ap/dpp_hostapd.o
978OBJS += ../src/ap/gas_query_ap.o
979endif
980ifdef CONFIG_INTERWORKING
981OBJS += ../src/ap/gas_serv.o
982endif
983ifdef CONFIG_HS20
984OBJS += ../src/ap/hs20.o
985endif
986endif
987
988ifdef CONFIG_MBO
989OBJS += mbo.o
990CFLAGS += -DCONFIG_MBO
991endif
992
993ifdef NEED_RSN_AUTHENTICATOR
994CFLAGS += -DCONFIG_NO_RADIUS
995NEED_AES_WRAP=y
996OBJS += ../src/ap/wpa_auth.o
997OBJS += ../src/ap/wpa_auth_ie.o
998OBJS += ../src/ap/pmksa_cache_auth.o
999endif
1000
1001ifdef CONFIG_ACS
1002CFLAGS += -DCONFIG_ACS
1003OBJS += ../src/ap/acs.o
1004LIBS += -lm
1005endif
1006
1007ifdef CONFIG_PCSC
1008# PC/SC interface for smartcards (USIM, GSM SIM)
1009CFLAGS += -DPCSC_FUNCS -I/usr/include/PCSC
1010OBJS += ../src/utils/pcsc_funcs.o
1011# -lpthread may not be needed depending on how pcsc-lite was configured
1012ifdef CONFIG_NATIVE_WINDOWS
1013#Once MinGW gets support for WinScard, -lwinscard could be used instead of the
1014#dynamic symbol loading that is now used in pcsc_funcs.c
1015#LIBS += -lwinscard
1016else
1017ifdef CONFIG_OSX
1018LIBS += -framework PCSC
1019else
1020LIBS += -lpcsclite -lpthread
1021endif
1022endif
1023endif
1024
1025ifdef CONFIG_SIM_SIMULATOR
1026CFLAGS += -DCONFIG_SIM_SIMULATOR
1027NEED_MILENAGE=y
1028endif
1029
1030ifdef CONFIG_USIM_SIMULATOR
1031CFLAGS += -DCONFIG_USIM_SIMULATOR
1032NEED_MILENAGE=y
1033endif
1034
1035ifdef NEED_MILENAGE
1036OBJS += ../src/crypto/milenage.o
1037NEED_AES_ENCBLOCK=y
1038endif
1039
1040ifdef CONFIG_PKCS12
1041CFLAGS += -DPKCS12_FUNCS
1042endif
1043
1044ifdef CONFIG_SMARTCARD
1045CFLAGS += -DCONFIG_SMARTCARD
1046endif
1047
1048ifdef NEED_DRAGONFLY
1049OBJS += ../src/common/dragonfly.o
1050endif
1051
1052ifdef MS_FUNCS
1053OBJS += ../src/crypto/ms_funcs.o
1054NEED_DES=y
1055NEED_MD4=y
1056endif
1057
1058ifdef CHAP
1059OBJS += ../src/eap_common/chap.o
1060endif
1061
1062ifdef TLS_FUNCS
1063NEED_DES=y
1064# Shared TLS functions (needed for EAP_TLS, EAP_PEAP, EAP_TTLS, EAP_FAST, and
1065# EAP_TEAP)
1066OBJS += ../src/eap_peer/eap_tls_common.o
1067ifndef CONFIG_FIPS
1068NEED_TLS_PRF=y
1069NEED_SHA1=y
1070NEED_MD5=y
1071endif
1072endif
1073
1074ifndef CONFIG_TLS
1075CONFIG_TLS=openssl
1076endif
1077
1078ifdef CONFIG_TLSV11
1079CFLAGS += -DCONFIG_TLSV11
1080endif
1081
1082ifdef CONFIG_TLSV12
1083CFLAGS += -DCONFIG_TLSV12
1084NEED_SHA256=y
1085endif
1086
1087ifeq ($(CONFIG_TLS), wolfssl)
1088ifdef TLS_FUNCS
1089CFLAGS += -DWOLFSSL_DER_LOAD -I/usr/local/include/wolfssl
1090OBJS += ../src/crypto/tls_wolfssl.o
1091endif
1092OBJS += ../src/crypto/crypto_wolfssl.o
1093OBJS_p += ../src/crypto/crypto_wolfssl.o
1094ifdef NEED_FIPS186_2_PRF
1095OBJS += ../src/crypto/fips_prf_wolfssl.o
1096endif
1097NEED_TLS_PRF_SHA256=y
1098LIBS += -lwolfssl -lm
1099LIBS_p += -lwolfssl -lm
1100endif
1101
1102ifeq ($(CONFIG_TLS), openssl)
1103ifdef TLS_FUNCS
1104CFLAGS += -DEAP_TLS_OPENSSL
1105OBJS += ../src/crypto/tls_openssl.o
1106OBJS += ../src/crypto/tls_openssl_ocsp.o
1107LIBS += -lssl
1108endif
1109OBJS += ../src/crypto/crypto_openssl.o
1110OBJS_p += ../src/crypto/crypto_openssl.o
1111OBJS_priv += ../src/crypto/crypto_openssl.o
1112ifdef NEED_FIPS186_2_PRF
1113OBJS += ../src/crypto/fips_prf_openssl.o
1114endif
1115NEED_SHA256=y
1116NEED_TLS_PRF_SHA256=y
1117LIBS += -lcrypto
1118LIBS_p += -lcrypto
1119ifdef CONFIG_TLS_ADD_DL
1120LIBS += -ldl
1121LIBS_p += -ldl
1122endif
1123ifndef CONFIG_TLS_DEFAULT_CIPHERS
1124CONFIG_TLS_DEFAULT_CIPHERS = "DEFAULT:!EXP:!LOW"
1125endif
1126CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\"
1127endif
1128
1129ifeq ($(CONFIG_TLS), gnutls)
1130ifndef CONFIG_CRYPTO
1131# default to libgcrypt
1132CONFIG_CRYPTO=gnutls
1133endif
1134ifdef TLS_FUNCS
1135OBJS += ../src/crypto/tls_gnutls.o
1136LIBS += -lgnutls -lgpg-error
1137endif
1138OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
1139OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
1140OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o
1141ifdef NEED_FIPS186_2_PRF
1142OBJS += ../src/crypto/fips_prf_internal.o
1143SHA1OBJS += ../src/crypto/sha1-internal.o
1144endif
1145ifeq ($(CONFIG_CRYPTO), gnutls)
1146LIBS += -lgcrypt
1147LIBS_p += -lgcrypt
1148CONFIG_INTERNAL_RC4=y
1149CONFIG_INTERNAL_DH_GROUP5=y
1150endif
1151ifeq ($(CONFIG_CRYPTO), nettle)
1152LIBS += -lnettle -lgmp
1153LIBS_p += -lnettle -lgmp
1154CONFIG_INTERNAL_RC4=y
1155CONFIG_INTERNAL_DH_GROUP5=y
1156endif
1157endif
1158
1159ifeq ($(CONFIG_TLS), internal)
1160ifndef CONFIG_CRYPTO
1161CONFIG_CRYPTO=internal
1162endif
1163ifdef TLS_FUNCS
1164OBJS += ../src/crypto/crypto_internal-rsa.o
1165OBJS += ../src/crypto/tls_internal.o
1166OBJS += ../src/tls/tlsv1_common.o
1167OBJS += ../src/tls/tlsv1_record.o
1168OBJS += ../src/tls/tlsv1_cred.o
1169OBJS += ../src/tls/tlsv1_client.o
1170OBJS += ../src/tls/tlsv1_client_write.o
1171OBJS += ../src/tls/tlsv1_client_read.o
1172OBJS += ../src/tls/tlsv1_client_ocsp.o
1173OBJS += ../src/tls/asn1.o
1174OBJS += ../src/tls/rsa.o
1175OBJS += ../src/tls/x509v3.o
1176OBJS += ../src/tls/pkcs1.o
1177OBJS += ../src/tls/pkcs5.o
1178OBJS += ../src/tls/pkcs8.o
1179NEED_SHA256=y
1180NEED_BASE64=y
1181NEED_TLS_PRF=y
1182ifdef CONFIG_TLSV12
1183NEED_TLS_PRF_SHA256=y
1184endif
1185NEED_MODEXP=y
1186NEED_CIPHER=y
1187CFLAGS += -DCONFIG_TLS_INTERNAL_CLIENT
1188endif
1189ifdef NEED_CIPHER
1190NEED_DES=y
1191OBJS += ../src/crypto/crypto_internal-cipher.o
1192endif
1193ifdef NEED_MODEXP
1194OBJS += ../src/crypto/crypto_internal-modexp.o
1195OBJS += ../src/tls/bignum.o
1196endif
1197ifeq ($(CONFIG_CRYPTO), libtomcrypt)
1198OBJS += ../src/crypto/crypto_libtomcrypt.o
1199OBJS_p += ../src/crypto/crypto_libtomcrypt.o
1200LIBS += -ltomcrypt -ltfm
1201LIBS_p += -ltomcrypt -ltfm
1202CONFIG_INTERNAL_SHA256=y
1203CONFIG_INTERNAL_RC4=y
1204CONFIG_INTERNAL_DH_GROUP5=y
1205endif
1206ifeq ($(CONFIG_CRYPTO), internal)
1207OBJS += ../src/crypto/crypto_internal.o
1208OBJS_p += ../src/crypto/crypto_internal.o
1209NEED_AES_ENC=y
1210CFLAGS += -DCONFIG_CRYPTO_INTERNAL
1211ifdef CONFIG_INTERNAL_LIBTOMMATH
1212CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
1213ifdef CONFIG_INTERNAL_LIBTOMMATH_FAST
1214CFLAGS += -DLTM_FAST
1215endif
1216else
1217LIBS += -ltommath
1218LIBS_p += -ltommath
1219endif
1220CONFIG_INTERNAL_AES=y
1221CONFIG_INTERNAL_DES=y
1222CONFIG_INTERNAL_SHA1=y
1223CONFIG_INTERNAL_MD4=y
1224CONFIG_INTERNAL_MD5=y
1225CONFIG_INTERNAL_SHA256=y
1226CONFIG_INTERNAL_SHA384=y
1227CONFIG_INTERNAL_SHA512=y
1228CONFIG_INTERNAL_RC4=y
1229CONFIG_INTERNAL_DH_GROUP5=y
1230endif
1231ifeq ($(CONFIG_CRYPTO), cryptoapi)
1232OBJS += ../src/crypto/crypto_cryptoapi.o
1233OBJS_p += ../src/crypto/crypto_cryptoapi.o
1234CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
1235CONFIG_INTERNAL_SHA256=y
1236CONFIG_INTERNAL_RC4=y
1237endif
1238endif
1239
1240ifeq ($(CONFIG_TLS), linux)
1241OBJS += ../src/crypto/crypto_linux.o
1242OBJS_p += ../src/crypto/crypto_linux.o
1243ifdef TLS_FUNCS
1244OBJS += ../src/crypto/crypto_internal-rsa.o
1245OBJS += ../src/crypto/tls_internal.o
1246OBJS += ../src/tls/tlsv1_common.o
1247OBJS += ../src/tls/tlsv1_record.o
1248OBJS += ../src/tls/tlsv1_cred.o
1249OBJS += ../src/tls/tlsv1_client.o
1250OBJS += ../src/tls/tlsv1_client_write.o
1251OBJS += ../src/tls/tlsv1_client_read.o
1252OBJS += ../src/tls/tlsv1_client_ocsp.o
1253OBJS += ../src/tls/asn1.o
1254OBJS += ../src/tls/rsa.o
1255OBJS += ../src/tls/x509v3.o
1256OBJS += ../src/tls/pkcs1.o
1257OBJS += ../src/tls/pkcs5.o
1258OBJS += ../src/tls/pkcs8.o
1259NEED_SHA256=y
1260NEED_BASE64=y
1261NEED_TLS_PRF=y
1262ifdef CONFIG_TLSV12
1263NEED_TLS_PRF_SHA256=y
1264endif
1265NEED_MODEXP=y
1266NEED_CIPHER=y
1267CFLAGS += -DCONFIG_TLS_INTERNAL_CLIENT
1268endif
1269ifdef NEED_MODEXP
1270OBJS += ../src/crypto/crypto_internal-modexp.o
1271OBJS += ../src/tls/bignum.o
1272CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
1273CFLAGS += -DLTM_FAST
1274endif
1275CONFIG_INTERNAL_DH_GROUP5=y
1276ifdef NEED_FIPS186_2_PRF
1277OBJS += ../src/crypto/fips_prf_internal.o
1278OBJS += ../src/crypto/sha1-internal.o
1279endif
1280endif
1281
1282ifeq ($(CONFIG_TLS), none)
1283ifdef TLS_FUNCS
1284OBJS += ../src/crypto/tls_none.o
1285CFLAGS += -DEAP_TLS_NONE
1286CONFIG_INTERNAL_AES=y
1287CONFIG_INTERNAL_SHA1=y
1288CONFIG_INTERNAL_MD5=y
1289endif
1290OBJS += ../src/crypto/crypto_none.o
1291OBJS_p += ../src/crypto/crypto_none.o
1292CONFIG_INTERNAL_SHA256=y
1293CONFIG_INTERNAL_RC4=y
1294endif
1295
1296ifdef TLS_FUNCS
1297ifdef CONFIG_SMARTCARD
1298ifndef CONFIG_NATIVE_WINDOWS
1299ifneq ($(CONFIG_L2_PACKET), freebsd)
1300LIBS += -ldl
1301endif
1302endif
1303endif
1304endif
1305
1306ifndef TLS_FUNCS
1307OBJS += ../src/crypto/tls_none.o
1308ifeq ($(CONFIG_TLS), internal)
1309CONFIG_INTERNAL_AES=y
1310CONFIG_INTERNAL_SHA1=y
1311CONFIG_INTERNAL_MD5=y
1312CONFIG_INTERNAL_RC4=y
1313endif
1314endif
1315
1316AESOBJS = # none so far (see below)
1317ifdef CONFIG_INTERNAL_AES
1318AESOBJS += ../src/crypto/aes-internal.o ../src/crypto/aes-internal-dec.o
1319endif
1320
1321ifneq ($(CONFIG_TLS), openssl)
1322ifneq ($(CONFIG_TLS), wolfssl)
1323NEED_INTERNAL_AES_WRAP=y
1324endif
1325endif
1326ifdef CONFIG_OPENSSL_INTERNAL_AES_WRAP
1327# Seems to be needed at least with BoringSSL
1328NEED_INTERNAL_AES_WRAP=y
1329CFLAGS += -DCONFIG_OPENSSL_INTERNAL_AES_WRAP
1330endif
1331ifdef CONFIG_FIPS
1332# Have to use internal AES key wrap routines to use OpenSSL EVP since the
1333# OpenSSL AES_wrap_key()/AES_unwrap_key() API is not available in FIPS mode.
1334NEED_INTERNAL_AES_WRAP=y
1335endif
1336
1337ifdef NEED_INTERNAL_AES_WRAP
1338ifneq ($(CONFIG_TLS), linux)
1339AESOBJS += ../src/crypto/aes-unwrap.o
1340endif
1341endif
1342ifdef NEED_AES_EAX
1343AESOBJS += ../src/crypto/aes-eax.o
1344NEED_AES_CTR=y
1345NEED_AES_OMAC1=y
1346endif
1347ifdef NEED_AES_SIV
1348AESOBJS += ../src/crypto/aes-siv.o
1349NEED_AES_CTR=y
1350NEED_AES_OMAC1=y
1351endif
1352ifdef NEED_AES_CTR
1353AESOBJS += ../src/crypto/aes-ctr.o
1354endif
1355ifdef NEED_AES_ENCBLOCK
1356AESOBJS += ../src/crypto/aes-encblock.o
1357endif
1358ifdef NEED_AES_OMAC1
1359NEED_AES_ENC=y
1360ifdef CONFIG_OPENSSL_CMAC
1361CFLAGS += -DCONFIG_OPENSSL_CMAC
1362else
1363ifneq ($(CONFIG_TLS), linux)
1364ifneq ($(CONFIG_TLS), wolfssl)
1365AESOBJS += ../src/crypto/aes-omac1.o
1366endif
1367endif
1368endif
1369endif
1370ifdef NEED_AES_WRAP
1371NEED_AES_ENC=y
1372ifdef NEED_INTERNAL_AES_WRAP
1373AESOBJS += ../src/crypto/aes-wrap.o
1374endif
1375endif
1376ifdef NEED_AES_CBC
1377NEED_AES_ENC=y
1378ifneq ($(CONFIG_TLS), openssl)
1379ifneq ($(CONFIG_TLS), linux)
1380ifneq ($(CONFIG_TLS), wolfssl)
1381AESOBJS += ../src/crypto/aes-cbc.o
1382endif
1383endif
1384endif
1385endif
1386ifdef NEED_AES_ENC
1387ifdef CONFIG_INTERNAL_AES
1388AESOBJS += ../src/crypto/aes-internal-enc.o
1389endif
1390endif
1391ifdef NEED_AES
1392OBJS += $(AESOBJS)
1393endif
1394
1395ifdef NEED_SHA1
1396ifneq ($(CONFIG_TLS), openssl)
1397ifneq ($(CONFIG_TLS), linux)
1398ifneq ($(CONFIG_TLS), gnutls)
1399ifneq ($(CONFIG_TLS), wolfssl)
1400SHA1OBJS += ../src/crypto/sha1.o
1401endif
1402endif
1403endif
1404endif
1405SHA1OBJS += ../src/crypto/sha1-prf.o
1406ifdef CONFIG_INTERNAL_SHA1
1407SHA1OBJS += ../src/crypto/sha1-internal.o
1408ifdef NEED_FIPS186_2_PRF
1409SHA1OBJS += ../src/crypto/fips_prf_internal.o
1410endif
1411endif
1412ifdef CONFIG_NO_WPA_PASSPHRASE
1413CFLAGS += -DCONFIG_NO_PBKDF2
1414else
1415ifneq ($(CONFIG_TLS), openssl)
1416ifneq ($(CONFIG_TLS), wolfssl)
1417SHA1OBJS += ../src/crypto/sha1-pbkdf2.o
1418endif
1419endif
1420endif
1421ifdef NEED_T_PRF
1422SHA1OBJS += ../src/crypto/sha1-tprf.o
1423endif
1424ifdef NEED_TLS_PRF
1425SHA1OBJS += ../src/crypto/sha1-tlsprf.o
1426endif
1427endif
1428
1429ifndef CONFIG_FIPS
1430ifneq ($(CONFIG_TLS), openssl)
1431ifneq ($(CONFIG_TLS), linux)
1432ifneq ($(CONFIG_TLS), gnutls)
1433ifneq ($(CONFIG_TLS), wolfssl)
1434MD5OBJS += ../src/crypto/md5.o
1435endif
1436endif
1437endif
1438endif
1439endif
1440ifdef NEED_MD5
1441ifdef CONFIG_INTERNAL_MD5
1442MD5OBJS += ../src/crypto/md5-internal.o
1443endif
1444OBJS += $(MD5OBJS)
1445OBJS_p += $(MD5OBJS)
1446OBJS_priv += $(MD5OBJS)
1447endif
1448
1449ifdef NEED_MD4
1450ifdef CONFIG_INTERNAL_MD4
1451OBJS += ../src/crypto/md4-internal.o
1452endif
1453endif
1454
1455DESOBJS = # none needed when not internal
1456ifdef NEED_DES
1457ifndef CONFIG_FIPS
1458CFLAGS += -DCONFIG_DES
1459endif
1460ifdef CONFIG_INTERNAL_DES
1461DESOBJS += ../src/crypto/des-internal.o
1462endif
1463endif
1464
1465ifdef CONFIG_NO_RC4
1466CFLAGS += -DCONFIG_NO_RC4
1467endif
1468
1469ifdef NEED_RC4
1470ifdef CONFIG_INTERNAL_RC4
1471ifndef CONFIG_NO_RC4
1472OBJS += ../src/crypto/rc4.o
1473endif
1474endif
1475endif
1476
1477SHA256OBJS = # none by default
1478ifdef NEED_SHA256
1479CFLAGS += -DCONFIG_SHA256
1480ifneq ($(CONFIG_TLS), openssl)
1481ifneq ($(CONFIG_TLS), linux)
1482ifneq ($(CONFIG_TLS), gnutls)
1483ifneq ($(CONFIG_TLS), wolfssl)
1484SHA256OBJS += ../src/crypto/sha256.o
1485endif
1486endif
1487endif
1488endif
1489SHA256OBJS += ../src/crypto/sha256-prf.o
1490ifdef CONFIG_INTERNAL_SHA256
1491SHA256OBJS += ../src/crypto/sha256-internal.o
1492endif
1493ifdef CONFIG_INTERNAL_SHA384
1494CFLAGS += -DCONFIG_INTERNAL_SHA384
1495SHA256OBJS += ../src/crypto/sha384-internal.o
1496endif
1497ifdef CONFIG_INTERNAL_SHA512
1498CFLAGS += -DCONFIG_INTERNAL_SHA512
1499SHA256OBJS += ../src/crypto/sha512-internal.o
1500endif
1501ifdef NEED_TLS_PRF_SHA256
1502SHA256OBJS += ../src/crypto/sha256-tlsprf.o
1503endif
1504ifdef NEED_HMAC_SHA256_KDF
1505CFLAGS += -DCONFIG_HMAC_SHA256_KDF
1506OBJS += ../src/crypto/sha256-kdf.o
1507endif
1508ifdef NEED_HMAC_SHA384_KDF
1509CFLAGS += -DCONFIG_HMAC_SHA384_KDF
1510OBJS += ../src/crypto/sha384-kdf.o
1511endif
1512ifdef NEED_HMAC_SHA512_KDF
1513CFLAGS += -DCONFIG_HMAC_SHA512_KDF
1514OBJS += ../src/crypto/sha512-kdf.o
1515endif
1516OBJS += $(SHA256OBJS)
1517endif
1518ifdef NEED_SHA384
1519ifneq ($(CONFIG_TLS), openssl)
1520ifneq ($(CONFIG_TLS), linux)
1521ifneq ($(CONFIG_TLS), gnutls)
1522ifneq ($(CONFIG_TLS), wolfssl)
1523OBJS += ../src/crypto/sha384.o
1524endif
1525endif
1526endif
1527endif
1528CFLAGS += -DCONFIG_SHA384
1529OBJS += ../src/crypto/sha384-prf.o
1530endif
1531ifdef NEED_SHA512
1532ifneq ($(CONFIG_TLS), openssl)
1533ifneq ($(CONFIG_TLS), linux)
1534ifneq ($(CONFIG_TLS), gnutls)
1535ifneq ($(CONFIG_TLS), wolfssl)
1536OBJS += ../src/crypto/sha512.o
1537endif
1538endif
1539endif
1540endif
1541CFLAGS += -DCONFIG_SHA512
1542OBJS += ../src/crypto/sha512-prf.o
1543endif
1544
1545ifdef NEED_DH_GROUPS
1546OBJS += ../src/crypto/dh_groups.o
1547endif
1548ifdef NEED_DH_GROUPS_ALL
1549CFLAGS += -DALL_DH_GROUPS
1550endif
1551ifdef CONFIG_INTERNAL_DH_GROUP5
1552ifdef NEED_DH_GROUPS
1553OBJS += ../src/crypto/dh_group5.o
1554endif
1555endif
1556
1557ifdef NEED_ECC
1558CFLAGS += -DCONFIG_ECC
1559endif
1560
1561ifdef CONFIG_NO_RANDOM_POOL
1562CFLAGS += -DCONFIG_NO_RANDOM_POOL
1563else
1564ifdef CONFIG_GETRANDOM
1565CFLAGS += -DCONFIG_GETRANDOM
1566endif
1567OBJS += ../src/crypto/random.o
1568endif
1569
1570ifdef CONFIG_CTRL_IFACE
1571ifeq ($(CONFIG_CTRL_IFACE), y)
1572ifdef CONFIG_NATIVE_WINDOWS
1573CONFIG_CTRL_IFACE=named_pipe
1574else
1575CONFIG_CTRL_IFACE=unix
1576endif
1577endif
1578CFLAGS += -DCONFIG_CTRL_IFACE
1579ifeq ($(CONFIG_CTRL_IFACE), unix)
1580CFLAGS += -DCONFIG_CTRL_IFACE_UNIX
1581OBJS += ../src/common/ctrl_iface_common.o
1582endif
1583ifeq ($(CONFIG_CTRL_IFACE), udp)
1584CFLAGS += -DCONFIG_CTRL_IFACE_UDP
1585endif
1586ifeq ($(CONFIG_CTRL_IFACE), udp6)
1587CONFIG_CTRL_IFACE=udp
1588CFLAGS += -DCONFIG_CTRL_IFACE_UDP
1589CFLAGS += -DCONFIG_CTRL_IFACE_UDP_IPV6
1590endif
1591ifeq ($(CONFIG_CTRL_IFACE), named_pipe)
1592CFLAGS += -DCONFIG_CTRL_IFACE_NAMED_PIPE
1593endif
1594ifeq ($(CONFIG_CTRL_IFACE), udp-remote)
1595CONFIG_CTRL_IFACE=udp
1596CFLAGS += -DCONFIG_CTRL_IFACE_UDP
1597CFLAGS += -DCONFIG_CTRL_IFACE_UDP_REMOTE
1598endif
1599ifeq ($(CONFIG_CTRL_IFACE), udp6-remote)
1600CONFIG_CTRL_IFACE=udp
1601CFLAGS += -DCONFIG_CTRL_IFACE_UDP
1602CFLAGS += -DCONFIG_CTRL_IFACE_UDP_REMOTE
1603CFLAGS += -DCONFIG_CTRL_IFACE_UDP_IPV6
1604endif
1605OBJS += ctrl_iface.o ctrl_iface_$(CONFIG_CTRL_IFACE).o
1606endif
1607
1608ifdef CONFIG_CTRL_IFACE_DBUS_NEW
1609CFLAGS += -DCONFIG_CTRL_IFACE_DBUS_NEW
1610OBJS += dbus/dbus_dict_helpers.o
1611OBJS += dbus/dbus_new_helpers.o
1612OBJS += dbus/dbus_new.o dbus/dbus_new_handlers.o
1613OBJS += dbus/dbus_common.o
1614ifdef CONFIG_WPS
1615OBJS += dbus/dbus_new_handlers_wps.o
1616endif
1617ifdef CONFIG_P2P
1618OBJS += dbus/dbus_new_handlers_p2p.o
1619endif
1620ifndef DBUS_LIBS
1621DBUS_LIBS := $(shell $(PKG_CONFIG) --libs dbus-1)
1622endif
1623ifndef DBUS_INCLUDE
1624DBUS_INCLUDE := $(shell $(PKG_CONFIG) --cflags dbus-1)
1625endif
1626ifdef CONFIG_CTRL_IFACE_DBUS_INTRO
1627OBJS += dbus/dbus_new_introspect.o
1628CFLAGS += -DCONFIG_CTRL_IFACE_DBUS_INTRO
1629endif
1630CFLAGS += $(DBUS_INCLUDE)
1631LIBS += $(DBUS_LIBS)
1632endif
1633
1634ifdef CONFIG_READLINE
1635OBJS_c += ../src/utils/edit_readline.o
1636LIBS_c += -lreadline -lncurses
1637else
1638ifdef CONFIG_WPA_CLI_EDIT
1639OBJS_c += ../src/utils/edit.o
1640else
1641OBJS_c += ../src/utils/edit_simple.o
1642endif
1643endif
1644
1645ifdef CONFIG_NATIVE_WINDOWS
1646CFLAGS += -DCONFIG_NATIVE_WINDOWS
1647LIBS += -lws2_32 -lgdi32 -lcrypt32
1648LIBS_c += -lws2_32
1649LIBS_p += -lws2_32 -lgdi32
1650ifeq ($(CONFIG_CRYPTO), cryptoapi)
1651LIBS_p += -lcrypt32
1652endif
1653endif
1654
1655ifdef CONFIG_NO_STDOUT_DEBUG
1656CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
1657ifndef CONFIG_CTRL_IFACE
1658CFLAGS += -DCONFIG_NO_WPA_MSG
1659endif
1660endif
1661
1662ifdef CONFIG_IPV6
1663# for eapol_test only
1664CFLAGS += -DCONFIG_IPV6
1665endif
1666
1667ifdef CONFIG_NO_LINUX_PACKET_SOCKET_WAR
1668CFLAGS += -DCONFIG_NO_LINUX_PACKET_SOCKET_WAR
1669endif
1670
1671ifdef NEED_BASE64
1672OBJS += ../src/utils/base64.o
1673endif
1674
1675ifdef NEED_SME
1676OBJS += sme.o
1677CFLAGS += -DCONFIG_SME
1678endif
1679
1680OBJS += ../src/common/ieee802_11_common.o
1681OBJS += ../src/common/hw_features_common.o
1682
1683ifdef NEED_EAP_COMMON
1684OBJS += ../src/eap_common/eap_common.o
1685endif
1686
1687ifndef CONFIG_MAIN
1688CONFIG_MAIN=main
1689endif
1690
1691ifdef CONFIG_DEBUG_SYSLOG
1692CFLAGS += -DCONFIG_DEBUG_SYSLOG
1693ifdef CONFIG_DEBUG_SYSLOG_FACILITY
1694CFLAGS += -DLOG_HOSTAPD="$(CONFIG_DEBUG_SYSLOG_FACILITY)"
1695endif
1696endif
1697
1698ifdef CONFIG_DEBUG_LINUX_TRACING
1699CFLAGS += -DCONFIG_DEBUG_LINUX_TRACING
1700endif
1701
1702ifdef CONFIG_DEBUG_FILE
1703CFLAGS += -DCONFIG_DEBUG_FILE
1704endif
1705
1706ifdef CONFIG_DELAYED_MIC_ERROR_REPORT
1707CFLAGS += -DCONFIG_DELAYED_MIC_ERROR_REPORT
1708endif
1709
1710ifdef CONFIG_FIPS
1711CFLAGS += -DCONFIG_FIPS
1712ifneq ($(CONFIG_TLS), openssl)
1713ifneq ($(CONFIG_TLS), wolfssl)
1714$(error CONFIG_FIPS=y requires CONFIG_TLS=openssl)
1715endif
1716endif
1717endif
1718
1719OBJS += $(SHA1OBJS) $(DESOBJS)
1720
1721OBJS_p += $(SHA1OBJS)
1722OBJS_p += $(SHA256OBJS)
1723OBJS_priv += $(SHA1OBJS)
1724
1725ifdef CONFIG_BGSCAN_SIMPLE
1726CFLAGS += -DCONFIG_BGSCAN_SIMPLE
1727OBJS += bgscan_simple.o
1728NEED_BGSCAN=y
1729endif
1730
1731ifdef CONFIG_BGSCAN_LEARN
1732CFLAGS += -DCONFIG_BGSCAN_LEARN
1733OBJS += bgscan_learn.o
1734NEED_BGSCAN=y
1735endif
1736
1737ifdef NEED_BGSCAN
1738CFLAGS += -DCONFIG_BGSCAN
1739OBJS += bgscan.o
1740endif
1741
1742ifdef CONFIG_AUTOSCAN_EXPONENTIAL
1743CFLAGS += -DCONFIG_AUTOSCAN_EXPONENTIAL
1744OBJS += autoscan_exponential.o
1745NEED_AUTOSCAN=y
1746endif
1747
1748ifdef CONFIG_AUTOSCAN_PERIODIC
1749CFLAGS += -DCONFIG_AUTOSCAN_PERIODIC
1750OBJS += autoscan_periodic.o
1751NEED_AUTOSCAN=y
1752endif
1753
1754ifdef NEED_AUTOSCAN
1755CFLAGS += -DCONFIG_AUTOSCAN
1756OBJS += autoscan.o
1757endif
1758
1759ifdef CONFIG_EXT_PASSWORD_TEST
1760OBJS += ../src/utils/ext_password_test.o
1761CFLAGS += -DCONFIG_EXT_PASSWORD_TEST
1762NEED_EXT_PASSWORD=y
1763endif
1764
1765ifdef NEED_EXT_PASSWORD
1766OBJS += ../src/utils/ext_password.o
1767CFLAGS += -DCONFIG_EXT_PASSWORD
1768endif
1769
1770ifdef NEED_GAS_SERVER
1771OBJS += ../src/common/gas_server.o
1772CFLAGS += -DCONFIG_GAS_SERVER
1773NEED_GAS=y
1774endif
1775
1776ifdef NEED_GAS
1777OBJS += ../src/common/gas.o
1778OBJS += gas_query.o
1779CFLAGS += -DCONFIG_GAS
1780NEED_OFFCHANNEL=y
1781endif
1782
1783ifdef NEED_OFFCHANNEL
1784OBJS += offchannel.o
1785CFLAGS += -DCONFIG_OFFCHANNEL
1786endif
1787
1788ifdef NEED_JSON
1789OBJS += ../src/utils/json.o
1790CFLAGS += -DCONFIG_JSON
1791endif
1792
1793ifdef CONFIG_MODULE_TESTS
1794CFLAGS += -DCONFIG_MODULE_TESTS
1795OBJS += wpas_module_tests.o
1796OBJS += ../src/utils/utils_module_tests.o
1797OBJS += ../src/common/common_module_tests.o
1798OBJS += ../src/crypto/crypto_module_tests.o
1799ifdef CONFIG_WPS
1800OBJS += ../src/wps/wps_module_tests.o
1801endif
1802endif
1803
1804OBJS += ../src/drivers/driver_common.o
1805OBJS_priv += ../src/drivers/driver_common.o
1806
1807OBJS += wpa_supplicant.o events.o blacklist.o wpas_glue.o scan.o
1808OBJS_t := $(OBJS) $(OBJS_l2) eapol_test.o
1809OBJS_t += ../src/radius/radius_client.o
1810OBJS_t += ../src/radius/radius.o
1811ifndef CONFIG_AP
1812OBJS_t += ../src/utils/ip_addr.o
1813endif
1814OBJS_t2 := $(OBJS) $(OBJS_l2) preauth_test.o
1815
1816OBJS_nfc := $(OBJS) $(OBJS_l2) nfc_pw_token.o
1817OBJS_nfc += $(OBJS_d) ../src/drivers/drivers.o
1818
1819OBJS += $(CONFIG_MAIN).o
1820
1821ifdef CONFIG_PRIVSEP
1822OBJS_priv += $(OBJS_d) ../src/drivers/drivers.o
1823OBJS_priv += $(OBJS_l2)
1824OBJS_priv += ../src/utils/os_$(CONFIG_OS).o
1825OBJS_priv += ../src/utils/$(CONFIG_ELOOP).o
1826OBJS_priv += ../src/utils/common.o
1827OBJS_priv += ../src/utils/wpa_debug.o
1828OBJS_priv += ../src/utils/wpabuf.o
1829OBJS_priv += wpa_priv.o
1830ifdef CONFIG_DRIVER_NL80211
1831OBJS_priv += ../src/common/ieee802_11_common.o
1832endif
1833OBJS += ../src/l2_packet/l2_packet_privsep.o
1834OBJS += ../src/drivers/driver_privsep.o
1835EXTRA_progs += wpa_priv
1836else
1837OBJS += $(OBJS_d) ../src/drivers/drivers.o
1838OBJS += $(OBJS_l2)
1839endif
1840
1841ifdef CONFIG_NDIS_EVENTS_INTEGRATED
1842CFLAGS += -DCONFIG_NDIS_EVENTS_INTEGRATED
1843OBJS += ../src/drivers/ndis_events.o
1844EXTRALIBS += -loleaut32 -lole32 -luuid
1845ifdef PLATFORMSDKLIB
1846EXTRALIBS += $(PLATFORMSDKLIB)/WbemUuid.Lib
1847else
1848EXTRALIBS += WbemUuid.Lib
1849endif
1850endif
1851
1852ifdef CONFIG_FST
1853CFLAGS += -DCONFIG_FST
1854ifdef CONFIG_FST_TEST
1855CFLAGS += -DCONFIG_FST_TEST
1856endif
1857FST_OBJS += ../src/fst/fst.o
1858FST_OBJS += ../src/fst/fst_session.o
1859FST_OBJS += ../src/fst/fst_iface.o
1860FST_OBJS += ../src/fst/fst_group.o
1861FST_OBJS += ../src/fst/fst_ctrl_aux.o
1862ifdef CONFIG_CTRL_IFACE
1863FST_OBJS += ../src/fst/fst_ctrl_iface.o
1864endif
1865OBJS += $(FST_OBJS)
1866OBJS_t += $(FST_OBJS)
1867OBJS_t2 += $(FST_OBJS)
1868OBJS_nfc += $(FST_OBJS)
1869endif
1870
1871ifndef LDO
1872LDO=$(CC)
1873endif
1874
1875Q=@
1876E=echo
1877ifeq ($(V), 1)
1878Q=
1879E=true
1880endif
1881ifeq ($(QUIET), 1)
1882Q=@
1883E=true
1884endif
1885
1886dynamic_eap_methods: $(EAPDYN)
1887
1888../src/drivers/build.wpa_supplicant:
1889	@if [ -f ../src/drivers/build.hostapd ]; then \
1890		$(MAKE) -C ../src/drivers clean; \
1891	fi
1892	@touch ../src/drivers/build.wpa_supplicant
1893
1894BCHECK=../src/drivers/build.wpa_supplicant
1895
1896wpa_priv: $(BCHECK) $(OBJS_priv)
1897	$(Q)$(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS)
1898	@$(E) "  LD " $@
1899
1900$(OBJS_c) $(OBJS_t) $(OBJS_t2) $(OBJS) $(BCHECK) $(EXTRA_progs): .config
1901
1902wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
1903	$(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
1904	@$(E) "  LD " $@
1905
1906eapol_test: $(OBJS_t)
1907	$(Q)$(LDO) $(LDFLAGS) -o eapol_test $(OBJS_t) $(LIBS)
1908	@$(E) "  LD " $@
1909
1910preauth_test: $(OBJS_t2)
1911	$(Q)$(LDO) $(LDFLAGS) -o preauth_test $(OBJS_t2) $(LIBS)
1912	@$(E) "  LD " $@
1913
1914wpa_passphrase: $(OBJS_p)
1915	$(Q)$(LDO) $(LDFLAGS) -o wpa_passphrase $(OBJS_p) $(LIBS_p) $(LIBS)
1916	@$(E) "  LD " $@
1917
1918wpa_cli: $(OBJS_c)
1919	$(Q)$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
1920	@$(E) "  LD " $@
1921
1922LIBCTRL += ../src/common/wpa_ctrl.o
1923LIBCTRL += ../src/utils/os_$(CONFIG_OS).o
1924LIBCTRL += ../src/utils/common.o
1925LIBCTRL += ../src/utils/wpa_debug.o
1926LIBCTRLSO += ../src/common/wpa_ctrl.c
1927LIBCTRLSO += ../src/utils/os_$(CONFIG_OS).c
1928LIBCTRLSO += ../src/utils/common.c
1929LIBCTRLSO += ../src/utils/wpa_debug.c
1930
1931libwpa_client.a: $(LIBCTRL)
1932	$(Q)rm -f $@
1933	$(Q)$(AR) crs $@ $?
1934	@$(E) "  AR " $@
1935
1936libwpa_client.so: $(LIBCTRLSO)
1937	@$(E) "  CC  $@ ($^)"
1938	$(Q)$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -fPIC $^
1939
1940libwpa_test1: libwpa_test.o libwpa_client.a
1941	$(Q)$(LDO) $(LDFLAGS) -o libwpa_test1 libwpa_test.o libwpa_client.a $(LIBS_c)
1942	@$(E) "  LD " $@
1943
1944libwpa_test2: libwpa_test.o libwpa_client.so
1945	$(Q)$(LDO) $(LDFLAGS) -o libwpa_test2 libwpa_test.o -L. -lwpa_client $(LIBS_c)
1946	@$(E) "  LD " $@
1947
1948nfc_pw_token: $(OBJS_nfc)
1949	$(Q)$(LDO) $(LDFLAGS) -o nfc_pw_token $(OBJS_nfc) $(LIBS)
1950	@$(E) "  LD " $@
1951
1952win_if_list: win_if_list.c
1953	$(Q)$(LDO) $(LDFLAGS) -o $@ win_if_list.c $(CFLAGS) $(LIBS_w)
1954	@$(E) "  LD " $@
1955
1956eap_psk.so: ../src/eap_peer/eap_psk.c ../src/eap_common/eap_psk_common.c
1957	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1958		-Deap_peer_psk_register=eap_peer_method_dynamic_init
1959
1960eap_pax.so: ../src/eap_peer/eap_pax.c ../src/eap_common/eap_pax_common.c
1961	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1962		-Deap_peer_pax_register=eap_peer_method_dynamic_init
1963
1964eap_sake.so: ../src/eap_peer/eap_sake.c ../src/eap_common/eap_sake_common.c
1965	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1966		-Deap_peer_sake_register=eap_peer_method_dynamic_init
1967
1968eap_wsc.so: ../src/eap_peer/eap_wsc.c ../src/eap_common/eap_wsc_common.c ../src/wps/wps.c
1969	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1970		-Deap_peer_wsc_register=eap_peer_method_dynamic_init
1971
1972eap_ikev2.so: ../src/eap_peer/eap_ikev2.c ../src/eap_peer/ikev2.c ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.c
1973	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1974		-Deap_peer_ikev2_register=eap_peer_method_dynamic_init
1975
1976eap_eke.so: ../src/eap_peer/eap_eke.c ../src/eap_common/eap_eke_common.c
1977	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1978		-Deap_peer_eke_register=eap_peer_method_dynamic_init
1979
1980%.so: %.c
1981	$(CC) $(LDFLAGS) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $< \
1982		-D$(*F:eap_%=eap_peer_%)_register=eap_peer_method_dynamic_init
1983
1984ifdef CONFIG_CODE_COVERAGE
1985%.o: %.c
1986	@$(E) "  CC " $<
1987	$(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
1988else
1989%.o: %.c
1990	$(Q)$(CC) -c -o $@ $(CFLAGS) $<
1991	@$(E) "  CC " $<
1992endif
1993
1994%.service: %.service.in
1995	$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
1996	@$(E) "  sed" $<
1997
1998%@.service: %.service.arg.in
1999	$(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@
2000	@$(E) "  sed" $<
2001
2002wpa_supplicant.exe: wpa_supplicant
2003	mv -f $< $@
2004wpa_cli.exe: wpa_cli
2005	mv -f $< $@
2006wpa_passphrase.exe: wpa_passphrase
2007	mv -f $< $@
2008win_if_list.exe: win_if_list
2009	mv -f $< $@
2010eapol_test.exe: eapol_test
2011	mv -f $< $@
2012
2013WINALL=wpa_supplicant.exe wpa_cli.exe wpa_passphrase.exe win_if_list.exe
2014
2015windows-bin: $(WINALL)
2016	$(STRIP) $(WINALL)
2017
2018wpa_gui:
2019	@echo "wpa_gui has been removed - see wpa_gui-qt4 for replacement"
2020
2021wpa_gui-qt4/Makefile:
2022	qmake -o wpa_gui-qt4/Makefile wpa_gui-qt4/wpa_gui.pro
2023
2024wpa_gui-qt4/lang/wpa_gui_de.qm: wpa_gui-qt4/lang/wpa_gui_de.ts
2025	lrelease wpa_gui-qt4/wpa_gui.pro
2026
2027wpa_gui-qt4: wpa_gui-qt4/Makefile wpa_gui-qt4/lang/wpa_gui_de.qm
2028	$(MAKE) -C wpa_gui-qt4
2029
2030FIPSDIR=/usr/local/ssl/fips-2.0
2031FIPSLD=$(FIPSDIR)/bin/fipsld
2032fips:
2033	$(MAKE) CC=$(FIPSLD) FIPSLD_CC="$(CC)"
2034
2035lcov-html: wpa_supplicant.gcda
2036	lcov -c -d .. > lcov.info
2037	genhtml lcov.info --output-directory lcov-html
2038
2039clean:
2040	$(MAKE) -C ../src clean
2041	$(MAKE) -C dbus clean
2042	rm -f core *~ *.o *.d *.gcno *.gcda *.gcov
2043	rm -f eap_*.so $(ALL) $(WINALL) eapol_test preauth_test
2044	rm -f wpa_priv
2045	rm -f nfc_pw_token
2046	rm -f lcov.info
2047	rm -rf lcov-html
2048	rm -f libwpa_client.a
2049	rm -f libwpa_client.so
2050	rm -f libwpa_test1 libwpa_test2
2051
2052-include $(OBJS:%.o=%.d)
2053