2 # Copyright (C) 2008 The Android Open Source Project
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
16 LOCAL_PATH := $(call my-dir)
18 WPA_BUILD_SUPPLICANT := false
19 ifneq ($(TARGET_SIMULATOR),true)
20 ifneq ($(BOARD_WPA_SUPPLICANT_DRIVER),)
21 WPA_BUILD_SUPPLICANT := true
22 CONFIG_DRIVER_$(BOARD_WPA_SUPPLICANT_DRIVER) = y
26 include $(LOCAL_PATH)/.config
28 # To force sizeof(enum) = 4
29 ifeq ($(TARGET_ARCH),arm)
30 L_CFLAGS += -mabi=aapcs-linux
33 # To ignore possible wrong network configurations
34 L_CFLAGS += -DWPA_IGNORE_CONFIG_ERRORS
36 INCLUDES = external/openssl/include
38 OBJS = config.c common.c md5.c md4.c rc4.c sha1.c des.c if_index.c
39 OBJS_p = wpa_passphrase.c sha1.c md5.c md4.c common.c des.c
40 OBJS_c = wpa_cli.c wpa_ctrl.c
43 ifdef CONFIG_NATIVE_WINDOWS
50 OBJS += os_$(CONFIG_OS).c
51 OBJS_p += os_$(CONFIG_OS).c
52 OBJS_c += os_$(CONFIG_OS).c
57 OBJS += $(CONFIG_ELOOP).c
60 ifdef CONFIG_EAPOL_TEST
61 L_CFLAGS += -Werror -DEAPOL_TEST
68 ifeq ($(CONFIG_BACKEND), file)
69 OBJS += config_file.c base64.c
70 L_CFLAGS += -DCONFIG_BACKEND_FILE
73 ifeq ($(CONFIG_BACKEND), winreg)
74 OBJS += config_winreg.c
77 ifeq ($(CONFIG_BACKEND), none)
81 ifdef CONFIG_DRIVER_HOSTAP
82 L_CFLAGS += -DCONFIG_DRIVER_HOSTAP
83 OBJS_d += driver_hostap.c
84 CONFIG_WIRELESS_EXTENSION=y
87 ifdef CONFIG_DRIVER_WEXT
88 L_CFLAGS += -DCONFIG_DRIVER_WEXT
89 CONFIG_WIRELESS_EXTENSION=y
92 ifdef CONFIG_DRIVER_PRISM54
93 L_CFLAGS += -DCONFIG_DRIVER_PRISM54
94 OBJS_d += driver_prism54.c
95 CONFIG_WIRELESS_EXTENSION=y
98 ifdef CONFIG_DRIVER_HERMES
99 L_CFLAGS += -DCONFIG_DRIVER_HERMES
100 OBJS_d += driver_hermes.c
101 CONFIG_WIRELESS_EXTENSION=y
104 ifdef CONFIG_DRIVER_MADWIFI
105 L_CFLAGS += -DCONFIG_DRIVER_MADWIFI
106 OBJS_d += driver_madwifi.c
107 CONFIG_WIRELESS_EXTENSION=y
110 ifdef CONFIG_DRIVER_ATMEL
111 L_CFLAGS += -DCONFIG_DRIVER_ATMEL
112 OBJS_d += driver_atmel.c
113 CONFIG_WIRELESS_EXTENSION=y
116 ifdef CONFIG_DRIVER_NDISWRAPPER
117 L_CFLAGS += -DCONFIG_DRIVER_NDISWRAPPER
118 OBJS_d += driver_ndiswrapper.c
119 CONFIG_WIRELESS_EXTENSION=y
122 ifdef CONFIG_DRIVER_BROADCOM
123 L_CFLAGS += -DCONFIG_DRIVER_BROADCOM
124 OBJS_d += driver_broadcom.c
127 ifdef CONFIG_DRIVER_IPW
128 L_CFLAGS += -DCONFIG_DRIVER_IPW
129 OBJS_d += driver_ipw.c
130 CONFIG_WIRELESS_EXTENSION=y
133 ifdef CONFIG_DRIVER_BSD
134 L_CFLAGS += -DCONFIG_DRIVER_BSD
135 OBJS_d += driver_bsd.c
136 ifndef CONFIG_L2_PACKET
137 CONFIG_L2_PACKET=freebsd
141 ifdef CONFIG_DRIVER_NDIS
142 L_CFLAGS += -DCONFIG_DRIVER_NDIS
143 OBJS_d += driver_ndis.c driver_ndis_.c
144 ifndef CONFIG_L2_PACKET
145 CONFIG_L2_PACKET=pcap
148 ifdef CONFIG_USE_NDISUIO
149 L_CFLAGS += -DCONFIG_USE_NDISUIO
153 ifdef CONFIG_DRIVER_WIRED
154 L_CFLAGS += -DCONFIG_DRIVER_WIRED
155 OBJS_d += driver_wired.c
158 ifdef CONFIG_DRIVER_TEST
159 L_CFLAGS += -DCONFIG_DRIVER_TEST
160 OBJS_d += driver_test.c
163 ifdef CONFIG_DRIVER_CUSTOM
164 L_CFLAGS += -DCONFIG_DRIVER_CUSTOM
167 ifndef CONFIG_L2_PACKET
168 CONFIG_L2_PACKET=linux
171 OBJS += l2_packet_$(CONFIG_L2_PACKET).c
173 ifeq ($(CONFIG_L2_PACKET), pcap)
175 L_CFLAGS += -DCONFIG_WINPCAP
176 LIBS += -lwpcap -lpacket
179 LIBS += -ldnet -lpcap
183 ifeq ($(CONFIG_L2_PACKET), winpcap)
184 LIBS += -lwpcap -lpacket
188 ifeq ($(CONFIG_L2_PACKET), freebsd)
194 L_CFLAGS += -DEAP_TLS
197 CONFIG_IEEE8021X_EAPOL=y
200 ifdef CONFIG_EAP_PEAP
202 L_CFLAGS += -DEAP_PEAP
205 CONFIG_IEEE8021X_EAPOL=y
209 ifdef CONFIG_EAP_TTLS
211 L_CFLAGS += -DEAP_TTLS
215 CONFIG_IEEE8021X_EAPOL=y
219 # EAP-MD5 (also used by EAP-TTLS)
220 L_CFLAGS += -DEAP_MD5
222 CONFIG_IEEE8021X_EAPOL=y
225 # backwards compatibility for old spelling
226 ifdef CONFIG_MSCHAPV2
227 ifndef CONFIG_EAP_MSCHAPV2
228 CONFIG_EAP_MSCHAPV2=y
232 ifdef CONFIG_EAP_MSCHAPV2
233 # EAP-MSCHAPv2 (also used by EAP-PEAP)
234 L_CFLAGS += -DEAP_MSCHAPv2
235 OBJS += eap_mschapv2.c
237 CONFIG_IEEE8021X_EAPOL=y
241 # EAP-GTC (also used by EAP-PEAP)
242 L_CFLAGS += -DEAP_GTC
244 CONFIG_IEEE8021X_EAPOL=y
249 L_CFLAGS += -DEAP_OTP
251 CONFIG_IEEE8021X_EAPOL=y
256 L_CFLAGS += -DEAP_SIM
258 CONFIG_IEEE8021X_EAPOL=y
259 CONFIG_EAP_SIM_COMMON=y
262 ifdef CONFIG_EAP_LEAP
264 L_CFLAGS += -DEAP_LEAP
267 CONFIG_IEEE8021X_EAPOL=y
272 L_CFLAGS += -DEAP_PSK
273 OBJS += eap_psk.c eap_psk_common.c
274 CONFIG_IEEE8021X_EAPOL=y
280 L_CFLAGS += -DEAP_AKA
282 CONFIG_IEEE8021X_EAPOL=y
283 CONFIG_EAP_SIM_COMMON=y
286 ifdef CONFIG_EAP_SIM_COMMON
287 OBJS += eap_sim_common.c
293 L_CFLAGS += -DEAP_TLV
297 ifdef CONFIG_EAP_FAST
299 L_CFLAGS += -DEAP_FAST
306 L_CFLAGS += -DEAP_PAX
307 OBJS += eap_pax.c eap_pax_common.c
308 CONFIG_IEEE8021X_EAPOL=y
311 ifdef CONFIG_EAP_SAKE
313 L_CFLAGS += -DEAP_SAKE
314 OBJS += eap_sake.c eap_sake_common.c
315 CONFIG_IEEE8021X_EAPOL=y
318 ifdef CONFIG_EAP_GPSK
320 L_CFLAGS += -DEAP_GPSK
321 OBJS += eap_gpsk.c eap_gpsk_common.c
322 CONFIG_IEEE8021X_EAPOL=y
323 ifdef CONFIG_EAP_GPSK_SHA256
324 L_CFLAGS += -DEAP_GPSK_SHA256
328 ifdef CONFIG_EAP_VENDOR_TEST
329 L_CFLAGS += -DEAP_VENDOR_TEST
330 OBJS += eap_vendor_test.c
331 CONFIG_IEEE8021X_EAPOL=y
334 ifdef CONFIG_IEEE8021X_EAPOL
335 # IEEE 802.1X/EAPOL state machines (e.g., for RADIUS authentication)
336 L_CFLAGS += -DIEEE8021X_EAPOL
337 OBJS += eapol_sm.c eap.c eap_methods.c
341 # PC/SC interface for smartcards (USIM, GSM SIM)
342 L_CFLAGS += -DPCSC_FUNCS -I/usr/include/PCSC
344 # -lpthread may not be needed depending on how pcsc-lite was configured
345 ifdef CONFIG_NATIVE_WINDOWS
346 #Once MinGW gets support for WinScard, -lwinscard could be used instead of the
347 #dynamic symbol loading that is now used in pcsc_funcs.c
350 LIBS += -lpcsclite -lpthread
356 # CONFIG_TLS=internal
359 ifeq ($(CONFIG_TLS), internal)
361 CONFIG_CRYPTO=internal
364 ifeq ($(CONFIG_CRYPTO), libtomcrypt)
365 L_CFLAGS += -DCONFIG_INTERNAL_X509
367 ifeq ($(CONFIG_CRYPTO), internal)
368 L_CFLAGS += -DCONFIG_INTERNAL_X509
373 # Shared TLS functions (needed for EAP_TLS, EAP_PEAP, EAP_TTLS, and EAP_FAST)
374 L_CFLAGS += -DEAP_TLS_FUNCS
375 OBJS += eap_tls_common.c
376 ifeq ($(CONFIG_TLS), openssl)
377 L_CFLAGS += -DEAP_TLS_OPENSSL
378 OBJS += tls_openssl.c
379 LIBS += -lssl -lcrypto
382 ifeq ($(CONFIG_TLS), gnutls)
384 LIBS += -lgnutls -lgcrypt -lgpg-error
386 ifdef CONFIG_GNUTLS_EXTRA
387 L_CFLAGS += -DCONFIG_GNUTLS_EXTRA
388 LIBS += -lgnutls-extra
391 ifeq ($(CONFIG_TLS), schannel)
392 OBJS += tls_schannel.c
394 ifeq ($(CONFIG_TLS), internal)
395 OBJS += tls_internal.c tlsv1_common.c tlsv1_client.c asn1.c x509v3.c
396 OBJS_p += asn1.c rc4.c aes_wrap.c
397 ifneq ($(CONFIG_BACKEND), file)
400 L_CFLAGS += -DCONFIG_TLS_INTERNAL
401 ifeq ($(CONFIG_CRYPTO), internal)
402 ifdef CONFIG_INTERNAL_LIBTOMMATH
403 L_CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
409 ifeq ($(CONFIG_CRYPTO), libtomcrypt)
410 LIBS += -ltomcrypt -ltfm
411 LIBS_p += -ltomcrypt -ltfm
414 ifeq ($(CONFIG_TLS), none)
416 L_CFLAGS += -DEAP_TLS_NONE
417 CONFIG_INTERNAL_AES=y
418 CONFIG_INTERNAL_SHA1=y
419 CONFIG_INTERNAL_MD5=y
420 CONFIG_INTERNAL_SHA256=y
422 ifdef CONFIG_SMARTCARD
423 ifndef CONFIG_NATIVE_WINDOWS
424 ifneq ($(CONFIG_L2_PACKET), freebsd)
435 L_CFLAGS += -DPKCS12_FUNCS
438 ifdef CONFIG_SMARTCARD
439 L_CFLAGS += -DCONFIG_SMARTCARD
449 ifeq ($(CONFIG_TLS), openssl)
453 ifeq ($(CONFIG_TLS), gnutls)
457 ifeq ($(CONFIG_TLS), schannel)
459 ifeq ($(CONFIG_TLS), internal)
460 ifeq ($(CONFIG_CRYPTO), libtomcrypt)
461 LIBS += -ltomcrypt -ltfm
462 LIBS_p += -ltomcrypt -ltfm
466 ifeq ($(CONFIG_TLS), openssl)
469 CONFIG_INTERNAL_SHA256=y
471 ifeq ($(CONFIG_TLS), gnutls)
472 OBJS += crypto_gnutls.c
473 OBJS_p += crypto_gnutls.c
474 CONFIG_INTERNAL_SHA256=y
476 ifeq ($(CONFIG_TLS), schannel)
477 OBJS += crypto_cryptoapi.c
478 OBJS_p += crypto_cryptoapi.c
479 CONFIG_INTERNAL_SHA256=y
481 ifeq ($(CONFIG_TLS), internal)
482 ifeq ($(CONFIG_CRYPTO), libtomcrypt)
483 OBJS += crypto_libtomcrypt.c
484 OBJS_p += crypto_libtomcrypt.c
485 CONFIG_INTERNAL_SHA256=y
487 ifeq ($(CONFIG_CRYPTO), internal)
488 OBJS += crypto_internal.c rsa.c bignum.c
489 OBJS_p += crypto_internal.c rsa.c bignum.c
490 L_CFLAGS += -DCONFIG_CRYPTO_INTERNAL
491 CONFIG_INTERNAL_AES=y
492 CONFIG_INTERNAL_DES=y
493 CONFIG_INTERNAL_SHA1=y
494 CONFIG_INTERNAL_MD4=y
495 CONFIG_INTERNAL_MD5=y
496 CONFIG_INTERNAL_SHA256=y
498 ifeq ($(CONFIG_CRYPTO), cryptoapi)
499 OBJS += crypto_cryptoapi.c
500 OBJS_p += crypto_cryptoapi.c
501 L_CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
502 CONFIG_INTERNAL_SHA256=y
505 ifeq ($(CONFIG_TLS), none)
506 OBJS += crypto_none.c
507 OBJS_p += crypto_none.c
508 CONFIG_INTERNAL_SHA256=y
511 CONFIG_INTERNAL_AES=y
512 CONFIG_INTERNAL_SHA1=y
513 CONFIG_INTERNAL_MD5=y
516 ifdef CONFIG_INTERNAL_AES
517 L_CFLAGS += -DINTERNAL_AES
519 ifdef CONFIG_INTERNAL_SHA1
520 L_CFLAGS += -DINTERNAL_SHA1
522 ifdef CONFIG_INTERNAL_SHA256
523 L_CFLAGS += -DINTERNAL_SHA256
525 ifdef CONFIG_INTERNAL_MD5
526 L_CFLAGS += -DINTERNAL_MD5
528 ifdef CONFIG_INTERNAL_MD4
529 L_CFLAGS += -DINTERNAL_MD4
531 ifdef CONFIG_INTERNAL_DES
532 L_CFLAGS += -DINTERNAL_DES
539 ifdef CONFIG_WIRELESS_EXTENSION
540 L_CFLAGS += -DCONFIG_WIRELESS_EXTENSION
541 OBJS_d += driver_wext.c
544 ifdef CONFIG_CTRL_IFACE
545 ifeq ($(CONFIG_CTRL_IFACE), y)
546 ifdef CONFIG_NATIVE_WINDOWS
547 CONFIG_CTRL_IFACE=udp
549 CONFIG_CTRL_IFACE=unix
552 L_CFLAGS += -DCONFIG_CTRL_IFACE
553 ifeq ($(CONFIG_CTRL_IFACE), udp)
554 L_CFLAGS += -DCONFIG_CTRL_IFACE_UDP
556 L_CFLAGS += -DCONFIG_CTRL_IFACE_UNIX
558 OBJS += ctrl_iface.c ctrl_iface_$(CONFIG_CTRL_IFACE).c
561 ifdef CONFIG_READLINE
562 L_CFLAGS += -DCONFIG_READLINE
563 LIBS_c += -lncurses -lreadline
566 ifdef CONFIG_NATIVE_WINDOWS
567 L_CFLAGS += -DCONFIG_NATIVE_WINDOWS
568 LIBS += -lws2_32 -lgdi32 -lcrypt32
571 ifeq ($(CONFIG_CRYPTO), cryptoapi)
576 ifdef CONFIG_NO_STDOUT_DEBUG
577 L_CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
578 ifndef CONFIG_CTRL_IFACE
579 CFLAGS += -DCONFIG_NO_WPA_MSG
584 # for eapol_test only
585 L_CFLAGS += -DCONFIG_IPV6
589 L_CFLAGS += -DCONFIG_PEERKEY
592 ifdef CONFIG_IEEE80211W
593 L_CFLAGS += -DCONFIG_IEEE80211W
598 OBJS += wpa.c preauth.c pmksa_cache.c
601 L_CFLAGS += -DCONFIG_NO_WPA -DCONFIG_NO_WPA2
605 L_CFLAGS += -DCONFIG_NO_WPA2
608 ifdef CONFIG_NO_AES_EXTRAS
609 L_CFLAGS += -DCONFIG_NO_AES_WRAP
610 L_CFLAGS += -DCONFIG_NO_AES_CTR -DCONFIG_NO_AES_OMAC1
611 L_CFLAGS += -DCONFIG_NO_AES_EAX -DCONFIG_NO_AES_CBC
618 ifdef CONFIG_CLIENT_MLME
620 L_CFLAGS += -DCONFIG_CLIENT_MLME
627 ifdef CONFIG_DEBUG_FILE
628 L_CFLAGS += -DCONFIG_DEBUG_FILE
631 OBJS += wpa_supplicant.c events.c
632 OBJS_t := $(OBJS) eapol_test.c radius.c radius_client.c
633 OBJS_t2 := $(OBJS) preauth_test.c
634 OBJS += $(CONFIG_MAIN).c drivers.c $(OBJS_d)
636 ifdef CONFIG_NDIS_EVENTS_INTEGRATED
637 L_CFLAGS += -DCONFIG_NDIS_EVENTS_INTEGRATED
638 OBJS += ndis_events.c
639 EXTRALIBS += -loleaut32 -lole32 -luuid
641 EXTRALIBS += $(PLATFORMSDKLIB)/WbemUuid.Lib
643 EXTRALIBS += WbemUuid.Lib
647 ifeq ($(WPA_BUILD_SUPPLICANT),true)
649 ########################
651 include $(CLEAR_VARS)
652 LOCAL_MODULE := wpa_cli
653 LOCAL_SHARED_LIBRARIES := libc libcutils
654 LOCAL_CFLAGS := $(L_CFLAGS)
655 LOCAL_SRC_FILES := $(OBJS_c)
656 LOCAL_C_INCLUDES := $(INCLUDES)
657 include $(BUILD_EXECUTABLE)
659 ########################
660 include $(CLEAR_VARS)
661 LOCAL_MODULE := wpa_supplicant
662 ifdef CONFIG_DRIVER_CUSTOM
663 LOCAL_STATIC_LIBRARIES := libCustomWifi libWifiApi
665 LOCAL_SHARED_LIBRARIES := libc libcutils libcrypto libssl
666 LOCAL_CFLAGS := $(L_CFLAGS)
667 LOCAL_SRC_FILES := $(OBJS)
668 LOCAL_C_INCLUDES := $(INCLUDES)
669 include $(BUILD_EXECUTABLE)
671 ########################
673 #include $(CLEAR_VARS)
674 #LOCAL_MODULE := eapol_test
675 #ifdef CONFIG_DRIVER_CUSTOM
676 #LOCAL_STATIC_LIBRARIES := libCustomWifi
678 #LOCAL_SHARED_LIBRARIES := libc libcrypto libssl
679 #LOCAL_CFLAGS := $(L_CFLAGS)
680 #LOCAL_SRC_FILES := $(OBJS_t)
681 #LOCAL_C_INCLUDES := $(INCLUDES)
682 #include $(BUILD_EXECUTABLE)
684 ########################
686 local_target_dir := $(TARGET_OUT)/etc/wifi
688 include $(CLEAR_VARS)
689 LOCAL_MODULE := wpa_supplicant.conf
690 LOCAL_MODULE_TAGS := user development
691 LOCAL_MODULE_CLASS := ETC
692 LOCAL_MODULE_PATH := $(local_target_dir)
693 LOCAL_SRC_FILES := $(LOCAL_MODULE)
694 include $(BUILD_PREBUILT)
696 ########################
698 endif # ifeq ($(WPA_BUILD_SUPPLICANT),true)
700 include $(CLEAR_VARS)
701 LOCAL_MODULE = libwpa_client
702 LOCAL_CFLAGS = $(L_CFLAGS)
703 LOCAL_SRC_FILES = wpa_ctrl.c os_unix.c
704 LOCAL_C_INCLUDES = $(INCLUDES)
705 LOCAL_SHARED_LIBRARIES := libcutils
706 LOCAL_COPY_HEADERS_TO := libwpa_client
707 LOCAL_COPY_HEADERS := wpa_ctrl.h
708 include $(BUILD_SHARED_LIBRARY)