Makefile 21 KB

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