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