Makefile revision b97e428f8acf1ecb93f38f8d0063d2f2fd0bc36e
1ifndef CC
2CC=gcc
3endif
4
5ifndef CFLAGS
6CFLAGS = -MMD -O2 -Wall -g
7endif
8
9ifdef LIBS
10# If LIBS is set with some global build system defaults, clone those for
11# LIBS_c, LIBS_h, and LIBS_n to cover hostapd_cli, hlr_auc_gw, and
12# nt_password_hash as well.
13ifndef LIBS_c
14LIBS_c := $(LIBS)
15endif
16ifndef LIBS_h
17LIBS_h := $(LIBS)
18endif
19ifndef LIBS_n
20LIBS_n := $(LIBS)
21endif
22endif
23
24CFLAGS += $(EXTRA_CFLAGS)
25CFLAGS += -I$(abspath ../src)
26CFLAGS += -I$(abspath ../src/utils)
27
28export BINDIR ?= /usr/local/bin/
29
30# Uncomment following line and set the path to your kernel tree include
31# directory if your C library does not include all header files.
32# CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include
33
34-include .config
35
36ifndef CONFIG_NO_GITVER
37# Add VERSION_STR postfix for builds from a git repository
38ifeq ($(wildcard ../.git),../.git)
39GITVER := $(shell git describe --dirty=+)
40ifneq ($(GITVER),)
41CFLAGS += -DGIT_VERSION_STR_POSTFIX=\"-$(GITVER)\"
42endif
43endif
44endif
45
46ifdef CONFIG_TESTING_OPTIONS
47CFLAGS += -DCONFIG_TESTING_OPTIONS
48CONFIG_WPS_TESTING=y
49endif
50
51ifndef CONFIG_OS
52ifdef CONFIG_NATIVE_WINDOWS
53CONFIG_OS=win32
54else
55CONFIG_OS=unix
56endif
57endif
58
59ifeq ($(CONFIG_OS), internal)
60CFLAGS += -DOS_NO_C_LIB_DEFINES
61endif
62
63ifdef CONFIG_NATIVE_WINDOWS
64CFLAGS += -DCONFIG_NATIVE_WINDOWS
65LIBS += -lws2_32
66endif
67
68OBJS += main.o
69OBJS += config_file.o
70
71OBJS += ../src/ap/hostapd.o
72OBJS += ../src/ap/wpa_auth_glue.o
73OBJS += ../src/ap/drv_callbacks.o
74OBJS += ../src/ap/ap_drv_ops.o
75OBJS += ../src/ap/utils.o
76OBJS += ../src/ap/authsrv.o
77OBJS += ../src/ap/ieee802_1x.o
78OBJS += ../src/ap/ap_config.o
79OBJS += ../src/ap/eap_user_db.o
80OBJS += ../src/ap/ieee802_11_auth.o
81OBJS += ../src/ap/sta_info.o
82OBJS += ../src/ap/wpa_auth.o
83OBJS += ../src/ap/tkip_countermeasures.o
84OBJS += ../src/ap/ap_mlme.o
85OBJS += ../src/ap/wpa_auth_ie.o
86OBJS += ../src/ap/preauth_auth.o
87OBJS += ../src/ap/pmksa_cache_auth.o
88OBJS += ../src/ap/ieee802_11_shared.o
89OBJS += ../src/ap/beacon.o
90OBJS += ../src/ap/bss_load.o
91
92OBJS_c = hostapd_cli.o ../src/common/wpa_ctrl.o ../src/utils/os_$(CONFIG_OS).o
93
94NEED_RC4=y
95NEED_AES=y
96NEED_MD5=y
97NEED_SHA1=y
98
99OBJS += ../src/drivers/drivers.o
100CFLAGS += -DHOSTAPD
101
102ifdef CONFIG_MODULE_TESTS
103CFLAGS += -DCONFIG_MODULE_TESTS
104OBJS += hapd_module_tests.o
105endif
106
107ifdef CONFIG_WPA_TRACE
108CFLAGS += -DWPA_TRACE
109OBJS += ../src/utils/trace.o
110HOBJS += ../src/utils/trace.o
111LDFLAGS += -rdynamic
112CFLAGS += -funwind-tables
113ifdef CONFIG_WPA_TRACE_BFD
114CFLAGS += -DPACKAGE="hostapd" -DWPA_TRACE_BFD
115LIBS += -lbfd -ldl -liberty -lz
116LIBS_c += -lbfd -ldl -liberty -lz
117LIBS_h += -lbfd -ldl -liberty -lz
118endif
119endif
120
121ifndef CONFIG_ELOOP
122CONFIG_ELOOP=eloop
123endif
124OBJS += ../src/utils/$(CONFIG_ELOOP).o
125OBJS_c += ../src/utils/$(CONFIG_ELOOP).o
126
127ifeq ($(CONFIG_ELOOP), eloop)
128# Using glibc < 2.17 requires -lrt for clock_gettime()
129LIBS += -lrt
130LIBS_c += -lrt
131LIBS_h += -lrt
132LIBS_n += -lrt
133endif
134
135ifdef CONFIG_ELOOP_POLL
136CFLAGS += -DCONFIG_ELOOP_POLL
137endif
138
139ifdef CONFIG_ELOOP_EPOLL
140CFLAGS += -DCONFIG_ELOOP_EPOLL
141endif
142
143ifdef CONFIG_ELOOP_KQUEUE
144CFLAGS += -DCONFIG_ELOOP_KQUEUE
145endif
146
147OBJS += ../src/utils/common.o
148OBJS_c += ../src/utils/common.o
149OBJS += ../src/utils/wpa_debug.o
150OBJS_c += ../src/utils/wpa_debug.o
151OBJS += ../src/utils/wpabuf.o
152OBJS += ../src/utils/os_$(CONFIG_OS).o
153OBJS += ../src/utils/ip_addr.o
154
155OBJS += ../src/common/ieee802_11_common.o
156OBJS += ../src/common/wpa_common.o
157OBJS += ../src/common/hw_features_common.o
158
159OBJS += ../src/eapol_auth/eapol_auth_sm.o
160
161
162ifdef CONFIG_CODE_COVERAGE
163CFLAGS += -O0 -fprofile-arcs -ftest-coverage
164LIBS += -lgcov
165LIBS_c += -lgcov
166LIBS_h += -lgcov
167LIBS_n += -lgcov
168endif
169
170ifndef CONFIG_NO_DUMP_STATE
171# define HOSTAPD_DUMP_STATE to include support for dumping internal state
172# through control interface commands (undefine it, if you want to save in
173# binary size)
174CFLAGS += -DHOSTAPD_DUMP_STATE
175OBJS += ../src/eapol_auth/eapol_auth_dump.o
176endif
177
178ifdef CONFIG_NO_RADIUS
179CFLAGS += -DCONFIG_NO_RADIUS
180CONFIG_NO_ACCOUNTING=y
181else
182OBJS += ../src/radius/radius.o
183OBJS += ../src/radius/radius_client.o
184OBJS += ../src/radius/radius_das.o
185endif
186
187ifdef CONFIG_NO_ACCOUNTING
188CFLAGS += -DCONFIG_NO_ACCOUNTING
189else
190OBJS += ../src/ap/accounting.o
191endif
192
193ifdef CONFIG_NO_VLAN
194CFLAGS += -DCONFIG_NO_VLAN
195else
196OBJS += ../src/ap/vlan_init.o
197ifdef CONFIG_VLAN_NETLINK
198ifdef CONFIG_FULL_DYNAMIC_VLAN
199OBJS += ../src/ap/vlan_util.o
200endif
201CFLAGS += -DCONFIG_VLAN_NETLINK
202endif
203endif
204
205ifdef CONFIG_NO_CTRL_IFACE
206CFLAGS += -DCONFIG_NO_CTRL_IFACE
207else
208OBJS += ctrl_iface.o
209OBJS += ../src/ap/ctrl_iface_ap.o
210endif
211
212CFLAGS += -DCONFIG_CTRL_IFACE -DCONFIG_CTRL_IFACE_UNIX
213
214ifdef CONFIG_IAPP
215CFLAGS += -DCONFIG_IAPP
216OBJS += ../src/ap/iapp.o
217endif
218
219ifdef CONFIG_RSN_PREAUTH
220CFLAGS += -DCONFIG_RSN_PREAUTH
221CONFIG_L2_PACKET=y
222endif
223
224ifdef CONFIG_PEERKEY
225CFLAGS += -DCONFIG_PEERKEY
226OBJS += ../src/ap/peerkey_auth.o
227endif
228
229ifdef CONFIG_HS20
230NEED_AES_OMAC1=y
231CONFIG_PROXYARP=y
232endif
233
234ifdef CONFIG_PROXYARP
235CONFIG_L2_PACKET=y
236endif
237
238ifdef CONFIG_SUITEB
239CFLAGS += -DCONFIG_SUITEB
240NEED_SHA256=y
241NEED_AES_OMAC1=y
242endif
243
244ifdef CONFIG_SUITEB192
245CFLAGS += -DCONFIG_SUITEB192
246NEED_SHA384=y
247endif
248
249ifdef CONFIG_IEEE80211W
250CFLAGS += -DCONFIG_IEEE80211W
251NEED_SHA256=y
252NEED_AES_OMAC1=y
253endif
254
255ifdef CONFIG_IEEE80211R
256CFLAGS += -DCONFIG_IEEE80211R
257OBJS += ../src/ap/wpa_auth_ft.o
258NEED_SHA256=y
259NEED_AES_OMAC1=y
260NEED_AES_UNWRAP=y
261endif
262
263ifdef CONFIG_SAE
264CFLAGS += -DCONFIG_SAE
265OBJS += ../src/common/sae.o
266NEED_ECC=y
267NEED_DH_GROUPS=y
268NEED_AP_MLME=y
269endif
270
271ifdef CONFIG_WNM
272CFLAGS += -DCONFIG_WNM
273OBJS += ../src/ap/wnm_ap.o
274endif
275
276ifdef CONFIG_IEEE80211N
277CFLAGS += -DCONFIG_IEEE80211N
278endif
279
280ifdef CONFIG_IEEE80211AC
281CFLAGS += -DCONFIG_IEEE80211AC
282endif
283
284include ../src/drivers/drivers.mak
285OBJS += $(DRV_AP_OBJS)
286CFLAGS += $(DRV_AP_CFLAGS)
287LDFLAGS += $(DRV_AP_LDFLAGS)
288LIBS += $(DRV_AP_LIBS)
289
290ifdef CONFIG_L2_PACKET
291ifdef CONFIG_DNET_PCAP
292ifdef CONFIG_L2_FREEBSD
293LIBS += -lpcap
294OBJS += ../src/l2_packet/l2_packet_freebsd.o
295else
296LIBS += -ldnet -lpcap
297OBJS += ../src/l2_packet/l2_packet_pcap.o
298endif
299else
300OBJS += ../src/l2_packet/l2_packet_linux.o
301endif
302else
303OBJS += ../src/l2_packet/l2_packet_none.o
304endif
305
306
307ifdef CONFIG_ERP
308CFLAGS += -DCONFIG_ERP
309NEED_SHA256=y
310NEED_HMAC_SHA256_KDF=y
311endif
312
313ifdef CONFIG_EAP_MD5
314CFLAGS += -DEAP_SERVER_MD5
315OBJS += ../src/eap_server/eap_server_md5.o
316CHAP=y
317endif
318
319ifdef CONFIG_EAP_TLS
320CFLAGS += -DEAP_SERVER_TLS
321OBJS += ../src/eap_server/eap_server_tls.o
322TLS_FUNCS=y
323endif
324
325ifdef CONFIG_EAP_UNAUTH_TLS
326CFLAGS += -DEAP_SERVER_UNAUTH_TLS
327ifndef CONFIG_EAP_TLS
328OBJS += ../src/eap_server/eap_server_tls.o
329TLS_FUNCS=y
330endif
331endif
332
333ifdef CONFIG_EAP_PEAP
334CFLAGS += -DEAP_SERVER_PEAP
335OBJS += ../src/eap_server/eap_server_peap.o
336OBJS += ../src/eap_common/eap_peap_common.o
337TLS_FUNCS=y
338CONFIG_EAP_MSCHAPV2=y
339endif
340
341ifdef CONFIG_EAP_TTLS
342CFLAGS += -DEAP_SERVER_TTLS
343OBJS += ../src/eap_server/eap_server_ttls.o
344TLS_FUNCS=y
345CHAP=y
346endif
347
348ifdef CONFIG_EAP_MSCHAPV2
349CFLAGS += -DEAP_SERVER_MSCHAPV2
350OBJS += ../src/eap_server/eap_server_mschapv2.o
351MS_FUNCS=y
352endif
353
354ifdef CONFIG_EAP_GTC
355CFLAGS += -DEAP_SERVER_GTC
356OBJS += ../src/eap_server/eap_server_gtc.o
357endif
358
359ifdef CONFIG_EAP_SIM
360CFLAGS += -DEAP_SERVER_SIM
361OBJS += ../src/eap_server/eap_server_sim.o
362CONFIG_EAP_SIM_COMMON=y
363NEED_AES_CBC=y
364endif
365
366ifdef CONFIG_EAP_AKA
367CFLAGS += -DEAP_SERVER_AKA
368OBJS += ../src/eap_server/eap_server_aka.o
369CONFIG_EAP_SIM_COMMON=y
370NEED_SHA256=y
371NEED_AES_CBC=y
372endif
373
374ifdef CONFIG_EAP_AKA_PRIME
375CFLAGS += -DEAP_SERVER_AKA_PRIME
376endif
377
378ifdef CONFIG_EAP_SIM_COMMON
379OBJS += ../src/eap_common/eap_sim_common.o
380# Example EAP-SIM/AKA interface for GSM/UMTS authentication. This can be
381# replaced with another file implementating the interface specified in
382# eap_sim_db.h.
383OBJS += ../src/eap_server/eap_sim_db.o
384NEED_FIPS186_2_PRF=y
385endif
386
387ifdef CONFIG_EAP_PAX
388CFLAGS += -DEAP_SERVER_PAX
389OBJS += ../src/eap_server/eap_server_pax.o ../src/eap_common/eap_pax_common.o
390endif
391
392ifdef CONFIG_EAP_PSK
393CFLAGS += -DEAP_SERVER_PSK
394OBJS += ../src/eap_server/eap_server_psk.o ../src/eap_common/eap_psk_common.o
395NEED_AES_OMAC1=y
396NEED_AES_ENCBLOCK=y
397NEED_AES_EAX=y
398endif
399
400ifdef CONFIG_EAP_SAKE
401CFLAGS += -DEAP_SERVER_SAKE
402OBJS += ../src/eap_server/eap_server_sake.o ../src/eap_common/eap_sake_common.o
403endif
404
405ifdef CONFIG_EAP_GPSK
406CFLAGS += -DEAP_SERVER_GPSK
407OBJS += ../src/eap_server/eap_server_gpsk.o ../src/eap_common/eap_gpsk_common.o
408ifdef CONFIG_EAP_GPSK_SHA256
409CFLAGS += -DEAP_GPSK_SHA256
410endif
411NEED_SHA256=y
412NEED_AES_OMAC1=y
413endif
414
415ifdef CONFIG_EAP_PWD
416CFLAGS += -DEAP_SERVER_PWD
417OBJS += ../src/eap_server/eap_server_pwd.o ../src/eap_common/eap_pwd_common.o
418NEED_SHA256=y
419endif
420
421ifdef CONFIG_EAP_EKE
422CFLAGS += -DEAP_SERVER_EKE
423OBJS += ../src/eap_server/eap_server_eke.o ../src/eap_common/eap_eke_common.o
424NEED_DH_GROUPS=y
425NEED_DH_GROUPS_ALL=y
426endif
427
428ifdef CONFIG_EAP_VENDOR_TEST
429CFLAGS += -DEAP_SERVER_VENDOR_TEST
430OBJS += ../src/eap_server/eap_server_vendor_test.o
431endif
432
433ifdef CONFIG_EAP_FAST
434CFLAGS += -DEAP_SERVER_FAST
435OBJS += ../src/eap_server/eap_server_fast.o
436OBJS += ../src/eap_common/eap_fast_common.o
437TLS_FUNCS=y
438NEED_T_PRF=y
439NEED_AES_UNWRAP=y
440endif
441
442ifdef CONFIG_WPS
443CFLAGS += -DCONFIG_WPS -DEAP_SERVER_WSC
444OBJS += ../src/utils/uuid.o
445OBJS += ../src/ap/wps_hostapd.o
446OBJS += ../src/eap_server/eap_server_wsc.o ../src/eap_common/eap_wsc_common.o
447OBJS += ../src/wps/wps.o
448OBJS += ../src/wps/wps_common.o
449OBJS += ../src/wps/wps_attr_parse.o
450OBJS += ../src/wps/wps_attr_build.o
451OBJS += ../src/wps/wps_attr_process.o
452OBJS += ../src/wps/wps_dev_attr.o
453OBJS += ../src/wps/wps_enrollee.o
454OBJS += ../src/wps/wps_registrar.o
455NEED_DH_GROUPS=y
456NEED_SHA256=y
457NEED_BASE64=y
458NEED_AES_CBC=y
459NEED_MODEXP=y
460CONFIG_EAP=y
461
462ifdef CONFIG_WPS_NFC
463CFLAGS += -DCONFIG_WPS_NFC
464OBJS += ../src/wps/ndef.o
465NEED_WPS_OOB=y
466endif
467
468ifdef NEED_WPS_OOB
469CFLAGS += -DCONFIG_WPS_OOB
470endif
471
472ifdef CONFIG_WPS_UPNP
473CFLAGS += -DCONFIG_WPS_UPNP
474OBJS += ../src/wps/wps_upnp.o
475OBJS += ../src/wps/wps_upnp_ssdp.o
476OBJS += ../src/wps/wps_upnp_web.o
477OBJS += ../src/wps/wps_upnp_event.o
478OBJS += ../src/wps/wps_upnp_ap.o
479OBJS += ../src/wps/upnp_xml.o
480OBJS += ../src/wps/httpread.o
481OBJS += ../src/wps/http_client.o
482OBJS += ../src/wps/http_server.o
483endif
484
485ifdef CONFIG_WPS_STRICT
486CFLAGS += -DCONFIG_WPS_STRICT
487OBJS += ../src/wps/wps_validate.o
488endif
489
490ifdef CONFIG_WPS_TESTING
491CFLAGS += -DCONFIG_WPS_TESTING
492endif
493
494endif
495
496ifdef CONFIG_EAP_IKEV2
497CFLAGS += -DEAP_SERVER_IKEV2
498OBJS += ../src/eap_server/eap_server_ikev2.o ../src/eap_server/ikev2.o
499OBJS += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
500NEED_DH_GROUPS=y
501NEED_DH_GROUPS_ALL=y
502NEED_MODEXP=y
503NEED_CIPHER=y
504endif
505
506ifdef CONFIG_EAP_TNC
507CFLAGS += -DEAP_SERVER_TNC
508OBJS += ../src/eap_server/eap_server_tnc.o
509OBJS += ../src/eap_server/tncs.o
510NEED_BASE64=y
511ifndef CONFIG_DRIVER_BSD
512LIBS += -ldl
513endif
514endif
515
516# Basic EAP functionality is needed for EAPOL
517OBJS += eap_register.o
518OBJS += ../src/eap_server/eap_server.o
519OBJS += ../src/eap_common/eap_common.o
520OBJS += ../src/eap_server/eap_server_methods.o
521OBJS += ../src/eap_server/eap_server_identity.o
522CFLAGS += -DEAP_SERVER_IDENTITY
523
524ifdef CONFIG_EAP
525CFLAGS += -DEAP_SERVER
526endif
527
528ifdef CONFIG_PKCS12
529CFLAGS += -DPKCS12_FUNCS
530endif
531
532ifdef MS_FUNCS
533OBJS += ../src/crypto/ms_funcs.o
534NEED_DES=y
535NEED_MD4=y
536endif
537
538ifdef CHAP
539OBJS += ../src/eap_common/chap.o
540endif
541
542ifdef TLS_FUNCS
543NEED_DES=y
544# Shared TLS functions (needed for EAP_TLS, EAP_PEAP, and EAP_TTLS)
545CFLAGS += -DEAP_TLS_FUNCS
546OBJS += ../src/eap_server/eap_server_tls_common.o
547NEED_TLS_PRF=y
548endif
549
550ifndef CONFIG_TLS
551CONFIG_TLS=openssl
552endif
553
554ifdef CONFIG_TLSV11
555CFLAGS += -DCONFIG_TLSV11
556endif
557
558ifdef CONFIG_TLSV12
559CFLAGS += -DCONFIG_TLSV12
560NEED_SHA256=y
561endif
562
563ifeq ($(CONFIG_TLS), openssl)
564ifdef TLS_FUNCS
565OBJS += ../src/crypto/tls_openssl.o
566OBJS += ../src/crypto/tls_openssl_ocsp.o
567LIBS += -lssl
568endif
569OBJS += ../src/crypto/crypto_openssl.o
570HOBJS += ../src/crypto/crypto_openssl.o
571ifdef NEED_FIPS186_2_PRF
572OBJS += ../src/crypto/fips_prf_openssl.o
573endif
574NEED_SHA256=y
575NEED_TLS_PRF_SHA256=y
576LIBS += -lcrypto
577LIBS_h += -lcrypto
578ifdef CONFIG_TLS_ADD_DL
579LIBS += -ldl
580LIBS_h += -ldl
581endif
582endif
583
584ifeq ($(CONFIG_TLS), gnutls)
585ifdef TLS_FUNCS
586OBJS += ../src/crypto/tls_gnutls.o
587LIBS += -lgnutls -lgpg-error
588endif
589OBJS += ../src/crypto/crypto_gnutls.o
590HOBJS += ../src/crypto/crypto_gnutls.o
591ifdef NEED_FIPS186_2_PRF
592OBJS += ../src/crypto/fips_prf_internal.o
593SHA1OBJS += ../src/crypto/sha1-internal.o
594endif
595LIBS += -lgcrypt
596LIBS_h += -lgcrypt
597CONFIG_INTERNAL_SHA256=y
598CONFIG_INTERNAL_RC4=y
599CONFIG_INTERNAL_DH_GROUP5=y
600endif
601
602ifeq ($(CONFIG_TLS), internal)
603ifndef CONFIG_CRYPTO
604CONFIG_CRYPTO=internal
605endif
606ifdef TLS_FUNCS
607OBJS += ../src/crypto/crypto_internal-rsa.o
608OBJS += ../src/crypto/tls_internal.o
609OBJS += ../src/tls/tlsv1_common.o
610OBJS += ../src/tls/tlsv1_record.o
611OBJS += ../src/tls/tlsv1_cred.o
612OBJS += ../src/tls/tlsv1_server.o
613OBJS += ../src/tls/tlsv1_server_write.o
614OBJS += ../src/tls/tlsv1_server_read.o
615OBJS += ../src/tls/asn1.o
616OBJS += ../src/tls/rsa.o
617OBJS += ../src/tls/x509v3.o
618OBJS += ../src/tls/pkcs1.o
619OBJS += ../src/tls/pkcs5.o
620OBJS += ../src/tls/pkcs8.o
621NEED_SHA256=y
622NEED_BASE64=y
623NEED_TLS_PRF=y
624ifdef CONFIG_TLSV12
625NEED_TLS_PRF_SHA256=y
626endif
627NEED_MODEXP=y
628NEED_CIPHER=y
629CFLAGS += -DCONFIG_TLS_INTERNAL
630CFLAGS += -DCONFIG_TLS_INTERNAL_SERVER
631endif
632ifdef NEED_CIPHER
633NEED_DES=y
634OBJS += ../src/crypto/crypto_internal-cipher.o
635endif
636ifdef NEED_MODEXP
637OBJS += ../src/crypto/crypto_internal-modexp.o
638OBJS += ../src/tls/bignum.o
639endif
640ifeq ($(CONFIG_CRYPTO), libtomcrypt)
641OBJS += ../src/crypto/crypto_libtomcrypt.o
642LIBS += -ltomcrypt -ltfm
643LIBS_h += -ltomcrypt -ltfm
644CONFIG_INTERNAL_SHA256=y
645CONFIG_INTERNAL_RC4=y
646CONFIG_INTERNAL_DH_GROUP5=y
647endif
648ifeq ($(CONFIG_CRYPTO), internal)
649OBJS += ../src/crypto/crypto_internal.o
650NEED_AES_DEC=y
651CFLAGS += -DCONFIG_CRYPTO_INTERNAL
652ifdef CONFIG_INTERNAL_LIBTOMMATH
653CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
654ifdef CONFIG_INTERNAL_LIBTOMMATH_FAST
655CFLAGS += -DLTM_FAST
656endif
657else
658LIBS += -ltommath
659LIBS_h += -ltommath
660endif
661CONFIG_INTERNAL_AES=y
662CONFIG_INTERNAL_DES=y
663CONFIG_INTERNAL_SHA1=y
664CONFIG_INTERNAL_MD4=y
665CONFIG_INTERNAL_MD5=y
666CONFIG_INTERNAL_SHA256=y
667CONFIG_INTERNAL_SHA384=y
668CONFIG_INTERNAL_SHA512=y
669CONFIG_INTERNAL_RC4=y
670CONFIG_INTERNAL_DH_GROUP5=y
671endif
672ifeq ($(CONFIG_CRYPTO), cryptoapi)
673OBJS += ../src/crypto/crypto_cryptoapi.o
674OBJS_p += ../src/crypto/crypto_cryptoapi.o
675CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
676CONFIG_INTERNAL_SHA256=y
677CONFIG_INTERNAL_RC4=y
678endif
679endif
680
681ifeq ($(CONFIG_TLS), none)
682ifdef TLS_FUNCS
683OBJS += ../src/crypto/tls_none.o
684CFLAGS += -DEAP_TLS_NONE
685CONFIG_INTERNAL_AES=y
686CONFIG_INTERNAL_SHA1=y
687CONFIG_INTERNAL_MD5=y
688endif
689OBJS += ../src/crypto/crypto_none.o
690OBJS_p += ../src/crypto/crypto_none.o
691CONFIG_INTERNAL_SHA256=y
692CONFIG_INTERNAL_RC4=y
693endif
694
695ifndef TLS_FUNCS
696OBJS += ../src/crypto/tls_none.o
697ifeq ($(CONFIG_TLS), internal)
698CONFIG_INTERNAL_AES=y
699CONFIG_INTERNAL_SHA1=y
700CONFIG_INTERNAL_MD5=y
701CONFIG_INTERNAL_RC4=y
702endif
703endif
704
705AESOBJS = # none so far
706ifdef CONFIG_INTERNAL_AES
707AESOBJS += ../src/crypto/aes-internal.o ../src/crypto/aes-internal-enc.o
708endif
709
710ifneq ($(CONFIG_TLS), openssl)
711AESOBJS += ../src/crypto/aes-wrap.o
712endif
713ifdef NEED_AES_EAX
714AESOBJS += ../src/crypto/aes-eax.o
715NEED_AES_CTR=y
716endif
717ifdef NEED_AES_CTR
718AESOBJS += ../src/crypto/aes-ctr.o
719endif
720ifdef NEED_AES_ENCBLOCK
721AESOBJS += ../src/crypto/aes-encblock.o
722endif
723ifdef NEED_AES_OMAC1
724AESOBJS += ../src/crypto/aes-omac1.o
725endif
726ifdef NEED_AES_UNWRAP
727ifneq ($(CONFIG_TLS), openssl)
728NEED_AES_DEC=y
729AESOBJS += ../src/crypto/aes-unwrap.o
730endif
731endif
732ifdef NEED_AES_CBC
733NEED_AES_DEC=y
734ifneq ($(CONFIG_TLS), openssl)
735AESOBJS += ../src/crypto/aes-cbc.o
736endif
737endif
738ifdef NEED_AES_DEC
739ifdef CONFIG_INTERNAL_AES
740AESOBJS += ../src/crypto/aes-internal-dec.o
741endif
742endif
743ifdef NEED_AES
744OBJS += $(AESOBJS)
745endif
746
747ifdef NEED_SHA1
748ifneq ($(CONFIG_TLS), openssl)
749SHA1OBJS += ../src/crypto/sha1.o
750endif
751SHA1OBJS += ../src/crypto/sha1-prf.o
752ifdef CONFIG_INTERNAL_SHA1
753SHA1OBJS += ../src/crypto/sha1-internal.o
754ifdef NEED_FIPS186_2_PRF
755SHA1OBJS += ../src/crypto/fips_prf_internal.o
756endif
757endif
758ifneq ($(CONFIG_TLS), openssl)
759SHA1OBJS += ../src/crypto/sha1-pbkdf2.o
760endif
761ifdef NEED_T_PRF
762SHA1OBJS += ../src/crypto/sha1-tprf.o
763endif
764ifdef NEED_TLS_PRF
765SHA1OBJS += ../src/crypto/sha1-tlsprf.o
766endif
767endif
768
769ifdef NEED_SHA1
770OBJS += $(SHA1OBJS)
771endif
772
773ifneq ($(CONFIG_TLS), openssl)
774OBJS += ../src/crypto/md5.o
775endif
776
777ifdef NEED_MD5
778ifdef CONFIG_INTERNAL_MD5
779OBJS += ../src/crypto/md5-internal.o
780HOBJS += ../src/crypto/md5-internal.o
781endif
782endif
783
784ifdef NEED_MD4
785ifdef CONFIG_INTERNAL_MD4
786OBJS += ../src/crypto/md4-internal.o
787endif
788endif
789
790ifdef NEED_DES
791ifdef CONFIG_INTERNAL_DES
792OBJS += ../src/crypto/des-internal.o
793endif
794endif
795
796ifdef CONFIG_NO_RC4
797CFLAGS += -DCONFIG_NO_RC4
798endif
799
800ifdef NEED_RC4
801ifdef CONFIG_INTERNAL_RC4
802ifndef CONFIG_NO_RC4
803OBJS += ../src/crypto/rc4.o
804endif
805endif
806endif
807
808ifdef NEED_SHA256
809CFLAGS += -DCONFIG_SHA256
810ifneq ($(CONFIG_TLS), openssl)
811OBJS += ../src/crypto/sha256.o
812endif
813OBJS += ../src/crypto/sha256-prf.o
814ifdef CONFIG_INTERNAL_SHA256
815OBJS += ../src/crypto/sha256-internal.o
816endif
817ifdef NEED_TLS_PRF_SHA256
818OBJS += ../src/crypto/sha256-tlsprf.o
819endif
820ifdef NEED_HMAC_SHA256_KDF
821OBJS += ../src/crypto/sha256-kdf.o
822endif
823endif
824ifdef NEED_SHA384
825CFLAGS += -DCONFIG_SHA384
826OBJS += ../src/crypto/sha384-prf.o
827endif
828
829ifdef CONFIG_INTERNAL_SHA384
830CFLAGS += -DCONFIG_INTERNAL_SHA384
831OBJS += ../src/crypto/sha384-internal.o
832endif
833
834ifdef CONFIG_INTERNAL_SHA512
835CFLAGS += -DCONFIG_INTERNAL_SHA512
836OBJS += ../src/crypto/sha512-internal.o
837endif
838
839ifdef NEED_DH_GROUPS
840OBJS += ../src/crypto/dh_groups.o
841endif
842ifdef NEED_DH_GROUPS_ALL
843CFLAGS += -DALL_DH_GROUPS
844endif
845ifdef CONFIG_INTERNAL_DH_GROUP5
846ifdef NEED_DH_GROUPS
847OBJS += ../src/crypto/dh_group5.o
848endif
849endif
850
851ifdef NEED_ECC
852CFLAGS += -DCONFIG_ECC
853endif
854
855ifdef CONFIG_NO_RANDOM_POOL
856CFLAGS += -DCONFIG_NO_RANDOM_POOL
857else
858OBJS += ../src/crypto/random.o
859HOBJS += ../src/crypto/random.o
860HOBJS += ../src/utils/eloop.o
861HOBJS += $(SHA1OBJS)
862ifneq ($(CONFIG_TLS), openssl)
863HOBJS += ../src/crypto/md5.o
864endif
865endif
866
867ifdef CONFIG_RADIUS_SERVER
868CFLAGS += -DRADIUS_SERVER
869OBJS += ../src/radius/radius_server.o
870endif
871
872ifdef CONFIG_IPV6
873CFLAGS += -DCONFIG_IPV6
874endif
875
876ifdef CONFIG_DRIVER_RADIUS_ACL
877CFLAGS += -DCONFIG_DRIVER_RADIUS_ACL
878endif
879
880ifdef CONFIG_FULL_DYNAMIC_VLAN
881# define CONFIG_FULL_DYNAMIC_VLAN to have hostapd manipulate bridges
882# and vlan interfaces for the vlan feature.
883CFLAGS += -DCONFIG_FULL_DYNAMIC_VLAN
884endif
885
886ifdef NEED_BASE64
887OBJS += ../src/utils/base64.o
888endif
889
890ifdef NEED_AP_MLME
891OBJS += ../src/ap/wmm.o
892OBJS += ../src/ap/ap_list.o
893OBJS += ../src/ap/ieee802_11.o
894OBJS += ../src/ap/hw_features.o
895OBJS += ../src/ap/dfs.o
896CFLAGS += -DNEED_AP_MLME
897endif
898ifdef CONFIG_IEEE80211N
899OBJS += ../src/ap/ieee802_11_ht.o
900endif
901
902ifdef CONFIG_IEEE80211AC
903OBJS += ../src/ap/ieee802_11_vht.o
904endif
905
906ifdef CONFIG_P2P_MANAGER
907CFLAGS += -DCONFIG_P2P_MANAGER
908OBJS += ../src/ap/p2p_hostapd.o
909endif
910
911ifdef CONFIG_HS20
912CFLAGS += -DCONFIG_HS20
913OBJS += ../src/ap/hs20.o
914CONFIG_INTERWORKING=y
915endif
916
917ifdef CONFIG_INTERWORKING
918CFLAGS += -DCONFIG_INTERWORKING
919OBJS += ../src/common/gas.o
920OBJS += ../src/ap/gas_serv.o
921endif
922
923ifdef CONFIG_PROXYARP
924CFLAGS += -DCONFIG_PROXYARP
925OBJS += ../src/ap/x_snoop.o
926OBJS += ../src/ap/dhcp_snoop.o
927ifdef CONFIG_IPV6
928OBJS += ../src/ap/ndisc_snoop.o
929endif
930endif
931
932OBJS += ../src/drivers/driver_common.o
933
934ifdef CONFIG_WPA_CLI_EDIT
935OBJS_c += ../src/utils/edit.o
936else
937OBJS_c += ../src/utils/edit_simple.o
938endif
939
940ifdef CONFIG_ACS
941CFLAGS += -DCONFIG_ACS
942OBJS += ../src/ap/acs.o
943LIBS += -lm
944endif
945
946ifdef CONFIG_NO_STDOUT_DEBUG
947CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
948endif
949
950ifdef CONFIG_DEBUG_LINUX_TRACING
951CFLAGS += -DCONFIG_DEBUG_LINUX_TRACING
952endif
953
954ifdef CONFIG_DEBUG_FILE
955CFLAGS += -DCONFIG_DEBUG_FILE
956endif
957
958ifdef CONFIG_SQLITE
959CFLAGS += -DCONFIG_SQLITE
960LIBS += -lsqlite3
961LIBS_h += -lsqlite3
962endif
963
964ifdef CONFIG_FST
965CFLAGS += -DCONFIG_FST
966OBJS += ../src/fst/fst.o
967OBJS += ../src/fst/fst_group.o
968OBJS += ../src/fst/fst_iface.o
969OBJS += ../src/fst/fst_session.o
970OBJS += ../src/fst/fst_ctrl_aux.o
971ifdef CONFIG_FST_TEST
972CFLAGS += -DCONFIG_FST_TEST
973endif
974ifndef CONFIG_NO_CTRL_IFACE
975OBJS += ../src/fst/fst_ctrl_iface.o
976endif
977endif
978
979ALL=hostapd hostapd_cli
980
981all: verify_config $(ALL)
982
983Q=@
984E=echo
985ifeq ($(V), 1)
986Q=
987E=true
988endif
989ifeq ($(QUIET), 1)
990Q=@
991E=true
992endif
993
994ifdef CONFIG_CODE_COVERAGE
995%.o: %.c
996	@$(E) "  CC " $<
997	$(Q)cd $(dir $@); $(CC) -c -o $(notdir $@) $(CFLAGS) $(notdir $<)
998else
999%.o: %.c
1000	$(Q)$(CC) -c -o $@ $(CFLAGS) $<
1001	@$(E) "  CC " $<
1002endif
1003
1004verify_config:
1005	@if [ ! -r .config ]; then \
1006		echo 'Building hostapd requires a configuration file'; \
1007		echo '(.config). See README for more instructions. You can'; \
1008		echo 'run "cp defconfig .config" to create an example'; \
1009		echo 'configuration.'; \
1010		exit 1; \
1011	fi
1012
1013$(DESTDIR)$(BINDIR)/%: %
1014	install -D $(<) $(@)
1015
1016install: $(addprefix $(DESTDIR)$(BINDIR)/,$(ALL))
1017
1018../src/drivers/build.hostapd:
1019	@if [ -f ../src/drivers/build.wpa_supplicant ]; then \
1020		$(MAKE) -C ../src/drivers clean; \
1021	fi
1022	@touch ../src/drivers/build.hostapd
1023
1024BCHECK=../src/drivers/build.hostapd
1025
1026hostapd: $(BCHECK) $(OBJS)
1027	$(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS)
1028	@$(E) "  LD " $@
1029
1030ifdef CONFIG_WPA_TRACE
1031OBJS_c += ../src/utils/trace.o
1032endif
1033hostapd_cli: $(OBJS_c)
1034	$(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
1035	@$(E) "  LD " $@
1036
1037NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
1038NOBJS += ../src/utils/common.o
1039ifdef NEED_RC4
1040ifdef CONFIG_INTERNAL_RC4
1041ifndef CONFIG_NO_RC4
1042NOBJS += ../src/crypto/rc4.o
1043endif
1044endif
1045endif
1046ifdef CONFIG_INTERNAL_MD5
1047NOBJS += ../src/crypto/md5-internal.o
1048endif
1049NOBJS += ../src/crypto/crypto_openssl.o ../src/utils/os_$(CONFIG_OS).o
1050NOBJS += ../src/utils/wpa_debug.o
1051NOBJS += ../src/utils/wpabuf.o
1052ifdef CONFIG_WPA_TRACE
1053NOBJS += ../src/utils/trace.o
1054LIBS_n += -lbfd
1055endif
1056ifdef TLS_FUNCS
1057LIBS_n += -lcrypto
1058endif
1059
1060HOBJS += 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
1061HOBJS += ../src/crypto/aes-encblock.o
1062ifdef CONFIG_INTERNAL_AES
1063HOBJS += ../src/crypto/aes-internal.o
1064HOBJS += ../src/crypto/aes-internal-enc.o
1065endif
1066
1067nt_password_hash: $(NOBJS)
1068	$(Q)$(CC) $(LDFLAGS) -o nt_password_hash $(NOBJS) $(LIBS_n)
1069	@$(E) "  LD " $@
1070
1071hlr_auc_gw: $(HOBJS)
1072	$(Q)$(CC) $(LDFLAGS) -o hlr_auc_gw $(HOBJS) $(LIBS_h)
1073	@$(E) "  LD " $@
1074
1075lcov-html:
1076	lcov -c -d .. > lcov.info
1077	genhtml lcov.info --output-directory lcov-html
1078
1079clean:
1080	$(MAKE) -C ../src clean
1081	rm -f core *~ *.o hostapd hostapd_cli nt_password_hash hlr_auc_gw
1082	rm -f *.d *.gcno *.gcda *.gcov
1083	rm -f lcov.info
1084	rm -rf lcov-html
1085
1086-include $(OBJS:%.o=%.d)
1087