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