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