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