1 # Copyright (C) 2006-2014 OpenWrt.org
3 # This is free software, licensed under the GNU General Public License v2.
4 # See /LICENSE for more information.
7 include $(TOPDIR)/rules.mk
12 PKG_SOURCE_URL:=http://w1.fi/hostap.git
14 PKG_SOURCE_DATE:=2019-08-08
15 PKG_SOURCE_VERSION:=ca8c2bd28ad53f431d6ee60ef754e98cfdb4c17b
16 PKG_MIRROR_HASH:=9d9f1c60afa5324ee17219bd3ec61c1a6fa4043b4187da9bb44e59025d3ed31d
18 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
19 PKG_LICENSE:=BSD-3-Clause
20 PKG_CPE_ID:=cpe:/a:w1.fi:hostapd
24 PKG_CONFIG_DEPENDS:= \
25 CONFIG_PACKAGE_kmod-ath9k \
26 CONFIG_PACKAGE_kmod-cfg80211 \
27 CONFIG_PACKAGE_hostapd \
28 CONFIG_PACKAGE_hostapd-basic \
29 CONFIG_PACKAGE_hostapd-mini \
30 CONFIG_WPA_RFKILL_SUPPORT \
31 CONFIG_DRIVER_WEXT_SUPPORT \
32 CONFIG_DRIVER_11N_SUPPORT \
33 CONFIG_DRIVER_11AC_SUPPORT \
35 EAPOL_TEST_PROVIDERS:=eapol-test eapol-test-openssl eapol-test-wolfssl
37 SUPPLICANT_PROVIDERS:=
41 $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
42 $(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \
46 LOCAL_AND_LIB_VARIANT=$(patsubst hostapd-%,%,\
48 $(patsubst supplicant-%,%,\
52 LOCAL_VARIANT=$(patsubst %-internal,%,\
53 $(patsubst %-openssl,%,\
54 $(patsubst %-wolfssl,%,\
55 $(LOCAL_AND_LIB_VARIANT)\
59 $(if $(findstring openssl,$(LOCAL_AND_LIB_VARIANT)),openssl,\
60 $(if $(findstring wolfssl,$(LOCAL_AND_LIB_VARIANT)),wolfssl,\
64 CONFIG_VARIANT:=$(LOCAL_VARIANT)
65 ifeq ($(LOCAL_VARIANT),mesh)
69 include $(INCLUDE_DIR)/package.mk
71 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
74 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
78 ifneq ($(CONFIG_DRIVER_11AC_SUPPORT),)
79 HOSTAPD_IEEE80211AC:=y
83 CONFIG_ACS=$(CONFIG_PACKAGE_kmod-cfg80211) \
84 CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
85 CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \
86 CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
87 CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
89 ifneq ($(LOCAL_VARIANT),mini)
90 DRIVER_MAKEOPTS += CONFIG_IEEE80211W=$(CONFIG_DRIVER_11W_SUPPORT)
93 ifeq ($(LOCAL_VARIANT),full)
94 ifeq ($(SSL_VARIANT),openssl)
95 DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_SAE=y CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y
96 TARGET_LDFLAGS += -lcrypto -lssl
98 ifeq ($(SSL_VARIANT),wolfssl)
99 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_SAE=y CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y
100 TARGET_LDFLAGS += -lwolfssl
104 ifneq ($(LOCAL_TYPE),hostapd)
105 ifeq ($(LOCAL_VARIANT),mesh)
106 ifeq ($(SSL_VARIANT),openssl)
107 DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
108 TARGET_LDFLAGS += -lcrypto -lssl
110 ifeq ($(SSL_VARIANT),wolfssl)
111 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
112 TARGET_LDFLAGS += -lwolfssl
116 ifdef CONFIG_WPA_RFKILL_SUPPORT
117 DRIVER_MAKEOPTS += NEED_RFKILL=y
121 ifdef CONFIG_USE_GLIBC
122 TARGET_LDFLAGS += -lrt
123 TARGET_LDFLAGS_C += -lrt
126 DRV_DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny
129 define Package/hostapd/Default
132 TITLE:=IEEE 802.1x Authenticator
133 URL:=http://hostap.epitest.fi/
134 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
136 CONFLICTS:=$(HOSTAPD_PROVIDERS)
137 HOSTAPD_PROVIDERS+=$(1)
140 define Package/hostapd
141 $(call Package/hostapd/Default,$(1))
143 VARIANT:=full-internal
146 define Package/hostapd/description
147 This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS
151 define Package/hostapd-openssl
152 $(call Package/hostapd/Default,$(1))
154 VARIANT:=full-openssl
158 Package/hostapd-openssl/description = $(Package/hostapd/description)
160 define Package/hostapd-wolfssl
161 $(call Package/hostapd/Default,$(1))
163 VARIANT:=full-wolfssl
167 Package/hostapd-wolfssl/description = $(Package/hostapd/description)
169 define Package/hostapd-basic
170 $(call Package/hostapd/Default,$(1))
171 TITLE+= (WPA-PSK, 11r and 11w)
175 define Package/hostapd-basic/description
176 This package contains a basic IEEE 802.1x/WPA Authenticator with WPA-PSK, 802.11r and 802.11w support.
179 define Package/hostapd-mini
180 $(call Package/hostapd/Default,$(1))
181 TITLE+= (WPA-PSK only)
185 define Package/hostapd-mini/description
186 This package contains a minimal IEEE 802.1x/WPA Authenticator (WPA-PSK only).
190 define Package/wpad/Default
193 TITLE:=IEEE 802.1x Authenticator/Supplicant
194 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
195 URL:=http://hostap.epitest.fi/
196 PROVIDES:=hostapd wpa-supplicant
197 CONFLICTS:=$(HOSTAPD_PROVIDERS) $(SUPPLICANT_PROVIDERS)
198 HOSTAPD_PROVIDERS+=$(1)
199 SUPPLICANT_PROVIDERS+=$(1)
203 $(call Package/wpad/Default,$(1))
205 VARIANT:=wpad-full-internal
208 define Package/wpad/description
209 This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS
210 Authenticator and Supplicant
213 define Package/wpad-openssl
214 $(call Package/wpad/Default,$(1))
216 VARIANT:=wpad-full-openssl
220 Package/wpad-openssl/description = $(Package/wpad/description)
222 define Package/wpad-wolfssl
223 $(call Package/wpad/Default,$(1))
225 VARIANT:=wpad-full-wolfssl
229 Package/wpad-wolfssl/description = $(Package/wpad/description)
231 define Package/wpad-basic
232 $(call Package/wpad/Default,$(1))
233 TITLE+= (WPA-PSK, 11r and 11w)
237 define Package/wpad-basic/description
238 This package contains a basic IEEE 802.1x/WPA Authenticator and Supplicant with WPA-PSK, 802.11r and 802.11w support.
241 define Package/wpad-mini
242 $(call Package/wpad/Default,$(1))
243 TITLE+= (WPA-PSK only)
247 define Package/wpad-mini/description
248 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (WPA-PSK only).
251 define Package/wpad-mesh
252 $(call Package/wpad/Default,$(1))
253 TITLE+= (with 802.11s mesh and SAE support)
254 DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
255 PROVIDES+=wpa-supplicant-mesh wpad-mesh
258 define Package/wpad-mesh/description
259 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (with 802.11s mesh and SAE support).
262 define Package/wpad-mesh-openssl
263 $(call Package/wpad-mesh,$(1))
265 VARIANT:=wpad-mesh-openssl
268 Package/wpad-mesh-openssl/description = $(Package/wpad-mesh/description)
270 define Package/wpad-mesh-wolfssl
271 $(call Package/wpad-mesh,$(1))
273 VARIANT:=wpad-mesh-wolfssl
276 Package/wpad-mesh-wolfssl/description = $(Package/wpad-mesh/description)
279 define Package/wpa-supplicant/Default
282 TITLE:=WPA Supplicant
283 URL:=http://hostap.epitest.fi/wpa_supplicant/
284 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
285 PROVIDES:=wpa-supplicant
286 CONFLICTS:=$(SUPPLICANT_PROVIDERS)
287 SUPPLICANT_PROVIDERS+=$(1)
290 define Package/wpa-supplicant
291 $(call Package/wpa-supplicant/Default,$(1))
292 VARIANT:=supplicant-full-internal
295 define Package/wpa-supplicant-openssl
296 $(call Package/wpa-supplicant/Default,$(1))
297 VARIANT:=supplicant-full-openssl
301 define Package/wpa-supplicant-wolfssl
302 $(call Package/wpa-supplicant/Default,$(1))
303 VARIANT:=supplicant-full-wolfssl
307 define Package/wpa-supplicant/config
308 source "$(SOURCE)/Config.in"
311 define Package/wpa-supplicant-p2p
312 $(call Package/wpa-supplicant/Default,$(1))
313 TITLE+= (with Wi-Fi P2P support)
314 DEPENDS+=@PACKAGE_kmod-cfg80211
315 VARIANT:=supplicant-p2p-internal
318 define Package/wpa-supplicant-mesh/Default
319 $(call Package/wpa-supplicant/Default,$(1))
320 TITLE+= (with 802.11s and SAE)
321 DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
322 PROVIDES+=wpa-supplicant-mesh
325 define Package/wpa-supplicant-mesh-openssl
326 $(call Package/wpa-supplicant-mesh/Default,$(1))
327 VARIANT:=supplicant-mesh-openssl
331 define Package/wpa-supplicant-mesh-wolfssl
332 $(call Package/wpa-supplicant-mesh/Default,$(1))
333 VARIANT:=supplicant-mesh-wolfssl
337 define Package/wpa-supplicant-basic
338 $(call Package/wpa-supplicant/Default,$(1))
339 TITLE+= (with 11r and 11w)
340 VARIANT:=supplicant-basic
343 define Package/wpa-supplicant-mini
344 $(call Package/wpa-supplicant/Default,$(1))
345 TITLE+= (minimal version)
346 VARIANT:=supplicant-mini
350 define Package/hostapd-common
351 TITLE:=hostapd/wpa_supplicant common support files
356 define Package/hostapd-utils
359 TITLE:=IEEE 802.1x Authenticator (utils)
360 URL:=http://hostap.epitest.fi/
361 DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(HOSTAPD_PROVIDERS),PACKAGE_$(pkg)))
364 define Package/hostapd-utils/description
365 This package contains a command line utility to control the
366 IEEE 802.1x/WPA/EAP/RADIUS Authenticator.
369 define Package/wpa-cli
372 DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(SUPPLICANT_PROVIDERS),PACKAGE_$(pkg)))
373 TITLE:=WPA Supplicant command line control utility
376 define Package/eapol-test
377 TITLE:=802.1x authentication test utility
380 VARIANT:=supplicant-full-internal
381 DEPENDS:=$(DRV_DEPENDS) +libubus
384 define Package/eapol-test-openssl
385 TITLE:=802.1x authentication test utility
388 VARIANT:=supplicant-full-openssl
389 CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
390 DEPENDS:=$(DRV_DEPENDS) +libubus +libopenssl
394 define Package/eapol-test-wolfssl
395 TITLE:=802.1x authentication test utility
398 VARIANT:=supplicant-full-wolfssl
399 CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
400 DEPENDS:=$(DRV_DEPENDS) +libubus +libwolfssl
405 ifneq ($(wildcard $(PKG_BUILD_DIR)/.config_*),$(subst .configured_,.config_,$(STAMP_CONFIGURED)))
406 define Build/Configure/rebuild
407 $(FIND) $(PKG_BUILD_DIR) -name \*.o -or -name \*.a | $(XARGS) rm -f
408 rm -f $(PKG_BUILD_DIR)/hostapd/hostapd
409 rm -f $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant
410 rm -f $(PKG_BUILD_DIR)/.config_*
411 touch $(subst .configured_,.config_,$(STAMP_CONFIGURED))
415 define Build/Configure
416 $(Build/Configure/rebuild)
417 $(if $(wildcard ./files/hostapd-$(CONFIG_VARIANT).config), \
418 $(CP) ./files/hostapd-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/hostapd/.config \
420 $(CP) ./files/wpa_supplicant-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/wpa_supplicant/.config
424 -I$(STAGING_DIR)/usr/include/libnl-tiny \
425 -I$(PKG_BUILD_DIR)/src/crypto \
429 $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
431 TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto
432 TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver -fuse-linker-plugin -lubox -lubus
434 ifdef CONFIG_PACKAGE_kmod-cfg80211
435 TARGET_LDFLAGS += -lm -lnl-tiny
439 CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
440 $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(1) \
441 $(TARGET_CONFIGURE_OPTS) \
443 LIBS="$(TARGET_LDFLAGS)" \
444 LIBS_c="$(TARGET_LDFLAGS_C)" \
445 AR="$(TARGET_CROSS)gcc-ar" \
450 define Build/Compile/wpad
452 $(call Build/RunMake,hostapd,-s MULTICALL=1 dump_cflags); \
453 $(call Build/RunMake,wpa_supplicant,-s MULTICALL=1 dump_cflags) | \
454 sed -e 's,-n ,,g' -e 's^$(TARGET_CFLAGS)^^' \
455 ` > $(PKG_BUILD_DIR)/.cflags
456 sed -i 's/"/\\"/g' $(PKG_BUILD_DIR)/.cflags
457 +$(call Build/RunMake,hostapd, \
458 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
460 hostapd_cli hostapd_multi.a \
462 +$(call Build/RunMake,wpa_supplicant, \
463 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
465 wpa_cli wpa_supplicant_multi.a \
467 +export MAKEFLAGS="$(MAKE_JOBSERVER)"; $(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \
469 ./files/multicall.c \
470 $(PKG_BUILD_DIR)/hostapd/hostapd_multi.a \
471 $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant_multi.a \
475 define Build/Compile/hostapd
476 +$(call Build/RunMake,hostapd, \
477 hostapd hostapd_cli \
481 define Build/Compile/supplicant
482 +$(call Build/RunMake,wpa_supplicant, \
483 wpa_cli wpa_supplicant \
487 define Build/Compile/supplicant-full-internal
488 +$(call Build/RunMake,wpa_supplicant, \
493 define Build/Compile/supplicant-full-openssl
494 +$(call Build/RunMake,wpa_supplicant, \
499 define Build/Compile/supplicant-full-wolfssl
500 +$(call Build/RunMake,wpa_supplicant, \
506 $(Build/Compile/$(LOCAL_TYPE))
507 $(Build/Compile/$(BUILD_VARIANT))
510 define Install/hostapd
511 $(INSTALL_DIR) $(1)/usr/sbin
514 define Install/supplicant
515 $(INSTALL_DIR) $(1)/usr/sbin
518 define Package/hostapd-common/install
519 $(INSTALL_DIR) $(1)/lib/netifd $(1)/etc/rc.button
520 $(INSTALL_DATA) ./files/hostapd.sh $(1)/lib/netifd/hostapd.sh
521 $(INSTALL_BIN) ./files/wps-hotplug.sh $(1)/etc/rc.button/wps
524 define Package/hostapd/install
525 $(call Install/hostapd,$(1))
526 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/
528 Package/hostapd-basic/install = $(Package/hostapd/install)
529 Package/hostapd-mini/install = $(Package/hostapd/install)
530 Package/hostapd-openssl/install = $(Package/hostapd/install)
531 Package/hostapd-wolfssl/install = $(Package/hostapd/install)
533 ifneq ($(LOCAL_TYPE),supplicant)
534 define Package/hostapd-utils/install
535 $(INSTALL_DIR) $(1)/usr/sbin
536 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_cli $(1)/usr/sbin/
540 define Package/wpad/install
541 $(call Install/hostapd,$(1))
542 $(call Install/supplicant,$(1))
543 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpad $(1)/usr/sbin/
544 $(LN) wpad $(1)/usr/sbin/hostapd
545 $(LN) wpad $(1)/usr/sbin/wpa_supplicant
547 Package/wpad-basic/install = $(Package/wpad/install)
548 Package/wpad-mini/install = $(Package/wpad/install)
549 Package/wpad-openssl/install = $(Package/wpad/install)
550 Package/wpad-wolfssl/install = $(Package/wpad/install)
551 Package/wpad-mesh-openssl/install = $(Package/wpad/install)
552 Package/wpad-mesh-wolfssl/install = $(Package/wpad/install)
554 define Package/wpa-supplicant/install
555 $(call Install/supplicant,$(1))
556 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant $(1)/usr/sbin/
558 Package/wpa-supplicant-basic/install = $(Package/wpa-supplicant/install)
559 Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install)
560 Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
561 Package/wpa-supplicant-openssl/install = $(Package/wpa-supplicant/install)
562 Package/wpa-supplicant-wolfssl/install = $(Package/wpa-supplicant/install)
563 Package/wpa-supplicant-mesh-openssl/install = $(Package/wpa-supplicant/install)
564 Package/wpa-supplicant-mesh-wolfssl/install = $(Package/wpa-supplicant/install)
566 ifneq ($(LOCAL_TYPE),hostapd)
567 define Package/wpa-cli/install
568 $(INSTALL_DIR) $(1)/usr/sbin
569 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli $(1)/usr/sbin/
573 ifeq ($(BUILD_VARIANT),supplicant-full-internal)
574 define Package/eapol-test/install
575 $(INSTALL_DIR) $(1)/usr/sbin
576 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
580 ifeq ($(BUILD_VARIANT),supplicant-full-openssl)
581 define Package/eapol-test-openssl/install
582 $(INSTALL_DIR) $(1)/usr/sbin
583 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
587 ifeq ($(BUILD_VARIANT),supplicant-full-wolfssl)
588 define Package/eapol-test-wolfssl/install
589 $(INSTALL_DIR) $(1)/usr/sbin
590 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
594 $(eval $(call BuildPackage,hostapd))
595 $(eval $(call BuildPackage,hostapd-basic))
596 $(eval $(call BuildPackage,hostapd-mini))
597 $(eval $(call BuildPackage,hostapd-openssl))
598 $(eval $(call BuildPackage,hostapd-wolfssl))
599 $(eval $(call BuildPackage,wpad))
600 $(eval $(call BuildPackage,wpad-mesh-openssl))
601 $(eval $(call BuildPackage,wpad-mesh-wolfssl))
602 $(eval $(call BuildPackage,wpad-basic))
603 $(eval $(call BuildPackage,wpad-mini))
604 $(eval $(call BuildPackage,wpad-openssl))
605 $(eval $(call BuildPackage,wpad-wolfssl))
606 $(eval $(call BuildPackage,wpa-supplicant))
607 $(eval $(call BuildPackage,wpa-supplicant-mesh-openssl))
608 $(eval $(call BuildPackage,wpa-supplicant-mesh-wolfssl))
609 $(eval $(call BuildPackage,wpa-supplicant-basic))
610 $(eval $(call BuildPackage,wpa-supplicant-mini))
611 $(eval $(call BuildPackage,wpa-supplicant-p2p))
612 $(eval $(call BuildPackage,wpa-supplicant-openssl))
613 $(eval $(call BuildPackage,wpa-supplicant-wolfssl))
614 $(eval $(call BuildPackage,wpa-cli))
615 $(eval $(call BuildPackage,hostapd-utils))
616 $(eval $(call BuildPackage,hostapd-common))
617 $(eval $(call BuildPackage,eapol-test))
618 $(eval $(call BuildPackage,eapol-test-openssl))
619 $(eval $(call BuildPackage,eapol-test-wolfssl))