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:=2018-05-21
15 PKG_SOURCE_VERSION:=62566bc23d041e88f8e35933d5fd8c2fd0f7cf2a
16 PKG_MIRROR_HASH:=f234b24f9471ae9cb34460feec6d6614641691544101535673595272c91448eb
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_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK \
26 CONFIG_PACKAGE_kmod-ath9k \
27 CONFIG_PACKAGE_kmod-cfg80211 \
28 CONFIG_PACKAGE_hostapd \
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 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
71 include $(INCLUDE_DIR)/package.mk
73 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
76 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
80 ifneq ($(CONFIG_DRIVER_11AC_SUPPORT),)
81 HOSTAPD_IEEE80211AC:=y
85 CONFIG_ACS=$(CONFIG_PACKAGE_kmod-cfg80211) \
86 CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
87 CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \
88 CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
89 CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
94 ifeq ($(LOCAL_VARIANT),full)
95 DRIVER_MAKEOPTS += CONFIG_IEEE80211W=$(CONFIG_DRIVER_11W_SUPPORT)
98 ifeq ($(LOCAL_VARIANT),full)
99 ifeq ($(SSL_VARIANT),openssl)
100 DRIVER_MAKEOPTS += CONFIG_TLS=openssl
101 TARGET_LDFLAGS += -lcrypto -lssl
103 ifeq ($(SSL_VARIANT),wolfssl)
104 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1
105 TARGET_LDFLAGS += -lwolfssl
109 ifneq ($(LOCAL_TYPE),hostapd)
110 ifeq ($(LOCAL_VARIANT),mesh)
111 ifeq ($(SSL_VARIANT),openssl)
112 DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
113 TARGET_LDFLAGS += -lcrypto -lssl
115 ifeq ($(SSL_VARIANT),wolfssl)
116 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
117 TARGET_LDFLAGS += -lwolfssl
121 ifdef CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
122 TARGET_CFLAGS += -DNO_TIMESTAMP_CHECK
124 ifdef CONFIG_WPA_RFKILL_SUPPORT
125 DRIVER_MAKEOPTS += NEED_RFKILL=y
128 CONFIG_DRIVER_ROBOSWITCH=$(CONFIG_PACKAGE_kmod-switch)
131 ifdef CONFIG_USE_GLIBC
132 TARGET_LDFLAGS += -lrt
133 TARGET_LDFLAGS_C += -lrt
136 DRV_DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny
139 define Package/hostapd/Default
142 TITLE:=IEEE 802.1x Authenticator
143 URL:=http://hostap.epitest.fi/
144 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
146 CONFLICTS:=$(HOSTAPD_PROVIDERS)
147 HOSTAPD_PROVIDERS+=$(1)
150 define Package/hostapd
151 $(call Package/hostapd/Default,$(1))
153 VARIANT:=full-internal
156 define Package/hostapd/description
157 This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS
161 define Package/hostapd-openssl
162 $(call Package/hostapd/Default,$(1))
164 VARIANT:=full-openssl
168 Package/hostapd-openssl/description = $(Package/hostapd/description)
170 define Package/hostapd-wolfssl
171 $(call Package/hostapd/Default,$(1))
173 VARIANT:=full-wolfssl
177 Package/hostapd-wolfssl/description = $(Package/hostapd/description)
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-mini
232 $(call Package/wpad/Default,$(1))
233 TITLE+= (WPA-PSK only)
237 define Package/wpad-mini/description
238 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (WPA-PSK only).
241 define Package/wpad-mesh
242 $(call Package/wpad/Default,$(1))
243 TITLE+= (with 802.11s mesh and SAE support)
244 DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
245 PROVIDES+=wpa-supplicant-mesh wpad-mesh
248 define Package/wpad-mesh/description
249 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (with 802.11s mesh and SAE support).
252 define Package/wpad-mesh-openssl
253 $(call Package/wpad-mesh,$(1))
255 VARIANT:=wpad-mesh-openssl
258 Package/wpad-mesh-openssl/description = $(Package/wpad-mesh/description)
260 define Package/wpad-mesh-wolfssl
261 $(call Package/wpad-mesh,$(1))
263 VARIANT:=wpad-mesh-wolfssl
266 Package/wpad-mesh-wolfssl/description = $(Package/wpad-mesh/description)
269 define Package/wpa-supplicant/Default
272 TITLE:=WPA Supplicant
273 URL:=http://hostap.epitest.fi/wpa_supplicant/
274 DEPENDS:=$(DRV_DEPENDS)
275 PROVIDES:=wpa-supplicant
276 CONFLICTS:=$(SUPPLICANT_PROVIDERS)
277 SUPPLICANT_PROVIDERS+=$(1)
280 define Package/wpa-supplicant
281 $(call Package/wpa-supplicant/Default,$(1))
282 VARIANT:=supplicant-full-internal
285 define Package/wpa-supplicant-openssl
286 $(call Package/wpa-supplicant/Default,$(1))
287 VARIANT:=supplicant-full-openssl
291 define Package/wpa-supplicant-wolfssl
292 $(call Package/wpa-supplicant/Default,$(1))
293 VARIANT:=supplicant-full-wolfssl
297 define Package/wpa-supplicant/config
298 source "$(SOURCE)/Config.in"
301 define Package/wpa-supplicant-p2p
302 $(call Package/wpa-supplicant/Default,$(1))
303 TITLE+= (with Wi-Fi P2P support)
304 DEPENDS+=@PACKAGE_kmod-cfg80211
307 define Package/wpa-supplicant-mesh/Default
308 $(call Package/wpa-supplicant/Default,$(1))
309 TITLE+= (with 802.11s and SAE)
310 DEPENDS+=@PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
311 PROVIDES+=wpa-supplicant-mesh
314 define Package/wpa-supplicant-mesh-openssl
315 $(call Package/wpa-supplicant-mesh/Default,$(1))
316 VARIANT:=supplicant-mesh-openssl
320 define Package/wpa-supplicant-mesh-wolfssl
321 $(call Package/wpa-supplicant-mesh/Default,$(1))
322 VARIANT:=supplicant-mesh-wolfssl
326 define Package/wpa-supplicant-mini
327 $(call Package/wpa-supplicant/Default,$(1))
328 TITLE+= (minimal version)
329 VARIANT:=supplicant-mini
333 define Package/hostapd-common
334 TITLE:=hostapd/wpa_supplicant common support files
339 define Package/hostapd-utils
342 TITLE:=IEEE 802.1x Authenticator (utils)
343 URL:=http://hostap.epitest.fi/
344 DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(HOSTAPD_PROVIDERS),PACKAGE_$(pkg)))
347 define Package/hostapd-utils/description
348 This package contains a command line utility to control the
349 IEEE 802.1x/WPA/EAP/RADIUS Authenticator.
352 define Package/wpa-cli
355 DEPENDS:=@$(subst $(space),||,$(foreach pkg,$(SUPPLICANT_PROVIDERS),PACKAGE_$(pkg)))
356 TITLE:=WPA Supplicant command line control utility
359 define Package/eapol-test
360 TITLE:=802.1x authentication test utility
363 VARIANT:=supplicant-full-internal
364 DEPENDS:=$(DRV_DEPENDS)
367 define Package/eapol-test-openssl
368 TITLE:=802.1x authentication test utility
371 VARIANT:=supplicant-full-openssl
372 CONFLICTS:=$(filter-out eapol-test-openssl ,$(EAPOL_TEST_PROVIDERS))
373 DEPENDS:=$(DRV_DEPENDS) +libopenssl
377 define Package/eapol-test-wolfssl
378 TITLE:=802.1x authentication test utility
381 VARIANT:=supplicant-full-wolfssl
382 CONFLICTS:=$(filter-out eapol-test-openssl ,$(filter-out eapol-test-wolfssl ,$(EAPOL_TEST_PROVIDERS)))
383 DEPENDS:=$(DRV_DEPENDS) +libwolfssl
388 ifneq ($(wildcard $(PKG_BUILD_DIR)/.config_*),$(subst .configured_,.config_,$(STAMP_CONFIGURED)))
389 define Build/Configure/rebuild
390 $(FIND) $(PKG_BUILD_DIR) -name \*.o -or -name \*.a | $(XARGS) rm -f
391 rm -f $(PKG_BUILD_DIR)/hostapd/hostapd
392 rm -f $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant
393 rm -f $(PKG_BUILD_DIR)/.config_*
394 touch $(subst .configured_,.config_,$(STAMP_CONFIGURED))
398 define Build/Configure
399 $(Build/Configure/rebuild)
400 $(if $(wildcard ./files/hostapd-$(CONFIG_VARIANT).config), \
401 $(CP) ./files/hostapd-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/hostapd/.config \
403 $(CP) ./files/wpa_supplicant-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/wpa_supplicant/.config
407 -I$(STAGING_DIR)/usr/include/libnl-tiny \
408 -I$(PKG_BUILD_DIR)/src/crypto \
412 $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
414 TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto
415 TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver -fuse-linker-plugin
416 ifeq ($(findstring supplicant,$(BUILD_VARIANT)),)
417 TARGET_LDFLAGS += -lubox -lubus
420 ifdef CONFIG_PACKAGE_kmod-cfg80211
421 TARGET_LDFLAGS += -lm -lnl-tiny
425 CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
426 $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(1) \
427 $(TARGET_CONFIGURE_OPTS) \
429 LIBS="$(TARGET_LDFLAGS)" \
430 LIBS_c="$(TARGET_LDFLAGS_C)" \
431 AR="$(TARGET_CROSS)gcc-ar" \
436 define Build/Compile/wpad
438 $(call Build/RunMake,hostapd,-s MULTICALL=1 dump_cflags); \
439 $(call Build/RunMake,wpa_supplicant,-s MULTICALL=1 dump_cflags) | \
440 sed -e 's,-n ,,g' -e 's^$(TARGET_CFLAGS)^^' \
441 ` > $(PKG_BUILD_DIR)/.cflags
442 sed -i 's/"/\\"/g' $(PKG_BUILD_DIR)/.cflags
443 +$(call Build/RunMake,hostapd, \
444 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
446 hostapd_cli hostapd_multi.a \
448 +$(call Build/RunMake,wpa_supplicant, \
449 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
451 wpa_cli wpa_supplicant_multi.a \
453 +export MAKEFLAGS="$(MAKE_JOBSERVER)"; $(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \
455 ./files/multicall.c \
456 $(PKG_BUILD_DIR)/hostapd/hostapd_multi.a \
457 $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant_multi.a \
461 define Build/Compile/hostapd
462 +$(call Build/RunMake,hostapd, \
463 hostapd hostapd_cli \
467 define Build/Compile/supplicant
468 +$(call Build/RunMake,wpa_supplicant, \
469 wpa_cli wpa_supplicant \
473 define Build/Compile/supplicant-full-internal
474 +$(call Build/RunMake,wpa_supplicant, \
479 define Build/Compile/supplicant-full-openssl
480 +$(call Build/RunMake,wpa_supplicant, \
485 define Build/Compile/supplicant-full-wolfssl
486 +$(call Build/RunMake,wpa_supplicant, \
492 $(Build/Compile/$(LOCAL_TYPE))
493 $(Build/Compile/$(BUILD_VARIANT))
496 define Install/hostapd
497 $(INSTALL_DIR) $(1)/usr/sbin
500 define Install/supplicant
501 $(INSTALL_DIR) $(1)/usr/sbin
504 define Package/hostapd-common/install
505 $(INSTALL_DIR) $(1)/lib/netifd
506 $(INSTALL_DATA) ./files/hostapd.sh $(1)/lib/netifd/hostapd.sh
509 define Package/hostapd/install
510 $(call Install/hostapd,$(1))
511 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/
513 Package/hostapd-mini/install = $(Package/hostapd/install)
514 Package/hostapd-openssl/install = $(Package/hostapd/install)
515 Package/hostapd-wolfssl/install = $(Package/hostapd/install)
517 ifneq ($(LOCAL_TYPE),supplicant)
518 define Package/hostapd-utils/install
519 $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/rc.button
520 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_cli $(1)/usr/sbin/
521 $(INSTALL_BIN) ./files/wps-hotplug.sh $(1)/etc/rc.button/wps
525 define Package/wpad/install
526 $(call Install/hostapd,$(1))
527 $(call Install/supplicant,$(1))
528 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpad $(1)/usr/sbin/
529 $(LN) wpad $(1)/usr/sbin/hostapd
530 $(LN) wpad $(1)/usr/sbin/wpa_supplicant
532 Package/wpad-mini/install = $(Package/wpad/install)
533 Package/wpad-openssl/install = $(Package/wpad/install)
534 Package/wpad-wolfssl/install = $(Package/wpad/install)
535 Package/wpad-mesh-openssl/install = $(Package/wpad/install)
536 Package/wpad-mesh-wolfssl/install = $(Package/wpad/install)
538 define Package/wpa-supplicant/install
539 $(call Install/supplicant,$(1))
540 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant $(1)/usr/sbin/
542 Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install)
543 Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
544 Package/wpa-supplicant-openssl/install = $(Package/wpa-supplicant/install)
545 Package/wpa-supplicant-wolfssl/install = $(Package/wpa-supplicant/install)
546 Package/wpa-supplicant-mesh-openssl/install = $(Package/wpa-supplicant/install)
547 Package/wpa-supplicant-mesh-wolfssl/install = $(Package/wpa-supplicant/install)
549 ifneq ($(LOCAL_TYPE),hostapd)
550 define Package/wpa-cli/install
551 $(INSTALL_DIR) $(1)/usr/sbin
552 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli $(1)/usr/sbin/
556 ifeq ($(BUILD_VARIANT),supplicant-full-internal)
557 define Package/eapol-test/install
558 $(INSTALL_DIR) $(1)/usr/sbin
559 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
563 ifeq ($(BUILD_VARIANT),supplicant-full-openssl)
564 define Package/eapol-test-openssl/install
565 $(INSTALL_DIR) $(1)/usr/sbin
566 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
570 ifeq ($(BUILD_VARIANT),supplicant-full-wolfssl)
571 define Package/eapol-test-wolfssl/install
572 $(INSTALL_DIR) $(1)/usr/sbin
573 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
577 $(eval $(call BuildPackage,hostapd))
578 $(eval $(call BuildPackage,hostapd-mini))
579 $(eval $(call BuildPackage,hostapd-openssl))
580 $(eval $(call BuildPackage,hostapd-wolfssl))
581 $(eval $(call BuildPackage,wpad))
582 $(eval $(call BuildPackage,wpad-mesh-openssl))
583 $(eval $(call BuildPackage,wpad-mesh-wolfssl))
584 $(eval $(call BuildPackage,wpad-mini))
585 $(eval $(call BuildPackage,wpad-openssl))
586 $(eval $(call BuildPackage,wpad-wolfssl))
587 $(eval $(call BuildPackage,wpa-supplicant))
588 $(eval $(call BuildPackage,wpa-supplicant-mesh-openssl))
589 $(eval $(call BuildPackage,wpa-supplicant-mesh-wolfssl))
590 $(eval $(call BuildPackage,wpa-supplicant-mini))
591 $(eval $(call BuildPackage,wpa-supplicant-p2p))
592 $(eval $(call BuildPackage,wpa-supplicant-openssl))
593 $(eval $(call BuildPackage,wpa-supplicant-wolfssl))
594 $(eval $(call BuildPackage,wpa-cli))
595 $(eval $(call BuildPackage,hostapd-utils))
596 $(eval $(call BuildPackage,hostapd-common))
597 $(eval $(call BuildPackage,eapol-test))
598 $(eval $(call BuildPackage,eapol-test-openssl))
599 $(eval $(call BuildPackage,eapol-test-wolfssl))