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