blob: 5fd64810709c7e1407061e0ad3d4f3ffce526b0a [file] [log] [blame]
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -07001ifndef CC
2CC=gcc
3endif
4
5ifndef CFLAGS
6CFLAGS = -MMD -O2 -Wall -g
7endif
8
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -08009CFLAGS += -I$(abspath ../src)
10CFLAGS += -I$(abspath ../src/utils)
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -070011
12# Uncomment following line and set the path to your kernel tree include
13# directory if your C library does not include all header files.
14# CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include
15
16-include .config
17
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -080018ifdef CONFIG_TESTING_OPTIONS
19CFLAGS += -DCONFIG_TESTING_OPTIONS
20CONFIG_WPS_TESTING=y
21endif
22
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -070023ifndef CONFIG_OS
24ifdef CONFIG_NATIVE_WINDOWS
25CONFIG_OS=win32
26else
27CONFIG_OS=unix
28endif
29endif
30
31ifeq ($(CONFIG_OS), internal)
32CFLAGS += -DOS_NO_C_LIB_DEFINES
33endif
34
35ifdef CONFIG_NATIVE_WINDOWS
36CFLAGS += -DCONFIG_NATIVE_WINDOWS
37LIBS += -lws2_32
38endif
39
40OBJS += main.o
41OBJS += config_file.o
42
43OBJS += ../src/ap/hostapd.o
44OBJS += ../src/ap/wpa_auth_glue.o
45OBJS += ../src/ap/drv_callbacks.o
46OBJS += ../src/ap/ap_drv_ops.o
47OBJS += ../src/ap/utils.o
48OBJS += ../src/ap/authsrv.o
49OBJS += ../src/ap/ieee802_1x.o
50OBJS += ../src/ap/ap_config.o
Dmitry Shmidtd5e49232012-12-03 15:08:10 -080051OBJS += ../src/ap/eap_user_db.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -070052OBJS += ../src/ap/ieee802_11_auth.o
53OBJS += ../src/ap/sta_info.o
54OBJS += ../src/ap/wpa_auth.o
55OBJS += ../src/ap/tkip_countermeasures.o
56OBJS += ../src/ap/ap_mlme.o
57OBJS += ../src/ap/wpa_auth_ie.o
58OBJS += ../src/ap/preauth_auth.o
59OBJS += ../src/ap/pmksa_cache_auth.o
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -080060OBJS += ../src/ap/ieee802_11_shared.o
61OBJS += ../src/ap/beacon.o
62
63OBJS_c = hostapd_cli.o ../src/common/wpa_ctrl.o ../src/utils/os_$(CONFIG_OS).o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -070064
65NEED_RC4=y
66NEED_AES=y
67NEED_MD5=y
68NEED_SHA1=y
69
70OBJS += ../src/drivers/drivers.o
71CFLAGS += -DHOSTAPD
72
73ifdef CONFIG_WPA_TRACE
74CFLAGS += -DWPA_TRACE
75OBJS += ../src/utils/trace.o
76HOBJS += ../src/utils/trace.o
77LDFLAGS += -rdynamic
78CFLAGS += -funwind-tables
79ifdef CONFIG_WPA_TRACE_BFD
80CFLAGS += -DWPA_TRACE_BFD
81LIBS += -lbfd
82LIBS_c += -lbfd
83LIBS_h += -lbfd
84endif
85endif
86
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -080087ifndef CONFIG_ELOOP
88CONFIG_ELOOP=eloop
89endif
90OBJS += ../src/utils/$(CONFIG_ELOOP).o
91OBJS_c += ../src/utils/$(CONFIG_ELOOP).o
Dmitry Shmidtfa3fc4a2013-11-21 13:34:38 -080092
93ifeq ($(CONFIG_ELOOP), eloop)
94# Using glibc < 2.17 requires -lrt for clock_gettime()
95LIBS += -lrt
96LIBS_c += -lrt
97LIBS_h += -lrt
98endif
99
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700100OBJS += ../src/utils/common.o
101OBJS += ../src/utils/wpa_debug.o
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800102OBJS_c += ../src/utils/wpa_debug.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700103OBJS += ../src/utils/wpabuf.o
104OBJS += ../src/utils/os_$(CONFIG_OS).o
105OBJS += ../src/utils/ip_addr.o
106
107OBJS += ../src/common/ieee802_11_common.o
108OBJS += ../src/common/wpa_common.o
109
110OBJS += ../src/eapol_auth/eapol_auth_sm.o
111
112
Dmitry Shmidt01904cf2013-12-05 11:08:35 -0800113ifdef CONFIG_CODE_COVERAGE
114CFLAGS += -O0 -fprofile-arcs -ftest-coverage
115LIBS += -lgcov
116LIBS_c += -lgcov
117LIBS_h += -lgcov
118LIBS_n += -lgcov
119endif
120
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700121ifndef CONFIG_NO_DUMP_STATE
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800122# define HOSTAPD_DUMP_STATE to include support for dumping internal state
123# through control interface commands (undefine it, if you want to save in
124# binary size)
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700125CFLAGS += -DHOSTAPD_DUMP_STATE
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700126OBJS += ../src/eapol_auth/eapol_auth_dump.o
127endif
128
129ifdef CONFIG_NO_RADIUS
130CFLAGS += -DCONFIG_NO_RADIUS
131CONFIG_NO_ACCOUNTING=y
132else
133OBJS += ../src/radius/radius.o
134OBJS += ../src/radius/radius_client.o
Dmitry Shmidt04949592012-07-19 12:16:46 -0700135OBJS += ../src/radius/radius_das.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700136endif
137
138ifdef CONFIG_NO_ACCOUNTING
139CFLAGS += -DCONFIG_NO_ACCOUNTING
140else
141OBJS += ../src/ap/accounting.o
142endif
143
144ifdef CONFIG_NO_VLAN
145CFLAGS += -DCONFIG_NO_VLAN
146else
147OBJS += ../src/ap/vlan_init.o
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700148ifdef CONFIG_VLAN_NETLINK
149ifdef CONFIG_FULL_DYNAMIC_VLAN
150OBJS += ../src/ap/vlan_util.o
151endif
152CFLAGS += -DCONFIG_VLAN_NETLINK
153endif
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700154endif
155
156ifdef CONFIG_NO_CTRL_IFACE
157CFLAGS += -DCONFIG_NO_CTRL_IFACE
158else
159OBJS += ctrl_iface.o
160OBJS += ../src/ap/ctrl_iface_ap.o
161endif
162
163OBJS += ../src/crypto/md5.o
164
165CFLAGS += -DCONFIG_CTRL_IFACE -DCONFIG_CTRL_IFACE_UNIX
166
167ifdef CONFIG_IAPP
168CFLAGS += -DCONFIG_IAPP
169OBJS += ../src/ap/iapp.o
170endif
171
172ifdef CONFIG_RSN_PREAUTH
173CFLAGS += -DCONFIG_RSN_PREAUTH
174CONFIG_L2_PACKET=y
175endif
176
177ifdef CONFIG_PEERKEY
178CFLAGS += -DCONFIG_PEERKEY
179OBJS += ../src/ap/peerkey_auth.o
180endif
181
182ifdef CONFIG_IEEE80211W
183CFLAGS += -DCONFIG_IEEE80211W
184NEED_SHA256=y
185NEED_AES_OMAC1=y
186endif
187
188ifdef CONFIG_IEEE80211R
189CFLAGS += -DCONFIG_IEEE80211R
190OBJS += ../src/ap/wpa_auth_ft.o
191NEED_SHA256=y
192NEED_AES_OMAC1=y
193NEED_AES_UNWRAP=y
194endif
195
Dmitry Shmidtd5e49232012-12-03 15:08:10 -0800196ifdef CONFIG_SAE
197CFLAGS += -DCONFIG_SAE
Dmitry Shmidta54fa5f2013-01-15 13:53:35 -0800198OBJS += ../src/common/sae.o
199NEED_ECC=y
200NEED_DH_GROUPS=y
Dmitry Shmidtd5e49232012-12-03 15:08:10 -0800201endif
202
Dmitry Shmidta54fa5f2013-01-15 13:53:35 -0800203ifdef CONFIG_WNM
204CFLAGS += -DCONFIG_WNM
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700205OBJS += ../src/ap/wnm_ap.o
206endif
207
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700208ifdef CONFIG_IEEE80211N
209CFLAGS += -DCONFIG_IEEE80211N
210endif
211
Dmitry Shmidt04949592012-07-19 12:16:46 -0700212ifdef CONFIG_IEEE80211AC
213CFLAGS += -DCONFIG_IEEE80211AC
214endif
215
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700216include ../src/drivers/drivers.mak
217OBJS += $(DRV_AP_OBJS)
218CFLAGS += $(DRV_AP_CFLAGS)
219LDFLAGS += $(DRV_AP_LDFLAGS)
220LIBS += $(DRV_AP_LIBS)
221
222ifdef CONFIG_L2_PACKET
223ifdef CONFIG_DNET_PCAP
224ifdef CONFIG_L2_FREEBSD
225LIBS += -lpcap
226OBJS += ../src/l2_packet/l2_packet_freebsd.o
227else
228LIBS += -ldnet -lpcap
229OBJS += ../src/l2_packet/l2_packet_pcap.o
230endif
231else
232OBJS += ../src/l2_packet/l2_packet_linux.o
233endif
234else
235OBJS += ../src/l2_packet/l2_packet_none.o
236endif
237
238
239ifdef CONFIG_EAP_MD5
240CFLAGS += -DEAP_SERVER_MD5
241OBJS += ../src/eap_server/eap_server_md5.o
242CHAP=y
243endif
244
245ifdef CONFIG_EAP_TLS
246CFLAGS += -DEAP_SERVER_TLS
247OBJS += ../src/eap_server/eap_server_tls.o
248TLS_FUNCS=y
249endif
250
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700251ifdef CONFIG_EAP_UNAUTH_TLS
252CFLAGS += -DEAP_SERVER_UNAUTH_TLS
253ifndef CONFIG_EAP_TLS
254OBJS += ../src/eap_server/eap_server_tls.o
255TLS_FUNCS=y
256endif
257endif
258
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700259ifdef CONFIG_EAP_PEAP
260CFLAGS += -DEAP_SERVER_PEAP
261OBJS += ../src/eap_server/eap_server_peap.o
262OBJS += ../src/eap_common/eap_peap_common.o
263TLS_FUNCS=y
264CONFIG_EAP_MSCHAPV2=y
265endif
266
267ifdef CONFIG_EAP_TTLS
268CFLAGS += -DEAP_SERVER_TTLS
269OBJS += ../src/eap_server/eap_server_ttls.o
270TLS_FUNCS=y
271CHAP=y
272endif
273
274ifdef CONFIG_EAP_MSCHAPV2
275CFLAGS += -DEAP_SERVER_MSCHAPV2
276OBJS += ../src/eap_server/eap_server_mschapv2.o
277MS_FUNCS=y
278endif
279
280ifdef CONFIG_EAP_GTC
281CFLAGS += -DEAP_SERVER_GTC
282OBJS += ../src/eap_server/eap_server_gtc.o
283endif
284
285ifdef CONFIG_EAP_SIM
286CFLAGS += -DEAP_SERVER_SIM
287OBJS += ../src/eap_server/eap_server_sim.o
288CONFIG_EAP_SIM_COMMON=y
289NEED_AES_CBC=y
290endif
291
292ifdef CONFIG_EAP_AKA
293CFLAGS += -DEAP_SERVER_AKA
294OBJS += ../src/eap_server/eap_server_aka.o
295CONFIG_EAP_SIM_COMMON=y
296NEED_SHA256=y
297NEED_AES_CBC=y
298endif
299
300ifdef CONFIG_EAP_AKA_PRIME
301CFLAGS += -DEAP_SERVER_AKA_PRIME
302endif
303
304ifdef CONFIG_EAP_SIM_COMMON
305OBJS += ../src/eap_common/eap_sim_common.o
306# Example EAP-SIM/AKA interface for GSM/UMTS authentication. This can be
307# replaced with another file implementating the interface specified in
308# eap_sim_db.h.
309OBJS += ../src/eap_server/eap_sim_db.o
310NEED_FIPS186_2_PRF=y
311endif
312
313ifdef CONFIG_EAP_PAX
314CFLAGS += -DEAP_SERVER_PAX
315OBJS += ../src/eap_server/eap_server_pax.o ../src/eap_common/eap_pax_common.o
316endif
317
318ifdef CONFIG_EAP_PSK
319CFLAGS += -DEAP_SERVER_PSK
320OBJS += ../src/eap_server/eap_server_psk.o ../src/eap_common/eap_psk_common.o
321NEED_AES_OMAC1=y
322NEED_AES_ENCBLOCK=y
323NEED_AES_EAX=y
324endif
325
326ifdef CONFIG_EAP_SAKE
327CFLAGS += -DEAP_SERVER_SAKE
328OBJS += ../src/eap_server/eap_server_sake.o ../src/eap_common/eap_sake_common.o
329endif
330
331ifdef CONFIG_EAP_GPSK
332CFLAGS += -DEAP_SERVER_GPSK
333OBJS += ../src/eap_server/eap_server_gpsk.o ../src/eap_common/eap_gpsk_common.o
334ifdef CONFIG_EAP_GPSK_SHA256
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800335CFLAGS += -DEAP_GPSK_SHA256
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700336endif
337NEED_SHA256=y
338NEED_AES_OMAC1=y
339endif
340
341ifdef CONFIG_EAP_PWD
342CFLAGS += -DEAP_SERVER_PWD
343OBJS += ../src/eap_server/eap_server_pwd.o ../src/eap_common/eap_pwd_common.o
344NEED_SHA256=y
345endif
346
Dmitry Shmidt34af3062013-07-11 10:46:32 -0700347ifdef CONFIG_EAP_EKE
348CFLAGS += -DEAP_SERVER_EKE
349OBJS += ../src/eap_server/eap_server_eke.o ../src/eap_common/eap_eke_common.o
350NEED_DH_GROUPS=y
351NEED_DH_GROUPS_ALL=y
352endif
353
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700354ifdef CONFIG_EAP_VENDOR_TEST
355CFLAGS += -DEAP_SERVER_VENDOR_TEST
356OBJS += ../src/eap_server/eap_server_vendor_test.o
357endif
358
359ifdef CONFIG_EAP_FAST
360CFLAGS += -DEAP_SERVER_FAST
361OBJS += ../src/eap_server/eap_server_fast.o
362OBJS += ../src/eap_common/eap_fast_common.o
363TLS_FUNCS=y
364NEED_T_PRF=y
365NEED_AES_UNWRAP=y
366endif
367
368ifdef CONFIG_WPS
369ifdef CONFIG_WPS2
370CFLAGS += -DCONFIG_WPS2
371endif
372
373CFLAGS += -DCONFIG_WPS -DEAP_SERVER_WSC
374OBJS += ../src/utils/uuid.o
375OBJS += ../src/ap/wps_hostapd.o
376OBJS += ../src/eap_server/eap_server_wsc.o ../src/eap_common/eap_wsc_common.o
377OBJS += ../src/wps/wps.o
378OBJS += ../src/wps/wps_common.o
379OBJS += ../src/wps/wps_attr_parse.o
380OBJS += ../src/wps/wps_attr_build.o
381OBJS += ../src/wps/wps_attr_process.o
382OBJS += ../src/wps/wps_dev_attr.o
383OBJS += ../src/wps/wps_enrollee.o
384OBJS += ../src/wps/wps_registrar.o
385NEED_DH_GROUPS=y
386NEED_SHA256=y
387NEED_BASE64=y
388NEED_AES_CBC=y
389NEED_MODEXP=y
390CONFIG_EAP=y
391
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700392ifdef CONFIG_WPS_NFC
393CFLAGS += -DCONFIG_WPS_NFC
394OBJS += ../src/wps/ndef.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700395NEED_WPS_OOB=y
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700396endif
397
398ifdef NEED_WPS_OOB
399CFLAGS += -DCONFIG_WPS_OOB
400endif
401
402ifdef CONFIG_WPS_UPNP
403CFLAGS += -DCONFIG_WPS_UPNP
404OBJS += ../src/wps/wps_upnp.o
405OBJS += ../src/wps/wps_upnp_ssdp.o
406OBJS += ../src/wps/wps_upnp_web.o
407OBJS += ../src/wps/wps_upnp_event.o
408OBJS += ../src/wps/wps_upnp_ap.o
409OBJS += ../src/wps/upnp_xml.o
410OBJS += ../src/wps/httpread.o
411OBJS += ../src/wps/http_client.o
412OBJS += ../src/wps/http_server.o
413endif
414
415ifdef CONFIG_WPS_STRICT
416CFLAGS += -DCONFIG_WPS_STRICT
417OBJS += ../src/wps/wps_validate.o
418endif
419
420ifdef CONFIG_WPS_TESTING
421CFLAGS += -DCONFIG_WPS_TESTING
422endif
423
424endif
425
426ifdef CONFIG_EAP_IKEV2
427CFLAGS += -DEAP_SERVER_IKEV2
428OBJS += ../src/eap_server/eap_server_ikev2.o ../src/eap_server/ikev2.o
429OBJS += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
430NEED_DH_GROUPS=y
431NEED_DH_GROUPS_ALL=y
432NEED_MODEXP=y
433NEED_CIPHER=y
434endif
435
436ifdef CONFIG_EAP_TNC
437CFLAGS += -DEAP_SERVER_TNC
438OBJS += ../src/eap_server/eap_server_tnc.o
439OBJS += ../src/eap_server/tncs.o
440NEED_BASE64=y
441ifndef CONFIG_DRIVER_BSD
442LIBS += -ldl
443endif
444endif
445
446# Basic EAP functionality is needed for EAPOL
447OBJS += eap_register.o
448OBJS += ../src/eap_server/eap_server.o
449OBJS += ../src/eap_common/eap_common.o
450OBJS += ../src/eap_server/eap_server_methods.o
451OBJS += ../src/eap_server/eap_server_identity.o
452CFLAGS += -DEAP_SERVER_IDENTITY
453
454ifdef CONFIG_EAP
455CFLAGS += -DEAP_SERVER
456endif
457
458ifdef CONFIG_PKCS12
459CFLAGS += -DPKCS12_FUNCS
460endif
461
462ifdef MS_FUNCS
463OBJS += ../src/crypto/ms_funcs.o
464NEED_DES=y
465NEED_MD4=y
466endif
467
468ifdef CHAP
469OBJS += ../src/eap_common/chap.o
470endif
471
472ifdef TLS_FUNCS
473NEED_DES=y
474# Shared TLS functions (needed for EAP_TLS, EAP_PEAP, and EAP_TTLS)
475CFLAGS += -DEAP_TLS_FUNCS
476OBJS += ../src/eap_server/eap_server_tls_common.o
477NEED_TLS_PRF=y
478endif
479
480ifndef CONFIG_TLS
481CONFIG_TLS=openssl
482endif
483
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800484ifdef CONFIG_TLSV11
485CFLAGS += -DCONFIG_TLSV11
486endif
487
488ifdef CONFIG_TLSV12
489CFLAGS += -DCONFIG_TLSV12
490NEED_SHA256=y
491endif
492
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700493ifeq ($(CONFIG_TLS), openssl)
494ifdef TLS_FUNCS
495OBJS += ../src/crypto/tls_openssl.o
496LIBS += -lssl
497endif
498OBJS += ../src/crypto/crypto_openssl.o
499HOBJS += ../src/crypto/crypto_openssl.o
500ifdef NEED_FIPS186_2_PRF
501OBJS += ../src/crypto/fips_prf_openssl.o
502endif
503LIBS += -lcrypto
504LIBS_h += -lcrypto
505endif
506
507ifeq ($(CONFIG_TLS), gnutls)
508ifdef TLS_FUNCS
509OBJS += ../src/crypto/tls_gnutls.o
510LIBS += -lgnutls -lgpg-error
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700511endif
512OBJS += ../src/crypto/crypto_gnutls.o
513HOBJS += ../src/crypto/crypto_gnutls.o
514ifdef NEED_FIPS186_2_PRF
515OBJS += ../src/crypto/fips_prf_gnutls.o
516endif
517LIBS += -lgcrypt
518LIBS_h += -lgcrypt
519CONFIG_INTERNAL_SHA256=y
520CONFIG_INTERNAL_RC4=y
521CONFIG_INTERNAL_DH_GROUP5=y
522endif
523
524ifeq ($(CONFIG_TLS), schannel)
525ifdef TLS_FUNCS
526OBJS += ../src/crypto/tls_schannel.o
527endif
528OBJS += ../src/crypto/crypto_cryptoapi.o
529OBJS_p += ../src/crypto/crypto_cryptoapi.o
530CONFIG_INTERNAL_SHA256=y
531CONFIG_INTERNAL_RC4=y
532CONFIG_INTERNAL_DH_GROUP5=y
533endif
534
535ifeq ($(CONFIG_TLS), nss)
536ifdef TLS_FUNCS
537OBJS += ../src/crypto/tls_nss.o
538LIBS += -lssl3
539endif
540OBJS += ../src/crypto/crypto_nss.o
541ifdef NEED_FIPS186_2_PRF
542OBJS += ../src/crypto/fips_prf_nss.o
543endif
544LIBS += -lnss3
545LIBS_h += -lnss3
546CONFIG_INTERNAL_MD4=y
547CONFIG_INTERNAL_DH_GROUP5=y
548endif
549
550ifeq ($(CONFIG_TLS), internal)
551ifndef CONFIG_CRYPTO
552CONFIG_CRYPTO=internal
553endif
554ifdef TLS_FUNCS
555OBJS += ../src/crypto/crypto_internal-rsa.o
556OBJS += ../src/crypto/tls_internal.o
557OBJS += ../src/tls/tlsv1_common.o
558OBJS += ../src/tls/tlsv1_record.o
559OBJS += ../src/tls/tlsv1_cred.o
560OBJS += ../src/tls/tlsv1_server.o
561OBJS += ../src/tls/tlsv1_server_write.o
562OBJS += ../src/tls/tlsv1_server_read.o
563OBJS += ../src/tls/asn1.o
564OBJS += ../src/tls/rsa.o
565OBJS += ../src/tls/x509v3.o
566OBJS += ../src/tls/pkcs1.o
567OBJS += ../src/tls/pkcs5.o
568OBJS += ../src/tls/pkcs8.o
569NEED_SHA256=y
570NEED_BASE64=y
571NEED_TLS_PRF=y
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800572ifdef CONFIG_TLSV12
573NEED_TLS_PRF_SHA256=y
574endif
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700575NEED_MODEXP=y
576NEED_CIPHER=y
577CFLAGS += -DCONFIG_TLS_INTERNAL
578CFLAGS += -DCONFIG_TLS_INTERNAL_SERVER
579endif
580ifdef NEED_CIPHER
581NEED_DES=y
582OBJS += ../src/crypto/crypto_internal-cipher.o
583endif
584ifdef NEED_MODEXP
585OBJS += ../src/crypto/crypto_internal-modexp.o
586OBJS += ../src/tls/bignum.o
587endif
588ifeq ($(CONFIG_CRYPTO), libtomcrypt)
589OBJS += ../src/crypto/crypto_libtomcrypt.o
590LIBS += -ltomcrypt -ltfm
591LIBS_h += -ltomcrypt -ltfm
592CONFIG_INTERNAL_SHA256=y
593CONFIG_INTERNAL_RC4=y
594CONFIG_INTERNAL_DH_GROUP5=y
595endif
596ifeq ($(CONFIG_CRYPTO), internal)
597OBJS += ../src/crypto/crypto_internal.o
598NEED_AES_DEC=y
599CFLAGS += -DCONFIG_CRYPTO_INTERNAL
600ifdef CONFIG_INTERNAL_LIBTOMMATH
601CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
602ifdef CONFIG_INTERNAL_LIBTOMMATH_FAST
603CFLAGS += -DLTM_FAST
604endif
605else
606LIBS += -ltommath
607LIBS_h += -ltommath
608endif
609CONFIG_INTERNAL_AES=y
610CONFIG_INTERNAL_DES=y
611CONFIG_INTERNAL_SHA1=y
612CONFIG_INTERNAL_MD4=y
613CONFIG_INTERNAL_MD5=y
614CONFIG_INTERNAL_SHA256=y
615CONFIG_INTERNAL_RC4=y
616CONFIG_INTERNAL_DH_GROUP5=y
617endif
618ifeq ($(CONFIG_CRYPTO), cryptoapi)
619OBJS += ../src/crypto/crypto_cryptoapi.o
620OBJS_p += ../src/crypto/crypto_cryptoapi.o
621CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
622CONFIG_INTERNAL_SHA256=y
623CONFIG_INTERNAL_RC4=y
624endif
625endif
626
627ifeq ($(CONFIG_TLS), none)
628ifdef TLS_FUNCS
629OBJS += ../src/crypto/tls_none.o
630CFLAGS += -DEAP_TLS_NONE
631CONFIG_INTERNAL_AES=y
632CONFIG_INTERNAL_SHA1=y
633CONFIG_INTERNAL_MD5=y
634endif
635OBJS += ../src/crypto/crypto_none.o
636OBJS_p += ../src/crypto/crypto_none.o
637CONFIG_INTERNAL_SHA256=y
638CONFIG_INTERNAL_RC4=y
639endif
640
641ifndef TLS_FUNCS
642OBJS += ../src/crypto/tls_none.o
643ifeq ($(CONFIG_TLS), internal)
644CONFIG_INTERNAL_AES=y
645CONFIG_INTERNAL_SHA1=y
646CONFIG_INTERNAL_MD5=y
647CONFIG_INTERNAL_RC4=y
648endif
649endif
650
651AESOBJS = # none so far
652ifdef CONFIG_INTERNAL_AES
653AESOBJS += ../src/crypto/aes-internal.o ../src/crypto/aes-internal-enc.o
654endif
655
656AESOBJS += ../src/crypto/aes-wrap.o
657ifdef NEED_AES_EAX
658AESOBJS += ../src/crypto/aes-eax.o
659NEED_AES_CTR=y
660endif
661ifdef NEED_AES_CTR
662AESOBJS += ../src/crypto/aes-ctr.o
663endif
664ifdef NEED_AES_ENCBLOCK
665AESOBJS += ../src/crypto/aes-encblock.o
666endif
667ifdef NEED_AES_OMAC1
668AESOBJS += ../src/crypto/aes-omac1.o
669endif
670ifdef NEED_AES_UNWRAP
671NEED_AES_DEC=y
672AESOBJS += ../src/crypto/aes-unwrap.o
673endif
674ifdef NEED_AES_CBC
675NEED_AES_DEC=y
676AESOBJS += ../src/crypto/aes-cbc.o
677endif
678ifdef NEED_AES_DEC
679ifdef CONFIG_INTERNAL_AES
680AESOBJS += ../src/crypto/aes-internal-dec.o
681endif
682endif
683ifdef NEED_AES
684OBJS += $(AESOBJS)
685endif
686
687ifdef NEED_SHA1
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700688ifneq ($(CONFIG_TLS), openssl)
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700689SHA1OBJS += ../src/crypto/sha1.o
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700690endif
691SHA1OBJS += ../src/crypto/sha1-prf.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700692ifdef CONFIG_INTERNAL_SHA1
693SHA1OBJS += ../src/crypto/sha1-internal.o
694ifdef NEED_FIPS186_2_PRF
695SHA1OBJS += ../src/crypto/fips_prf_internal.o
696endif
697endif
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700698ifneq ($(CONFIG_TLS), openssl)
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700699SHA1OBJS += ../src/crypto/sha1-pbkdf2.o
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700700endif
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700701ifdef NEED_T_PRF
702SHA1OBJS += ../src/crypto/sha1-tprf.o
703endif
704ifdef NEED_TLS_PRF
705SHA1OBJS += ../src/crypto/sha1-tlsprf.o
706endif
707endif
708
709ifdef NEED_SHA1
710OBJS += $(SHA1OBJS)
711endif
712
713ifdef NEED_MD5
714ifdef CONFIG_INTERNAL_MD5
715OBJS += ../src/crypto/md5-internal.o
716HOBJS += ../src/crypto/md5-internal.o
717endif
718endif
719
720ifdef NEED_MD4
721ifdef CONFIG_INTERNAL_MD4
722OBJS += ../src/crypto/md4-internal.o
723endif
724endif
725
726ifdef NEED_DES
727ifdef CONFIG_INTERNAL_DES
728OBJS += ../src/crypto/des-internal.o
729endif
730endif
731
732ifdef NEED_RC4
733ifdef CONFIG_INTERNAL_RC4
734OBJS += ../src/crypto/rc4.o
735endif
736endif
737
738ifdef NEED_SHA256
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800739CFLAGS += -DCONFIG_SHA256
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700740ifneq ($(CONFIG_TLS), openssl)
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700741OBJS += ../src/crypto/sha256.o
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700742endif
743OBJS += ../src/crypto/sha256-prf.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700744ifdef CONFIG_INTERNAL_SHA256
745OBJS += ../src/crypto/sha256-internal.o
746endif
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800747ifdef NEED_TLS_PRF_SHA256
748OBJS += ../src/crypto/sha256-tlsprf.o
749endif
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700750endif
751
752ifdef NEED_DH_GROUPS
753OBJS += ../src/crypto/dh_groups.o
754endif
755ifdef NEED_DH_GROUPS_ALL
756CFLAGS += -DALL_DH_GROUPS
757endif
758ifdef CONFIG_INTERNAL_DH_GROUP5
759ifdef NEED_DH_GROUPS
760OBJS += ../src/crypto/dh_group5.o
761endif
762endif
763
Dmitry Shmidta54fa5f2013-01-15 13:53:35 -0800764ifdef NEED_ECC
765CFLAGS += -DCONFIG_ECC
766endif
767
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700768ifdef CONFIG_NO_RANDOM_POOL
769CFLAGS += -DCONFIG_NO_RANDOM_POOL
770else
771OBJS += ../src/crypto/random.o
772HOBJS += ../src/crypto/random.o
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800773HOBJS += ../src/utils/eloop.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700774HOBJS += $(SHA1OBJS)
775HOBJS += ../src/crypto/md5.o
776endif
777
778ifdef CONFIG_RADIUS_SERVER
779CFLAGS += -DRADIUS_SERVER
780OBJS += ../src/radius/radius_server.o
781endif
782
783ifdef CONFIG_IPV6
784CFLAGS += -DCONFIG_IPV6
785endif
786
787ifdef CONFIG_DRIVER_RADIUS_ACL
788CFLAGS += -DCONFIG_DRIVER_RADIUS_ACL
789endif
790
791ifdef CONFIG_FULL_DYNAMIC_VLAN
792# define CONFIG_FULL_DYNAMIC_VLAN to have hostapd manipulate bridges
793# and vlan interfaces for the vlan feature.
794CFLAGS += -DCONFIG_FULL_DYNAMIC_VLAN
795endif
796
797ifdef NEED_BASE64
798OBJS += ../src/utils/base64.o
799endif
800
801ifdef NEED_AP_MLME
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700802OBJS += ../src/ap/wmm.o
803OBJS += ../src/ap/ap_list.o
804OBJS += ../src/ap/ieee802_11.o
805OBJS += ../src/ap/hw_features.o
Dmitry Shmidt051af732013-10-22 13:52:46 -0700806OBJS += ../src/ap/dfs.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700807CFLAGS += -DNEED_AP_MLME
808endif
809ifdef CONFIG_IEEE80211N
810OBJS += ../src/ap/ieee802_11_ht.o
811endif
812
Dmitry Shmidt04949592012-07-19 12:16:46 -0700813ifdef CONFIG_IEEE80211AC
814OBJS += ../src/ap/ieee802_11_vht.o
815endif
816
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700817ifdef CONFIG_P2P_MANAGER
818CFLAGS += -DCONFIG_P2P_MANAGER
819OBJS += ../src/ap/p2p_hostapd.o
820endif
821
Dmitry Shmidt61d9df32012-08-29 16:22:06 -0700822ifdef CONFIG_HS20
823CFLAGS += -DCONFIG_HS20
824OBJS += ../src/ap/hs20.o
825CONFIG_INTERWORKING=y
826endif
827
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800828ifdef CONFIG_INTERWORKING
829CFLAGS += -DCONFIG_INTERWORKING
Dmitry Shmidt04949592012-07-19 12:16:46 -0700830OBJS += ../src/common/gas.o
831OBJS += ../src/ap/gas_serv.o
Dmitry Shmidt1f69aa52012-01-24 16:10:04 -0800832endif
833
834OBJS += ../src/drivers/driver_common.o
835
836ifdef CONFIG_WPA_CLI_EDIT
837OBJS_c += ../src/utils/edit.o
838else
839OBJS_c += ../src/utils/edit_simple.o
840endif
841
Dmitry Shmidt391c59f2013-09-03 12:16:28 -0700842ifdef CONFIG_ACS
843CFLAGS += -DCONFIG_ACS
844OBJS += ../src/ap/acs.o
845LIBS += -lm
846endif
847
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700848ifdef CONFIG_NO_STDOUT_DEBUG
849CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
850endif
851
Dmitry Shmidtcce06662013-11-04 18:44:24 -0800852ifdef CONFIG_DEBUG_LINUX_TRACING
853CFLAGS += -DCONFIG_DEBUG_LINUX_TRACING
854endif
855
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700856ifdef CONFIG_DEBUG_FILE
857CFLAGS += -DCONFIG_DEBUG_FILE
858endif
859
Dmitry Shmidt4530cfd2012-09-09 15:20:40 -0700860ifdef CONFIG_SQLITE
861CFLAGS += -DCONFIG_SQLITE
862LIBS += -lsqlite3
863LIBS_h += -lsqlite3
864endif
865
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700866ALL=hostapd hostapd_cli
867
868all: verify_config $(ALL)
869
870Q=@
871E=echo
872ifeq ($(V), 1)
873Q=
874E=true
875endif
876
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800877ifdef CONFIG_CODE_COVERAGE
878%.o: %.c
879 @$(E) " CC " $<
880 $(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
881else
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700882%.o: %.c
883 $(Q)$(CC) -c -o $@ $(CFLAGS) $<
884 @$(E) " CC " $<
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800885endif
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700886
887verify_config:
888 @if [ ! -r .config ]; then \
889 echo 'Building hostapd requires a configuration file'; \
890 echo '(.config). See README for more instructions. You can'; \
891 echo 'run "cp defconfig .config" to create an example'; \
892 echo 'configuration.'; \
893 exit 1; \
894 fi
895
896install: all
897 mkdir -p $(DESTDIR)/usr/local/bin
898 for i in $(ALL); do cp -f $$i $(DESTDIR)/usr/local/bin/$$i; done
899
900../src/drivers/build.hostapd:
901 @if [ -f ../src/drivers/build.wpa_supplicant ]; then \
902 $(MAKE) -C ../src/drivers clean; \
903 fi
904 @touch ../src/drivers/build.hostapd
905
906BCHECK=../src/drivers/build.hostapd
907
908hostapd: $(BCHECK) $(OBJS)
909 $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
910 @$(E) " LD " $@
911
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700912ifdef CONFIG_WPA_TRACE
913OBJS_c += ../src/utils/trace.o
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700914endif
915hostapd_cli: $(OBJS_c)
916 $(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
917 @$(E) " LD " $@
918
919NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS) ../src/crypto/md5.o
920ifdef NEED_RC4
921ifdef CONFIG_INTERNAL_RC4
922NOBJS += ../src/crypto/rc4.o
923endif
924endif
925ifdef CONFIG_INTERNAL_MD5
926NOBJS += ../src/crypto/md5-internal.o
927endif
928NOBJS += ../src/crypto/crypto_openssl.o ../src/utils/os_$(CONFIG_OS).o
929NOBJS += ../src/utils/wpa_debug.o
930NOBJS += ../src/utils/wpabuf.o
931ifdef CONFIG_WPA_TRACE
932NOBJS += ../src/utils/trace.o
933LIBS_n += -lbfd
934endif
935ifdef TLS_FUNCS
936LIBS_n += -lcrypto
937endif
938
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700939HOBJS += hlr_auc_gw.o ../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/os_$(CONFIG_OS).o ../src/utils/wpabuf.o ../src/crypto/milenage.o
940HOBJS += ../src/crypto/aes-encblock.o
941ifdef CONFIG_INTERNAL_AES
942HOBJS += ../src/crypto/aes-internal.o
943HOBJS += ../src/crypto/aes-internal-enc.o
944endif
945
946nt_password_hash: $(NOBJS)
947 $(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n)
948 @$(E) " LD " $@
949
950hlr_auc_gw: $(HOBJS)
951 $(Q)$(CC) $(LDFLAGS) -o hlr_auc_gw $(HOBJS) $(LIBS_h)
952 @$(E) " LD " $@
953
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800954lcov-html:
955 lcov -c -d .. > lcov.info
956 genhtml lcov.info --output-directory lcov-html
957
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700958clean:
959 $(MAKE) -C ../src clean
960 rm -f core *~ *.o hostapd hostapd_cli nt_password_hash hlr_auc_gw
Dmitry Shmidt01904cf2013-12-05 11:08:35 -0800961 rm -f *.d *.gcno *.gcda *.gcov
Dmitry Shmidtfb79edc2014-01-10 10:45:54 -0800962 rm -f lcov.info
963 rm -rf lcov-html
Dmitry Shmidt8d520ff2011-05-09 14:06:53 -0700964
965-include $(OBJS:%.o=%.d)