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