1#
2# Copyright (C) 2008 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16#
17
18LOCAL_PATH := $(call my-dir)
19
20WPA_BUILD_SUPPLICANT := false
21ifneq ($(TARGET_SIMULATOR),true)
22  ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),)
23    WPA_BUILD_SUPPLICANT := true
24    CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) = y
25  endif
26endif
27
28include $(LOCAL_PATH)/.config
29
30# To force sizeof(enum) = 4
31ifeq ($(TARGET_ARCH),arm)
32L_CFLAGS += -mabi=aapcs-linux
33endif
34
35# To ignore possible wrong network configurations
36L_CFLAGS += -DWPA_IGNORE_CONFIG_ERRORS
37
38# To allow non-ASCII characters in SSID
39L_CFLAGS += -DWPA_UNICODE_SSID
40
41# OpenSSL is configured without engines on Android
42L_CFLAGS += -DOPENSSL_NO_ENGINE
43
44INCLUDES = $(LOCAL_PATH)
45INCLUDES += $(LOCAL_PATH)/src
46INCLUDES += $(LOCAL_PATH)/src/common
47# INCLUDES += $(LOCAL_PATH)/src/crypto # To force proper includes
48INCLUDES += $(LOCAL_PATH)/src/drivers
49INCLUDES += $(LOCAL_PATH)/src/eap_common
50INCLUDES += $(LOCAL_PATH)/src/eapol_supp
51INCLUDES += $(LOCAL_PATH)/src/eap_peer
52INCLUDES += $(LOCAL_PATH)/src/eap_server
53INCLUDES += $(LOCAL_PATH)/src/hlr_auc_gw
54INCLUDES += $(LOCAL_PATH)/src/l2_packet
55INCLUDES += $(LOCAL_PATH)/src/radius
56INCLUDES += $(LOCAL_PATH)/src/rsn_supp
57INCLUDES += $(LOCAL_PATH)/src/tls
58INCLUDES += $(LOCAL_PATH)/src/utils
59INCLUDES += $(LOCAL_PATH)/src/wps
60INCLUDES += external/openssl/include
61INCLUDES += frameworks/base/cmds/keystore
62
63OBJS = config.c
64OBJS += src/utils/common.c
65OBJS += src/utils/wpa_debug.c
66OBJS += src/utils/wpabuf.c
67OBJS += src/crypto/md5.c
68OBJS += src/crypto/rc4.c
69OBJS += src/crypto/md4.c
70OBJS += src/crypto/sha1.c
71OBJS += src/crypto/des.c
72OBJS_p = wpa_passphrase.c
73OBJS_p += src/utils/common.c
74OBJS_p += src/utils/wpa_debug.c
75OBJS_p += src/crypto/md5.c
76OBJS_p += src/crypto/md4.c
77OBJS_p += src/crypto/sha1.c
78OBJS_p += src/crypto/des.c
79OBJS_c = wpa_cli.c
80OBJS_c += src/common/wpa_ctrl.c
81OBJS_d =
82
83ifndef CONFIG_OS
84ifdef CONFIG_NATIVE_WINDOWS
85CONFIG_OS=win32
86else
87CONFIG_OS=unix
88endif
89endif
90
91ifeq ($(CONFIG_OS), internal)
92L_CFLAGS += -DOS_NO_C_LIB_DEFINES
93endif
94
95OBJS += src/utils/os_$(CONFIG_OS).c
96OBJS_p += src/utils/os_$(CONFIG_OS).c
97OBJS_c += src/utils/os_$(CONFIG_OS).c
98
99ifndef CONFIG_ELOOP
100CONFIG_ELOOP=eloop
101endif
102OBJS += src/utils/$(CONFIG_ELOOP).c
103
104
105ifdef CONFIG_EAPOL_TEST
106L_CFLAGS += -Werror -DEAPOL_TEST
107endif
108
109ifndef CONFIG_BACKEND
110CONFIG_BACKEND=file
111endif
112
113ifeq ($(CONFIG_BACKEND), file)
114OBJS += config_file.c
115ifndef CONFIG_NO_CONFIG_BLOBS
116NEED_BASE64=y
117endif
118L_CFLAGS += -DCONFIG_BACKEND_FILE
119endif
120
121ifeq ($(CONFIG_BACKEND), winreg)
122OBJS += config_winreg.c
123endif
124
125ifeq ($(CONFIG_BACKEND), none)
126OBJS += config_none.c
127endif
128
129ifdef CONFIG_NO_CONFIG_WRITE
130L_CFLAGS += -DCONFIG_NO_CONFIG_WRITE
131endif
132
133ifdef CONFIG_NO_CONFIG_BLOBS
134L_CFLAGS += -DCONFIG_NO_CONFIG_BLOBS
135endif
136
137ifdef CONFIG_NO_SCAN_PROCESSING
138L_CFLAGS += -DCONFIG_NO_SCAN_PROCESSING
139endif
140
141ifdef CONFIG_DRIVER_HOSTAP
142L_CFLAGS += -DCONFIG_DRIVER_HOSTAP
143OBJS_d += src/drivers/driver_hostap.c
144CONFIG_WIRELESS_EXTENSION=y
145endif
146
147ifdef CONFIG_DRIVER_WEXT
148L_CFLAGS += -DCONFIG_DRIVER_WEXT
149CONFIG_WIRELESS_EXTENSION=y
150endif
151
152ifdef CONFIG_DRIVER_NL80211
153L_CFLAGS += -DCONFIG_DRIVER_NL80211
154OBJS_d += src/drivers/driver_nl80211.c
155LIBS += -lnl
156ifdef CONFIG_CLIENT_MLME
157OBJS_d += src/drivers/radiotap.c
158endif
159endif
160
161ifdef CONFIG_DRIVER_PRISM54
162L_CFLAGS += -DCONFIG_DRIVER_PRISM54
163OBJS_d += src/drivers/driver_prism54.c
164CONFIG_WIRELESS_EXTENSION=y
165endif
166
167ifdef CONFIG_DRIVER_HERMES
168L_CFLAGS += -DCONFIG_DRIVER_HERMES
169OBJS_d += src/drivers/driver_hermes.c
170CONFIG_WIRELESS_EXTENSION=y
171endif
172
173ifdef CONFIG_DRIVER_MADWIFI
174L_CFLAGS += -DCONFIG_DRIVER_MADWIFI
175OBJS_d += src/drivers/driver_madwifi.c
176CONFIG_WIRELESS_EXTENSION=y
177endif
178
179ifdef CONFIG_DRIVER_ATMEL
180L_CFLAGS += -DCONFIG_DRIVER_ATMEL
181OBJS_d += src/drivers/driver_atmel.c
182CONFIG_WIRELESS_EXTENSION=y
183endif
184
185ifdef CONFIG_DRIVER_NDISWRAPPER
186L_CFLAGS += -DCONFIG_DRIVER_NDISWRAPPER
187OBJS_d += src/drivers/driver_ndiswrapper.c
188CONFIG_WIRELESS_EXTENSION=y
189endif
190
191ifdef CONFIG_DRIVER_RALINK
192L_CFLAGS += -DCONFIG_DRIVER_RALINK
193OBJS_d += src/drivers/driver_ralink.c
194endif
195
196ifdef CONFIG_DRIVER_BROADCOM
197L_CFLAGS += -DCONFIG_DRIVER_BROADCOM
198OBJS_d += src/drivers/driver_broadcom.c
199endif
200
201ifdef CONFIG_DRIVER_IPW
202L_CFLAGS += -DCONFIG_DRIVER_IPW
203OBJS_d += src/drivers/driver_ipw.c
204CONFIG_WIRELESS_EXTENSION=y
205endif
206
207ifdef CONFIG_DRIVER_BSD
208L_CFLAGS += -DCONFIG_DRIVER_BSD
209OBJS_d += src/drivers/driver_bsd.c
210ifndef CONFIG_L2_PACKET
211CONFIG_L2_PACKET=freebsd
212endif
213endif
214
215ifdef CONFIG_DRIVER_NDIS
216L_CFLAGS += -DCONFIG_DRIVER_NDIS
217OBJS_d += src/drivers/driver_ndis.c
218ifdef CONFIG_NDIS_EVENTS_INTEGRATED
219OBJS_d += src/drivers/driver_ndis_.c
220endif
221ifndef CONFIG_L2_PACKET
222CONFIG_L2_PACKET=pcap
223endif
224CONFIG_WINPCAP=y
225ifdef CONFIG_USE_NDISUIO
226L_CFLAGS += -DCONFIG_USE_NDISUIO
227endif
228endif
229
230ifdef CONFIG_DRIVER_WIRED
231L_CFLAGS += -DCONFIG_DRIVER_WIRED
232OBJS_d += src/drivers/driver_wired.c
233endif
234
235ifdef CONFIG_DRIVER_TEST
236L_CFLAGS += -DCONFIG_DRIVER_TEST
237OBJS_d += src/drivers/driver_test.c
238endif
239
240ifdef CONFIG_DRIVER_CUSTOM
241L_CFLAGS += -DCONFIG_DRIVER_CUSTOM
242endif
243
244ifdef CONFIG_DRIVER_OSX
245L_CFLAGS += -DCONFIG_DRIVER_OSX
246OBJS_d += src/drivers/driver_osx.c
247LDFLAGS += -framework CoreFoundation
248LDFLAGS += -F/System/Library/PrivateFrameworks -framework Apple80211
249endif
250
251ifdef CONFIG_DRIVER_PS3
252L_CFLAGS += -DCONFIG_DRIVER_PS3 -m64
253OBJS_d += src/drivers/driver_ps3.c
254LDFLAGS += -m64
255endif
256
257ifdef CONFIG_DRIVER_IPHONE
258L_CFLAGS += -DCONFIG_DRIVER_IPHONE
259OBJS_d += src/drivers/driver_iphone.c
260OBJS_d += src/drivers/MobileApple80211.c
261LIBS += -framework CoreFoundation
262endif
263
264ifdef CONFIG_DRIVER_ROBOSWITCH
265L_CFLAGS += -DCONFIG_DRIVER_ROBOSWITCH
266OBJS_d += src/drivers/driver_roboswitch.c
267endif
268
269ifndef CONFIG_L2_PACKET
270CONFIG_L2_PACKET=linux
271endif
272
273OBJS_l2 += src/l2_packet/l2_packet_$(CONFIG_L2_PACKET).c
274
275ifeq ($(CONFIG_L2_PACKET), pcap)
276ifdef CONFIG_WINPCAP
277L_CFLAGS += -DCONFIG_WINPCAP
278LIBS += -lwpcap -lpacket
279LIBS_w += -lwpcap
280else
281LIBS += -ldnet -lpcap
282endif
283endif
284
285ifeq ($(CONFIG_L2_PACKET), winpcap)
286LIBS += -lwpcap -lpacket
287LIBS_w += -lwpcap
288endif
289
290ifeq ($(CONFIG_L2_PACKET), freebsd)
291LIBS += -lpcap
292endif
293
294ifdef CONFIG_EAP_TLS
295# EAP-TLS
296ifeq ($(CONFIG_EAP_TLS), dyn)
297L_CFLAGS += -DEAP_TLS_DYNAMIC
298EAPDYN += src/eap_peer/eap_tls.so
299else
300L_CFLAGS += -DEAP_TLS
301OBJS += src/eap_peer/eap_tls.c
302OBJS_h += src/eap_server/eap_tls.c
303endif
304TLS_FUNCS=y
305CONFIG_IEEE8021X_EAPOL=y
306endif
307
308ifdef CONFIG_EAP_PEAP
309# EAP-PEAP
310ifeq ($(CONFIG_EAP_PEAP), dyn)
311L_CFLAGS += -DEAP_PEAP_DYNAMIC
312EAPDYN += src/eap_peer/eap_peap.so
313else
314L_CFLAGS += -DEAP_PEAP
315OBJS += src/eap_peer/eap_peap.c
316OBJS += src/eap_common/eap_peap_common.c
317OBJS_h += src/eap_server/eap_peap.c
318endif
319TLS_FUNCS=y
320CONFIG_IEEE8021X_EAPOL=y
321endif
322
323ifdef CONFIG_EAP_TTLS
324# EAP-TTLS
325ifeq ($(CONFIG_EAP_TTLS), dyn)
326L_CFLAGS += -DEAP_TTLS_DYNAMIC
327EAPDYN += src/eap_peer/eap_ttls.so
328else
329L_CFLAGS += -DEAP_TTLS
330OBJS += src/eap_peer/eap_ttls.c
331OBJS_h += src/eap_server/eap_ttls.c
332endif
333MS_FUNCS=y
334TLS_FUNCS=y
335CHAP=y
336CONFIG_IEEE8021X_EAPOL=y
337endif
338
339ifdef CONFIG_EAP_MD5
340# EAP-MD5
341ifeq ($(CONFIG_EAP_MD5), dyn)
342L_CFLAGS += -DEAP_MD5_DYNAMIC
343EAPDYN += src/eap_peer/eap_md5.so
344else
345L_CFLAGS += -DEAP_MD5
346OBJS += src/eap_peer/eap_md5.c
347OBJS_h += src/eap_server/eap_md5.c
348endif
349CHAP=y
350CONFIG_IEEE8021X_EAPOL=y
351endif
352
353# backwards compatibility for old spelling
354ifdef CONFIG_MSCHAPV2
355ifndef CONFIG_EAP_MSCHAPV2
356CONFIG_EAP_MSCHAPV2=y
357endif
358endif
359
360ifdef CONFIG_EAP_MSCHAPV2
361# EAP-MSCHAPv2
362ifeq ($(CONFIG_EAP_MSCHAPV2), dyn)
363L_CFLAGS += -DEAP_MSCHAPv2_DYNAMIC
364EAPDYN += src/eap_peer/eap_mschapv2.so
365EAPDYN += src/eap_peer/mschapv2.so
366else
367L_CFLAGS += -DEAP_MSCHAPv2
368OBJS += src/eap_peer/eap_mschapv2.c
369OBJS += src/eap_peer/mschapv2.c
370OBJS_h += src/eap_server/eap_mschapv2.c
371endif
372MS_FUNCS=y
373CONFIG_IEEE8021X_EAPOL=y
374endif
375
376ifdef CONFIG_EAP_GTC
377# EAP-GTC
378ifeq ($(CONFIG_EAP_GTC), dyn)
379L_CFLAGS += -DEAP_GTC_DYNAMIC
380EAPDYN += src/eap_peer/eap_gtc.so
381else
382L_CFLAGS += -DEAP_GTC
383OBJS += src/eap_peer/eap_gtc.c
384OBJS_h += src/eap_server/eap_gtc.c
385endif
386CONFIG_IEEE8021X_EAPOL=y
387endif
388
389ifdef CONFIG_EAP_OTP
390# EAP-OTP
391ifeq ($(CONFIG_EAP_OTP), dyn)
392L_CFLAGS += -DEAP_OTP_DYNAMIC
393EAPDYN += src/eap_peer/eap_otp.so
394else
395L_CFLAGS += -DEAP_OTP
396OBJS += src/eap_peer/eap_otp.c
397endif
398CONFIG_IEEE8021X_EAPOL=y
399endif
400
401ifdef CONFIG_EAP_SIM
402# EAP-SIM
403ifeq ($(CONFIG_EAP_SIM), dyn)
404L_CFLAGS += -DEAP_SIM_DYNAMIC
405EAPDYN += src/eap_peer/eap_sim.so
406else
407L_CFLAGS += -DEAP_SIM
408OBJS += src/eap_peer/eap_sim.c
409OBJS_h += src/eap_server/eap_sim.c
410endif
411CONFIG_IEEE8021X_EAPOL=y
412CONFIG_EAP_SIM_COMMON=y
413endif
414
415ifdef CONFIG_EAP_LEAP
416# EAP-LEAP
417ifeq ($(CONFIG_EAP_LEAP), dyn)
418L_CFLAGS += -DEAP_LEAP_DYNAMIC
419EAPDYN += src/eap_peer/eap_leap.so
420else
421L_CFLAGS += -DEAP_LEAP
422OBJS += src/eap_peer/eap_leap.c
423endif
424MS_FUNCS=y
425CONFIG_IEEE8021X_EAPOL=y
426endif
427
428ifdef CONFIG_EAP_PSK
429# EAP-PSK
430ifeq ($(CONFIG_EAP_PSK), dyn)
431L_CFLAGS += -DEAP_PSK_DYNAMIC
432EAPDYN += src/eap_peer/eap_psk.so
433else
434L_CFLAGS += -DEAP_PSK
435OBJS += src/eap_peer/eap_psk.c src/eap_common/eap_psk_common.c
436OBJS_h += src/eap_server/eap_psk.c
437endif
438CONFIG_IEEE8021X_EAPOL=y
439NEED_AES=y
440endif
441
442ifdef CONFIG_EAP_AKA
443# EAP-AKA
444ifeq ($(CONFIG_EAP_AKA), dyn)
445L_CFLAGS += -DEAP_AKA_DYNAMIC
446EAPDYN += src/eap_peer/eap_aka.so
447else
448L_CFLAGS += -DEAP_AKA
449OBJS += src/eap_peer/eap_aka.c
450OBJS_h += src/eap_server/eap_aka.c
451endif
452CONFIG_IEEE8021X_EAPOL=y
453CONFIG_EAP_SIM_COMMON=y
454endif
455
456ifdef CONFIG_EAP_AKA_PRIME
457# EAP-AKA'
458ifeq ($(CONFIG_EAP_AKA_PRIME), dyn)
459L_CFLAGS += -DEAP_AKA_PRIME_DYNAMIC
460else
461L_CFLAGS += -DEAP_AKA_PRIME
462endif
463NEED_SHA256=y
464endif
465
466ifdef CONFIG_EAP_SIM_COMMON
467OBJS += src/eap_common/eap_sim_common.c
468OBJS_h += src/eap_server/eap_sim_db.c
469NEED_AES=y
470NEED_FIPS186_2_PRF=y
471endif
472
473ifdef CONFIG_EAP_FAST
474# EAP-FAST
475ifeq ($(CONFIG_EAP_FAST), dyn)
476L_CFLAGS += -DEAP_FAST_DYNAMIC
477EAPDYN += src/eap_peer/eap_fast.so
478EAPDYN += src/eap_common/eap_fast_common.c
479else
480L_CFLAGS += -DEAP_FAST
481OBJS += src/eap_peer/eap_fast.c src/eap_peer/eap_fast_pac.c
482OBJS += src/eap_common/eap_fast_common.c
483OBJS_h += src/eap_server/eap_fast.c
484endif
485TLS_FUNCS=y
486CONFIG_IEEE8021X_EAPOL=y
487NEED_T_PRF=y
488endif
489
490ifdef CONFIG_EAP_PAX
491# EAP-PAX
492ifeq ($(CONFIG_EAP_PAX), dyn)
493L_CFLAGS += -DEAP_PAX_DYNAMIC
494EAPDYN += src/eap_peer/eap_pax.so
495else
496L_CFLAGS += -DEAP_PAX
497OBJS += src/eap_peer/eap_pax.c src/eap_common/eap_pax_common.c
498OBJS_h += src/eap_server/eap_pax.c
499endif
500CONFIG_IEEE8021X_EAPOL=y
501endif
502
503ifdef CONFIG_EAP_SAKE
504# EAP-SAKE
505ifeq ($(CONFIG_EAP_SAKE), dyn)
506L_CFLAGS += -DEAP_SAKE_DYNAMIC
507EAPDYN += src/eap_peer/eap_sake.so
508else
509L_CFLAGS += -DEAP_SAKE
510OBJS += src/eap_peer/eap_sake.c src/eap_common/eap_sake_common.c
511OBJS_h += src/eap_server/eap_sake.c
512endif
513CONFIG_IEEE8021X_EAPOL=y
514endif
515
516ifdef CONFIG_EAP_GPSK
517# EAP-GPSK
518ifeq ($(CONFIG_EAP_GPSK), dyn)
519L_CFLAGS += -DEAP_GPSK_DYNAMIC
520EAPDYN += src/eap_peer/eap_gpsk.so
521else
522L_CFLAGS += -DEAP_GPSK
523OBJS += src/eap_peer/eap_gpsk.c src/eap_common/eap_gpsk_common.c
524OBJS_h += src/eap_server/eap_gpsk.c
525endif
526CONFIG_IEEE8021X_EAPOL=y
527ifdef CONFIG_EAP_GPSK_SHA256
528CFLAGS += -DEAP_GPSK_SHA256
529endif
530NEED_SHA256=y
531endif
532
533ifdef CONFIG_WPS
534# EAP-WSC
535L_CFLAGS += -DCONFIG_WPS -DEAP_WSC
536OBJS += wps_supplicant.c
537OBJS += src/utils/uuid.c
538OBJS += src/eap_peer/eap_wsc.c src/eap_common/eap_wsc_common.c
539OBJS += src/wps/wps.c
540OBJS += src/wps/wps_common.c
541OBJS += src/wps/wps_attr_parse.c
542OBJS += src/wps/wps_attr_build.c
543OBJS += src/wps/wps_attr_process.c
544OBJS += src/wps/wps_dev_attr.c
545OBJS += src/wps/wps_enrollee.c
546OBJS += src/wps/wps_registrar.c
547OBJS_h += src/eap_server/eap_wsc.c
548CONFIG_IEEE8021X_EAPOL=y
549NEED_DH_GROUPS=y
550NEED_SHA256=y
551NEED_BASE64=y
552NEED_CRYPTO=y
553NEED_80211_COMMON=y
554
555ifdef CONFIG_WPS_UPNP
556L_CFLAGS += -DCONFIG_WPS_UPNP
557OBJS += src/wps/wps_upnp.c
558OBJS += src/wps/wps_upnp_ssdp.c
559OBJS += src/wps/wps_upnp_web.c
560OBJS += src/wps/wps_upnp_event.c
561OBJS += src/wps/httpread.c
562endif
563
564endif
565
566ifdef CONFIG_EAP_IKEV2
567# EAP-IKEv2
568ifeq ($(CONFIG_EAP_IKEV2), dyn)
569L_CFLAGS += -DEAP_IKEV2_DYNAMIC
570EAPDYN += src/eap_peer/eap_ikev2.so src/eap_peer/ikev2.c
571EAPDYN += src/eap_common/eap_ikev2_common.c src/eap_common/ikev2_common.c
572else
573L_CFLAGS += -DEAP_IKEV2
574OBJS += src/eap_peer/eap_ikev2.c src/eap_peer/ikev2.c
575OBJS += src/eap_common/eap_ikev2_common.c src/eap_common/ikev2_common.c
576OBJS_h += src/eap_server/eap_ikev2.c
577OBJS_h += src/eap_server/ikev2.c
578endif
579CONFIG_IEEE8021X_EAPOL=y
580NEED_DH_GROUPS=y
581NEED_DH_GROUPS_ALL=y
582endif
583
584ifdef CONFIG_EAP_VENDOR_TEST
585ifeq ($(CONFIG_EAP_VENDOR_TEST), dyn)
586L_CFLAGS += -DEAP_VENDOR_TEST_DYNAMIC
587EAPDYN += src/eap_peer/eap_vendor_test.so
588else
589L_CFLAGS += -DEAP_VENDOR_TEST
590OBJS += src/eap_peer/eap_vendor_test.c
591OBJS_h += src/eap_server/eap_vendor_test.c
592endif
593CONFIG_IEEE8021X_EAPOL=y
594endif
595
596ifdef CONFIG_EAP_TNC
597# EAP-TNC
598L_CFLAGS += -DEAP_TNC
599OBJS += src/eap_peer/eap_tnc.c
600OBJS += src/eap_peer/tncc.c
601NEED_BASE64=y
602ifndef CONFIG_NATIVE_WINDOWS
603ifndef CONFIG_DRIVER_BSD
604LIBS += -ldl
605endif
606endif
607endif
608
609ifdef CONFIG_IEEE8021X_EAPOL
610# IEEE 802.1X/EAPOL state machines (e.g., for RADIUS authentication)
611L_CFLAGS += -DIEEE8021X_EAPOL
612OBJS += src/eapol_supp/eapol_supp_sm.c src/eap_peer/eap.c src/eap_common/eap_common.c src/eap_peer/eap_methods.c
613ifdef CONFIG_DYNAMIC_EAP_METHODS
614L_CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
615LIBS += -ldl -rdynamic
616endif
617endif
618
619ifdef CONFIG_EAP_SERVER
620L_CFLAGS += -DEAP_SERVER
621OBJS_h += src/eap_server/eap.c
622OBJS_h += src/eap_server/eap_identity.c
623OBJS_h += src/eap_server/eap_methods.c
624endif
625
626ifdef CONFIG_RADIUS_CLIENT
627OBJS_h += src/utils/ip_addr.c
628OBJS_h += src/radius/radius.c
629OBJS_h += src/radius/radius_client.c
630endif
631
632ifdef CONFIG_AUTHENTICATOR
633OBJS_h += hostapd/eapol_sm.c
634OBJS_h += hostapd/ieee802_1x.c
635endif
636
637ifdef CONFIG_WPA_AUTHENTICATOR
638OBJS_h += hostapd/wpa.c
639OBJS_h += hostapd/wpa_auth_ie.c
640ifdef CONFIG_IEEE80211R
641OBJS_h += hostapd/wpa_ft.c
642endif
643ifdef CONFIG_PEERKEY
644OBJS_h += hostapd/peerkey.c
645endif
646endif
647
648ifdef CONFIG_PCSC
649# PC/SC interface for smartcards (USIM, GSM SIM)
650L_CFLAGS += -DPCSC_FUNCS -I/usr/include/PCSC
651OBJS += src/utils/pcsc_funcs.c
652# -lpthread may not be needed depending on how pcsc-lite was configured
653ifdef CONFIG_NATIVE_WINDOWS
654#Once MinGW gets support for WinScard, -lwinscard could be used instead of the
655#dynamic symbol loading that is now used in pcsc_funcs.c
656#LIBS += -lwinscard
657else
658LIBS += -lpcsclite -lpthread
659endif
660endif
661
662ifdef CONFIG_SIM_SIMULATOR
663L_CFLAGS += -DCONFIG_SIM_SIMULATOR
664NEED_MILENAGE=y
665endif
666
667ifdef CONFIG_USIM_SIMULATOR
668L_CFLAGS += -DCONFIG_USIM_SIMULATOR
669NEED_MILENAGE=y
670endif
671
672ifdef NEED_MILENAGE
673OBJS += src/hlr_auc_gw/milenage.c
674endif
675
676ifndef CONFIG_TLS
677CONFIG_TLS=openssl
678endif
679
680ifeq ($(CONFIG_TLS), internal)
681ifndef CONFIG_CRYPTO
682CONFIG_CRYPTO=internal
683endif
684endif
685ifeq ($(CONFIG_CRYPTO), libtomcrypt)
686L_CFLAGS += -DCONFIG_INTERNAL_X509
687endif
688ifeq ($(CONFIG_CRYPTO), internal)
689L_CFLAGS += -DCONFIG_INTERNAL_X509
690endif
691
692
693ifdef TLS_FUNCS
694# Shared TLS functions (needed for EAP_TLS, EAP_PEAP, EAP_TTLS, and EAP_FAST)
695L_CFLAGS += -DEAP_TLS_FUNCS
696OBJS += src/eap_peer/eap_tls_common.c
697OBJS_h += src/eap_server/eap_tls_common.c
698NEED_TLS_PRF=y
699ifeq ($(CONFIG_TLS), openssl)
700L_CFLAGS += -DEAP_TLS_OPENSSL
701OBJS += src/crypto/tls_openssl.c
702LIBS += -lssl -lcrypto
703LIBS_p += -lcrypto
704endif
705ifeq ($(CONFIG_TLS), gnutls)
706OBJS += src/crypto/tls_gnutls.c
707LIBS += -lgnutls -lgcrypt -lgpg-error
708LIBS_p += -lgcrypt
709ifdef CONFIG_GNUTLS_EXTRA
710L_CFLAGS += -DCONFIG_GNUTLS_EXTRA
711LIBS += -lgnutls-extra
712endif
713endif
714ifeq ($(CONFIG_TLS), schannel)
715OBJS += src/crypto/tls_schannel.c
716endif
717ifeq ($(CONFIG_TLS), internal)
718OBJS += src/crypto/tls_internal.c
719OBJS += src/tls/tlsv1_common.c src/tls/tlsv1_record.c
720OBJS += src/tls/tlsv1_cred.c src/tls/tlsv1_client.c
721OBJS += src/tls/tlsv1_client_write.c src/tls/tlsv1_client_read.c
722OBJS += src/tls/asn1.c src/tls/rsa.c src/tls/x509v3.c
723OBJS_p += src/tls/asn1.c src/tls/rsa.c
724OBJS_p += src/crypto/rc4.c src/crypto/aes_wrap.c src/crypto/aes.c
725NEED_BASE64=y
726NEED_TLS_PRF=y
727L_CFLAGS += -DCONFIG_TLS_INTERNAL
728L_CFLAGS += -DCONFIG_TLS_INTERNAL_CLIENT
729ifeq ($(CONFIG_CRYPTO), internal)
730endif
731ifeq ($(CONFIG_CRYPTO), libtomcrypt)
732LIBS += -ltomcrypt -ltfm
733LIBS_p += -ltomcrypt -ltfm
734endif
735endif
736ifeq ($(CONFIG_TLS), none)
737OBJS += src/crypto/tls_none.c
738L_CFLAGS += -DEAP_TLS_NONE
739CONFIG_INTERNAL_AES=y
740CONFIG_INTERNAL_SHA1=y
741CONFIG_INTERNAL_MD5=y
742CONFIG_INTERNAL_SHA256=y
743endif
744ifdef CONFIG_SMARTCARD
745ifndef CONFIG_NATIVE_WINDOWS
746ifneq ($(CONFIG_L2_PACKET), freebsd)
747LIBS += -ldl
748endif
749endif
750endif
751NEED_CRYPTO=y
752else
753OBJS += src/crypto/tls_none.c
754endif
755
756ifdef CONFIG_PKCS12
757L_CFLAGS += -DPKCS12_FUNCS
758endif
759
760ifdef CONFIG_SMARTCARD
761L_CFLAGS += -DCONFIG_SMARTCARD
762endif
763
764ifdef MS_FUNCS
765OBJS += src/crypto/ms_funcs.c
766NEED_CRYPTO=y
767endif
768
769ifdef CHAP
770OBJS += src/eap_common/chap.c
771endif
772
773ifdef NEED_CRYPTO
774ifndef TLS_FUNCS
775ifeq ($(CONFIG_TLS), openssl)
776LIBS += -lcrypto
777LIBS_p += -lcrypto
778endif
779ifeq ($(CONFIG_TLS), gnutls)
780LIBS += -lgcrypt
781LIBS_p += -lgcrypt
782endif
783ifeq ($(CONFIG_TLS), schannel)
784endif
785ifeq ($(CONFIG_TLS), internal)
786ifeq ($(CONFIG_CRYPTO), libtomcrypt)
787LIBS += -ltomcrypt -ltfm
788LIBS_p += -ltomcrypt -ltfm
789endif
790endif
791endif
792ifeq ($(CONFIG_TLS), openssl)
793OBJS += src/crypto/crypto_openssl.c
794OBJS_p += src/crypto/crypto_openssl.c
795CONFIG_INTERNAL_SHA256=y
796endif
797ifeq ($(CONFIG_TLS), gnutls)
798OBJS += src/crypto/crypto_gnutls.c
799OBJS_p += src/crypto/crypto_gnutls.c
800CONFIG_INTERNAL_SHA256=y
801endif
802ifeq ($(CONFIG_TLS), schannel)
803OBJS += src/crypto/crypto_cryptoapi.c
804OBJS_p += src/crypto/crypto_cryptoapi.c
805CONFIG_INTERNAL_SHA256=y
806endif
807ifeq ($(CONFIG_TLS), internal)
808ifeq ($(CONFIG_CRYPTO), libtomcrypt)
809OBJS += src/crypto/crypto_libtomcrypt.c
810OBJS_p += src/crypto/crypto_libtomcrypt.c
811CONFIG_INTERNAL_SHA256=y
812endif
813ifeq ($(CONFIG_CRYPTO), internal)
814OBJS += src/crypto/crypto_internal.c src/tls/bignum.c
815OBJS_p += src/crypto/crypto_internal.c src/tls/bignum.c
816L_CFLAGS += -DCONFIG_CRYPTO_INTERNAL
817ifdef CONFIG_INTERNAL_LIBTOMMATH
818L_CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
819ifdef CONFIG_INTERNAL_LIBTOMMATH_FAST
820L_CFLAGS += -DLTM_FAST
821endif
822else
823LIBS += -ltommath
824LIBS_p += -ltommath
825endif
826CONFIG_INTERNAL_AES=y
827CONFIG_INTERNAL_DES=y
828CONFIG_INTERNAL_SHA1=y
829CONFIG_INTERNAL_MD4=y
830CONFIG_INTERNAL_MD5=y
831CONFIG_INTERNAL_SHA256=y
832endif
833ifeq ($(CONFIG_CRYPTO), cryptoapi)
834OBJS += src/crypto/crypto_cryptoapi.c
835OBJS_p += src/crypto/crypto_cryptoapi.c
836L_CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
837CONFIG_INTERNAL_SHA256=y
838endif
839endif
840ifeq ($(CONFIG_TLS), none)
841OBJS += src/crypto/crypto_none.c
842OBJS_p += src/crypto/crypto_none.c
843CONFIG_INTERNAL_SHA256=y
844endif
845else
846CONFIG_INTERNAL_AES=y
847CONFIG_INTERNAL_SHA1=y
848CONFIG_INTERNAL_MD5=y
849endif
850
851ifdef CONFIG_INTERNAL_AES
852L_CFLAGS += -DINTERNAL_AES
853endif
854ifdef CONFIG_INTERNAL_SHA1
855L_CFLAGS += -DINTERNAL_SHA1
856endif
857ifdef CONFIG_INTERNAL_SHA256
858L_CFLAGS += -DINTERNAL_SHA256
859endif
860ifdef CONFIG_INTERNAL_MD5
861L_CFLAGS += -DINTERNAL_MD5
862endif
863ifdef CONFIG_INTERNAL_MD4
864L_CFLAGS += -DINTERNAL_MD4
865endif
866ifdef CONFIG_INTERNAL_DES
867L_CFLAGS += -DINTERNAL_DES
868endif
869
870ifdef CONFIG_IEEE80211R
871NEED_SHA256=y
872endif
873
874ifdef CONFIG_IEEE80211W
875L_CFLAGS += -DCONFIG_IEEE80211W
876NEED_SHA256=y
877endif
878
879ifdef NEED_SHA256
880OBJS += src/crypto/sha256.c
881L_CFLAGS += -DNEED_SHA256
882endif
883
884ifdef CONFIG_WIRELESS_EXTENSION
885OBJS_d += src/drivers/driver_wext.c
886endif
887
888ifdef CONFIG_CTRL_IFACE
889ifeq ($(CONFIG_CTRL_IFACE), y)
890ifdef CONFIG_NATIVE_WINDOWS
891CONFIG_CTRL_IFACE=named_pipe
892else
893CONFIG_CTRL_IFACE=unix
894endif
895endif
896L_CFLAGS += -DCONFIG_CTRL_IFACE
897ifeq ($(CONFIG_CTRL_IFACE), unix)
898L_CFLAGS += -DCONFIG_CTRL_IFACE_UNIX
899endif
900ifeq ($(CONFIG_CTRL_IFACE), udp)
901L_CFLAGS += -DCONFIG_CTRL_IFACE_UDP
902endif
903ifeq ($(CONFIG_CTRL_IFACE), named_pipe)
904L_CFLAGS += -DCONFIG_CTRL_IFACE_NAMED_PIPE
905endif
906OBJS += ctrl_iface.c ctrl_iface_$(CONFIG_CTRL_IFACE).c
907endif
908
909ifdef CONFIG_CTRL_IFACE_DBUS
910L_CFLAGS += -DCONFIG_CTRL_IFACE_DBUS -DDBUS_API_SUBJECT_TO_CHANGE
911OBJS += ctrl_iface_dbus.c ctrl_iface_dbus_handlers.c dbus_dict_helpers.c
912ifndef DBUS_LIBS
913DBUS_LIBS := $(shell pkg-config --libs dbus-1)
914endif
915LIBS += $(DBUS_LIBS)
916ifndef DBUS_INCLUDE
917DBUS_INCLUDE := $(shell pkg-config --cflags dbus-1)
918endif
919dbus_version=$(subst ., ,$(shell pkg-config --modversion dbus-1))
920DBUS_VERSION_MAJOR=$(word 1,$(dbus_version))
921DBUS_VERSION_MINOR=$(word 2,$(dbus_version))
922ifeq ($(DBUS_VERSION_MAJOR),)
923DBUS_VERSION_MAJOR=0
924endif
925ifeq ($(DBUS_VERSION_MINOR),)
926DBUS_VERSION_MINOR=0
927endif
928DBUS_INCLUDE += -DDBUS_VERSION_MAJOR=$(DBUS_VERSION_MAJOR)
929DBUS_INCLUDE += -DDBUS_VERSION_MINOR=$(DBUS_VERSION_MINOR)
930L_CFLAGS += $(DBUS_INCLUDE)
931endif
932
933ifdef CONFIG_READLINE
934L_CFLAGS += -DCONFIG_READLINE
935LIBS_c += -lncurses -lreadline
936endif
937
938ifdef CONFIG_NATIVE_WINDOWS
939L_CFLAGS += -DCONFIG_NATIVE_WINDOWS
940LIBS += -lws2_32 -lgdi32 -lcrypt32
941LIBS_c += -lws2_32
942LIBS_p += -lws2_32 -lgdi32
943ifeq ($(CONFIG_CRYPTO), cryptoapi)
944LIBS_p += -lcrypt32
945endif
946endif
947
948ifdef CONFIG_NO_STDOUT_DEBUG
949L_CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
950ifndef CONFIG_CTRL_IFACE
951L_CFLAGS += -DCONFIG_NO_WPA_MSG
952endif
953endif
954
955ifdef CONFIG_IPV6
956# for eapol_test only
957L_CFLAGS += -DCONFIG_IPV6
958endif
959
960ifdef CONFIG_PEERKEY
961L_CFLAGS += -DCONFIG_PEERKEY
962endif
963
964ifdef CONFIG_IEEE80211R
965L_CFLAGS += -DCONFIG_IEEE80211R
966OBJS += src/rsn_supp/wpa_ft.c
967endif
968
969ifndef CONFIG_NO_WPA
970OBJS += src/rsn_supp/wpa.c
971OBJS += src/rsn_supp/preauth.c
972OBJS += src/rsn_supp/pmksa_cache.c
973OBJS += src/rsn_supp/peerkey.c
974OBJS += src/rsn_supp/wpa_ie.c
975OBJS += src/common/wpa_common.c
976NEED_AES=y
977else
978L_CFLAGS += -DCONFIG_NO_WPA -DCONFIG_NO_WPA2
979endif
980
981ifdef CONFIG_NO_WPA2
982L_CFLAGS += -DCONFIG_NO_WPA2
983endif
984
985ifdef CONFIG_NO_WPA_PASSPHRASE
986L_CFLAGS += -DCONFIG_NO_PBKDF2
987endif
988
989ifdef CONFIG_NO_AES_EXTRAS
990L_CFLAGS += -DCONFIG_NO_AES_WRAP
991L_CFLAGS += -DCONFIG_NO_AES_CTR -DCONFIG_NO_AES_OMAC1
992L_CFLAGS += -DCONFIG_NO_AES_EAX -DCONFIG_NO_AES_CBC
993L_CFLAGS += -DCONFIG_NO_AES_ENCRYPT
994L_CFLAGS += -DCONFIG_NO_AES_ENCRYPT_BLOCK
995endif
996
997ifdef NEED_AES
998OBJS += src/crypto/aes_wrap.c src/crypto/aes.c
999endif
1000
1001ifdef NEED_DH_GROUPS
1002OBJS += src/crypto/dh_groups.c
1003ifdef NEED_DH_GROUPS_ALL
1004L_CFLAGS += -DALL_DH_GROUPS
1005endif
1006endif
1007
1008ifndef NEED_FIPS186_2_PRF
1009L_CFLAGS += -DCONFIG_NO_FIPS186_2_PRF
1010endif
1011
1012ifndef NEED_T_PRF
1013L_CFLAGS += -DCONFIG_NO_T_PRF
1014endif
1015
1016ifndef NEED_TLS_PRF
1017L_CFLAGS += -DCONFIG_NO_TLS_PRF
1018endif
1019
1020ifdef NEED_BASE64
1021OBJS += src/utils/base64.c
1022endif
1023
1024ifdef CONFIG_CLIENT_MLME
1025OBJS += mlme.c src/common/ieee802_11_common.c
1026L_CFLAGS += -DCONFIG_CLIENT_MLME
1027endif
1028
1029ifndef CONFIG_MAIN
1030CONFIG_MAIN=main
1031endif
1032
1033ifdef CONFIG_DEBUG_FILE
1034L_CFLAGS += -DCONFIG_DEBUG_FILE
1035endif
1036
1037ifdef CONFIG_ANDROID_LOG
1038L_CFLAGS += -DCONFIG_ANDROID_LOG
1039endif
1040
1041ifdef CONFIG_DELAYED_MIC_ERROR_REPORT
1042L_CFLAGS += -DCONFIG_DELAYED_MIC_ERROR_REPORT
1043endif
1044
1045OBJS += src/drivers/scan_helpers.c
1046
1047OBJS_wpa_rm := ctrl_iface.c mlme.c ctrl_iface_unix.c
1048OBJS_wpa := $(filter-out $(OBJS_wpa_rm),$(OBJS)) $(OBJS_h) tests/test_wpa.c
1049ifdef CONFIG_AUTHENTICATOR
1050OBJS_wpa += tests/link_test.c
1051endif
1052OBJS_wpa += $(OBJS_l2)
1053OBJS += wpa_supplicant.c events.c blacklist.c wpas_glue.c scan.c
1054OBJS_t := $(OBJS) $(OBJS_l2) eapol_test.c src/radius/radius.c src/radius/radius_client.c
1055OBJS_t += src/utils/ip_addr.c
1056OBJS_t2 := $(OBJS) $(OBJS_l2) preauth_test.c
1057OBJS += $(CONFIG_MAIN).c
1058
1059ifdef CONFIG_PRIVSEP
1060OBJS_priv += $(OBJS_d) src/drivers/drivers.c src/drivers/scan_helpers.c
1061OBJS_priv += $(OBJS_l2)
1062OBJS_priv += src/utils/os_$(CONFIG_OS).c
1063OBJS_priv += src/utils/$(CONFIG_ELOOP).c
1064OBJS_priv += src/utils/common.c
1065OBJS_priv += src/utils/wpa_debug.c
1066OBJS_priv += src/utils/wpabuf.c
1067OBJS_priv += wpa_priv.c
1068ifdef CONFIG_DRIVER_TEST
1069OBJS_priv += src/crypto/sha1.c
1070OBJS_priv += src/crypto/md5.c
1071ifeq ($(CONFIG_TLS), openssl)
1072OBJS_priv += src/crypto/crypto_openssl.c
1073endif
1074ifeq ($(CONFIG_TLS), gnutls)
1075OBJS_priv += src/crypto/crypto_gnutls.c
1076endif
1077ifeq ($(CONFIG_TLS), internal)
1078ifeq ($(CONFIG_CRYPTO), libtomcrypt)
1079OBJS_priv += src/crypto/crypto_libtomcrypt.c
1080else
1081OBJS_priv += src/crypto/crypto_internal.c
1082endif
1083endif
1084endif # CONFIG_DRIVER_TEST
1085OBJS += src/l2_packet/l2_packet_privsep.c
1086OBJS += src/drivers/driver_privsep.c
1087EXTRA_progs += wpa_priv
1088else
1089OBJS += $(OBJS_d) src/drivers/drivers.c
1090OBJS += $(OBJS_l2)
1091endif
1092
1093ifdef CONFIG_NDIS_EVENTS_INTEGRATED
1094L_CFLAGS += -DCONFIG_NDIS_EVENTS_INTEGRATED
1095OBJS += src/drivers/ndis_events.c
1096EXTRALIBS += -loleaut32 -lole32 -luuid
1097ifdef PLATFORMSDKLIB
1098EXTRALIBS += $(PLATFORMSDKLIB)/WbemUuid.Lib
1099else
1100EXTRALIBS += WbemUuid.Lib
1101endif
1102endif
1103
1104ifndef LDO
1105LDO=$(CC)
1106endif
1107
1108ifeq ($(WPA_BUILD_SUPPLICANT),true)
1109
1110########################
1111
1112include $(CLEAR_VARS)
1113LOCAL_MODULE := wpa_cli
1114LOCAL_MODULE_TAGS := debug
1115LOCAL_SHARED_LIBRARIES := libc libcutils
1116LOCAL_CFLAGS := $(L_CFLAGS)
1117LOCAL_SRC_FILES := $(OBJS_c)
1118LOCAL_C_INCLUDES := $(INCLUDES)
1119include $(BUILD_EXECUTABLE)
1120
1121########################
1122include $(CLEAR_VARS)
1123LOCAL_MODULE := wpa_supplicant
1124ifdef CONFIG_DRIVER_CUSTOM
1125LOCAL_STATIC_LIBRARIES := libCustomWifi
1126endif
1127ifneq ($(BOARD_WPA_SUPPLICANT_PRIVATE_LIB),)
1128LOCAL_STATIC_LIBRARIES += $(BOARD_WPA_SUPPLICANT_PRIVATE_LIB)
1129endif
1130LOCAL_SHARED_LIBRARIES := libc libcutils libcrypto libssl
1131LOCAL_CFLAGS := $(L_CFLAGS)
1132LOCAL_SRC_FILES := $(OBJS)
1133LOCAL_C_INCLUDES := $(INCLUDES)
1134include $(BUILD_EXECUTABLE)
1135
1136########################
1137#
1138#include $(CLEAR_VARS)
1139#LOCAL_MODULE := eapol_test
1140#ifdef CONFIG_DRIVER_CUSTOM
1141#LOCAL_STATIC_LIBRARIES := libCustomWifi
1142#endif
1143#LOCAL_SHARED_LIBRARIES := libc libcrypto libssl
1144#LOCAL_CFLAGS := $(L_CFLAGS)
1145#LOCAL_SRC_FILES := $(OBJS_t)
1146#LOCAL_C_INCLUDES := $(INCLUDES)
1147#include $(BUILD_EXECUTABLE)
1148#
1149########################
1150#
1151#local_target_dir := $(TARGET_OUT)/etc/wifi
1152#
1153#include $(CLEAR_VARS)
1154#LOCAL_MODULE := wpa_supplicant.conf
1155#LOCAL_MODULE_TAGS := user
1156#LOCAL_MODULE_CLASS := ETC
1157#LOCAL_MODULE_PATH := $(local_target_dir)
1158#LOCAL_SRC_FILES := $(LOCAL_MODULE)
1159#include $(BUILD_PREBUILT)
1160#
1161########################
1162
1163endif # ifeq ($(WPA_BUILD_SUPPLICANT),true)
1164
1165include $(CLEAR_VARS)
1166LOCAL_MODULE = libwpa_client
1167LOCAL_CFLAGS = $(L_CFLAGS)
1168LOCAL_SRC_FILES = src/common/wpa_ctrl.c src/utils/os_$(CONFIG_OS).c
1169LOCAL_C_INCLUDES = $(INCLUDES)
1170LOCAL_SHARED_LIBRARIES := libcutils
1171LOCAL_COPY_HEADERS_TO := libwpa_client
1172LOCAL_COPY_HEADERS := src/common/wpa_ctrl.h
1173include $(BUILD_SHARED_LIBRARY)
1174