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