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