933ad9a23196eae3138f054c57bfa6415635412a
[openwrt/staging/wigyori.git] / package / network / services / hostapd / Makefile
1 # Copyright (C) 2006-2014 OpenWrt.org
2 #
3 # This is free software, licensed under the GNU General Public License v2.
4 # See /LICENSE for more information.
5 #
6
7 include $(TOPDIR)/rules.mk
8
9 PKG_NAME:=hostapd
10 PKG_RELEASE:=1
11
12 PKG_SOURCE_URL:=http://w1.fi/hostap.git
13 PKG_SOURCE_PROTO:=git
14 PKG_SOURCE_DATE:=2018-05-21
15 PKG_SOURCE_VERSION:=62566bc23d041e88f8e35933d5fd8c2fd0f7cf2a
16 PKG_MIRROR_HASH:=f234b24f9471ae9cb34460feec6d6614641691544101535673595272c91448eb
17
18 PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
19 PKG_LICENSE:=BSD-3-Clause
20 PKG_CPE_ID:=cpe:/a:w1.fi:hostapd
21
22 PKG_BUILD_PARALLEL:=1
23
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
34
35 LOCAL_TYPE=$(strip \
36 $(if $(findstring wpad,$(BUILD_VARIANT)),wpad, \
37 $(if $(findstring supplicant,$(BUILD_VARIANT)),supplicant, \
38 hostapd \
39 )))
40 LOCAL_VARIANT=$(patsubst wpad-%,%,$(patsubst supplicant-%,%,$(BUILD_VARIANT)))
41 CONFIG_VARIANT:=$(LOCAL_VARIANT)
42 ifeq ($(LOCAL_VARIANT),mesh)
43 CONFIG_VARIANT:=full
44 endif
45
46 ifneq ($(LOCAL_TYPE),hostapd)
47 ifeq ($(LOCAL_VARIANT),full)
48 PKG_CONFIG_DEPENDS += \
49 CONFIG_WPA_SUPPLICANT_INTERNAL \
50 CONFIG_WPA_SUPPLICANT_OPENSSL \
51 CONFIG_WPA_SUPPLICANT_WOLFSSL
52 endif
53 ifeq ($(LOCAL_VARIANT),mesh)
54 PKG_CONFIG_DEPENDS += \
55 CONFIG_WPA_SUPPLICANT_OPENSSL \
56 CONFIG_WPA_SUPPLICANT_WOLFSSL
57 endif
58 endif
59
60 PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
61
62 include $(INCLUDE_DIR)/package.mk
63
64 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(CONFIG_WPA_MSG_MIN_PRIORITY)
65
66 ifneq ($(CONFIG_DRIVER_11N_SUPPORT),)
67 HOSTAPD_IEEE80211N:=y
68 endif
69
70 ifneq ($(CONFIG_DRIVER_11AC_SUPPORT),)
71 HOSTAPD_IEEE80211AC:=y
72 endif
73
74 DRIVER_MAKEOPTS= \
75 CONFIG_ACS=$(CONFIG_PACKAGE_kmod-cfg80211) \
76 CONFIG_DRIVER_NL80211=$(CONFIG_PACKAGE_kmod-cfg80211) \
77 CONFIG_IEEE80211N=$(HOSTAPD_IEEE80211N) \
78 CONFIG_IEEE80211AC=$(HOSTAPD_IEEE80211AC) \
79 CONFIG_DRIVER_WEXT=$(CONFIG_DRIVER_WEXT_SUPPORT) \
80
81 ifeq ($(LOCAL_VARIANT),full)
82 DRIVER_MAKEOPTS += CONFIG_IEEE80211W=$(CONFIG_DRIVER_11W_SUPPORT)
83 endif
84
85 ifneq ($(LOCAL_TYPE),hostapd)
86 ifdef CONFIG_WPA_SUPPLICANT_OPENSSL
87 ifeq ($(LOCAL_VARIANT),full)
88 DRIVER_MAKEOPTS += CONFIG_TLS=openssl
89 TARGET_LDFLAGS += -lcrypto -lssl
90 endif
91 endif
92 ifdef CONFIG_WPA_SUPPLICANT_WOLFSSL
93 ifeq ($(LOCAL_VARIANT),full)
94 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1
95 TARGET_LDFLAGS += -lwolfssl
96 endif
97 endif
98
99 ifeq ($(LOCAL_VARIANT),mesh)
100 ifndef CONFIG_WPA_SUPPLICANT_WOLFSSL
101 DRIVER_MAKEOPTS += CONFIG_TLS=openssl CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
102 TARGET_LDFLAGS += -lcrypto -lssl
103 else
104 DRIVER_MAKEOPTS += CONFIG_TLS=wolfssl CONFIG_WPS_NFC=1 CONFIG_AP=y CONFIG_SAE=y CONFIG_MESH=y
105 TARGET_LDFLAGS += -lwolfssl
106 endif
107 endif
108
109 ifdef CONFIG_WPA_SUPPLICANT_NO_TIMESTAMP_CHECK
110 TARGET_CFLAGS += -DNO_TIMESTAMP_CHECK
111 endif
112 ifdef CONFIG_WPA_RFKILL_SUPPORT
113 DRIVER_MAKEOPTS += NEED_RFKILL=y
114 endif
115 DRIVER_MAKEOPTS += \
116 CONFIG_DRIVER_ROBOSWITCH=$(CONFIG_PACKAGE_kmod-switch)
117 endif
118
119 ifdef CONFIG_USE_GLIBC
120 TARGET_LDFLAGS += -lrt
121 TARGET_LDFLAGS_C += -lrt
122 endif
123
124 DRV_DEPENDS:=+PACKAGE_kmod-cfg80211:libnl-tiny
125
126 define Package/hostapd/Default
127 SECTION:=net
128 CATEGORY:=Network
129 TITLE:=IEEE 802.1x Authenticator
130 URL:=http://hostap.epitest.fi/
131 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
132 endef
133
134 define Package/hostapd
135 $(call Package/hostapd/Default)
136 TITLE+= (full)
137 VARIANT:=full
138 CONFLICTS:=wpad wpad-mini wpad-mesh
139 endef
140
141 define Package/hostapd/description
142 This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS
143 Authenticator.
144 endef
145
146 define Package/hostapd-mini
147 $(call Package/hostapd/Default)
148 TITLE+= (WPA-PSK only)
149 VARIANT:=mini
150 CONFLICTS:=wpad wpad-mini wpad-mesh
151 endef
152
153 define Package/hostapd-mini/description
154 This package contains a minimal IEEE 802.1x/WPA Authenticator (WPA-PSK only).
155 endef
156
157 define Package/hostapd-utils
158 $(call Package/hostapd/Default)
159 TITLE+= (utils)
160 DEPENDS:=@PACKAGE_hostapd||PACKAGE_hostapd-mini||PACKAGE_wpad||PACKAGE_wpad-mesh||PACKAGE_wpad-mini
161 endef
162
163 define Package/hostapd-utils/description
164 This package contains a command line utility to control the
165 IEEE 802.1x/WPA/EAP/RADIUS Authenticator.
166 endef
167
168 define Package/wpad/Default
169 SECTION:=net
170 CATEGORY:=Network
171 TITLE:=IEEE 802.1x Authenticator/Supplicant
172 DEPENDS:=$(DRV_DEPENDS) +hostapd-common +libubus
173 URL:=http://hostap.epitest.fi/
174 endef
175
176 define Package/wpad
177 $(call Package/wpad/Default)
178 TITLE+= (full)
179 DEPENDS+=+WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
180 VARIANT:=wpad-full
181 endef
182
183 define Package/wpad/description
184 This package contains a full featured IEEE 802.1x/WPA/EAP/RADIUS
185 Authenticator and Supplicant
186 endef
187
188 define Package/wpad-mini
189 $(call Package/wpad/Default)
190 TITLE+= (WPA-PSK only)
191 VARIANT:=wpad-mini
192 endef
193
194 define Package/wpad-mini/description
195 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (WPA-PSK only).
196 endef
197
198 define Package/wpad-mesh
199 $(call Package/wpad/Default)
200 TITLE+= (with 802.11s mesh and SAE support)
201 DEPENDS:=$(DRV_DEPENDS) +libubus +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
202 VARIANT:=wpad-mesh
203 endef
204
205 define Package/wpad-mesh/description
206 This package contains a minimal IEEE 802.1x/WPA Authenticator and Supplicant (with 802.11s mesh and SAE support).
207 endef
208
209 define Package/wpa-supplicant
210 SECTION:=net
211 CATEGORY:=Network
212 TITLE:=WPA Supplicant
213 URL:=http://hostap.epitest.fi/wpa_supplicant/
214 DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
215 CONFLICTS:=wpad wpad-mini wpad-mesh
216 VARIANT:=supplicant-full
217 endef
218
219 define Package/wpa-supplicant/config
220 source "$(SOURCE)/Config.in"
221 endef
222
223 define Package/wpa-supplicant-p2p
224 $(Package/wpa-supplicant)
225 TITLE:=WPA Supplicant (with Wi-Fi P2P support)
226 DEPENDS:=$(DRV_DEPENDS) @PACKAGE_kmod-cfg80211
227 CONFLICTS:=wpad wpad-mini wpad-mesh
228 VARIANT:=supplicant-p2p
229 endef
230
231 define Package/wpa-supplicant-mesh
232 $(Package/wpa-supplicant)
233 TITLE:=WPA Supplicant (with 802.11s and SAE)
234 DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_INTERNAL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl @PACKAGE_kmod-cfg80211 @(!TARGET_uml||BROKEN)
235 CONFLICTS:=wpad wpad-mesh wpad-mesh
236 VARIANT:=supplicant-mesh
237 endef
238
239 define Package/wpa-supplicant-mini
240 $(Package/wpa-supplicant)
241 TITLE:=WPA Supplicant (minimal version)
242 DEPENDS:=$(DRV_DEPENDS)
243 CONFLICTS:=wpad wpad-mini wpad-mesh
244 VARIANT:=supplicant-mini
245 endef
246
247 define Package/wpa-cli
248 SECTION:=net
249 CATEGORY:=Network
250 DEPENDS:=@PACKAGE_wpa-supplicant||PACKAGE_wpa-supplicant-p2p||PACKAGE_wpad-mini||PACKAGE_wpad||PACKAGE_wpad-mesh
251 TITLE:=WPA Supplicant command line control utility
252 endef
253
254 define Package/hostapd-common
255 TITLE:=hostapd/wpa_supplicant common support files
256 SECTION:=net
257 CATEGORY:=Network
258 endef
259
260 define Package/eapol-test
261 TITLE:=802.1x authentication test utility
262 SECTION:=net
263 CATEGORY:=Network
264 VARIANT:=supplicant-full
265 DEPENDS:=$(DRV_DEPENDS) +WPA_SUPPLICANT_OPENSSL:libopenssl +WPA_SUPPLICANT_WOLFSSL:libwolfssl
266 endef
267
268
269 ifneq ($(wildcard $(PKG_BUILD_DIR)/.config_*),$(subst .configured_,.config_,$(STAMP_CONFIGURED)))
270 define Build/Configure/rebuild
271 $(FIND) $(PKG_BUILD_DIR) -name \*.o -or -name \*.a | $(XARGS) rm -f
272 rm -f $(PKG_BUILD_DIR)/hostapd/hostapd
273 rm -f $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant
274 rm -f $(PKG_BUILD_DIR)/.config_*
275 touch $(subst .configured_,.config_,$(STAMP_CONFIGURED))
276 endef
277 endif
278
279 define Build/Configure
280 $(Build/Configure/rebuild)
281 $(if $(wildcard ./files/hostapd-$(CONFIG_VARIANT).config), \
282 $(CP) ./files/hostapd-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/hostapd/.config \
283 )
284 $(CP) ./files/wpa_supplicant-$(CONFIG_VARIANT).config $(PKG_BUILD_DIR)/wpa_supplicant/.config
285 endef
286
287 TARGET_CPPFLAGS := \
288 -I$(STAGING_DIR)/usr/include/libnl-tiny \
289 -I$(PKG_BUILD_DIR)/src/crypto \
290 $(TARGET_CPPFLAGS) \
291 -DCONFIG_LIBNL20 \
292 -D_GNU_SOURCE \
293 $(if $(CONFIG_WPA_MSG_MIN_PRIORITY),-DCONFIG_MSG_MIN_PRIORITY=$(CONFIG_WPA_MSG_MIN_PRIORITY))
294
295 TARGET_CFLAGS += -ffunction-sections -fdata-sections
296 TARGET_LDFLAGS += -Wl,--gc-sections
297 ifeq ($(findstring supplicant,$(BUILD_VARIANT)),)
298 TARGET_LDFLAGS += -lubox -lubus
299 endif
300
301 ifdef CONFIG_PACKAGE_kmod-cfg80211
302 TARGET_LDFLAGS += -lm -lnl-tiny
303 endif
304
305 define Build/RunMake
306 CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \
307 $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/$(1) \
308 $(TARGET_CONFIGURE_OPTS) \
309 $(DRIVER_MAKEOPTS) \
310 LIBS="$(TARGET_LDFLAGS)" \
311 LIBS_c="$(TARGET_LDFLAGS_C)" \
312 BCHECK= \
313 $(2)
314 endef
315
316 define Build/Compile/wpad
317 echo ` \
318 $(call Build/RunMake,hostapd,-s MULTICALL=1 dump_cflags); \
319 $(call Build/RunMake,wpa_supplicant,-s MULTICALL=1 dump_cflags) | \
320 sed -e 's,-n ,,g' -e 's^$(TARGET_CFLAGS)^^' \
321 ` > $(PKG_BUILD_DIR)/.cflags
322 sed -i 's/"/\\"/g' $(PKG_BUILD_DIR)/.cflags
323 +$(call Build/RunMake,hostapd, \
324 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
325 MULTICALL=1 \
326 hostapd_cli hostapd_multi.a \
327 )
328 +$(call Build/RunMake,wpa_supplicant, \
329 CFLAGS="$$$$(cat $(PKG_BUILD_DIR)/.cflags)" \
330 MULTICALL=1 \
331 wpa_cli wpa_supplicant_multi.a \
332 )
333 $(TARGET_CC) -o $(PKG_BUILD_DIR)/wpad \
334 $(TARGET_CFLAGS) \
335 ./files/multicall.c \
336 $(PKG_BUILD_DIR)/hostapd/hostapd_multi.a \
337 $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant_multi.a \
338 $(TARGET_LDFLAGS)
339 endef
340
341 define Build/Compile/hostapd
342 +$(call Build/RunMake,hostapd, \
343 hostapd hostapd_cli \
344 )
345 endef
346
347 define Build/Compile/supplicant
348 +$(call Build/RunMake,wpa_supplicant, \
349 wpa_cli wpa_supplicant \
350 )
351 endef
352
353 define Build/Compile/supplicant-full
354 +$(call Build/RunMake,wpa_supplicant, \
355 eapol_test \
356 )
357 endef
358
359 define Build/Compile
360 $(Build/Compile/$(LOCAL_TYPE))
361 $(Build/Compile/$(BUILD_VARIANT))
362 endef
363
364 define Install/hostapd
365 $(INSTALL_DIR) $(1)/usr/sbin
366 endef
367
368 define Install/supplicant
369 $(INSTALL_DIR) $(1)/usr/sbin
370 endef
371
372 define Package/hostapd-common/install
373 $(INSTALL_DIR) $(1)/lib/netifd
374 $(INSTALL_DATA) ./files/hostapd.sh $(1)/lib/netifd/hostapd.sh
375 endef
376
377 define Package/hostapd/install
378 $(call Install/hostapd,$(1))
379 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd $(1)/usr/sbin/
380 endef
381 Package/hostapd-mini/install = $(Package/hostapd/install)
382
383 ifneq ($(LOCAL_TYPE),supplicant)
384 define Package/hostapd-utils/install
385 $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/rc.button
386 $(INSTALL_BIN) $(PKG_BUILD_DIR)/hostapd/hostapd_cli $(1)/usr/sbin/
387 $(INSTALL_BIN) ./files/wps-hotplug.sh $(1)/etc/rc.button/wps
388 endef
389 endif
390
391 define Package/wpad/install
392 $(call Install/hostapd,$(1))
393 $(call Install/supplicant,$(1))
394 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpad $(1)/usr/sbin/
395 $(LN) wpad $(1)/usr/sbin/hostapd
396 $(LN) wpad $(1)/usr/sbin/wpa_supplicant
397 endef
398 Package/wpad-mini/install = $(Package/wpad/install)
399 Package/wpad-mesh/install = $(Package/wpad/install)
400
401 define Package/wpa-supplicant/install
402 $(call Install/supplicant,$(1))
403 $(INSTALL_BIN) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_supplicant $(1)/usr/sbin/
404 endef
405 Package/wpa-supplicant-mini/install = $(Package/wpa-supplicant/install)
406 Package/wpa-supplicant-p2p/install = $(Package/wpa-supplicant/install)
407 Package/wpa-supplicant-mesh/install = $(Package/wpa-supplicant/install)
408
409 ifneq ($(LOCAL_TYPE),hostapd)
410 define Package/wpa-cli/install
411 $(INSTALL_DIR) $(1)/usr/sbin
412 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/wpa_cli $(1)/usr/sbin/
413 endef
414 endif
415
416 ifeq ($(BUILD_VARIANT),supplicant-full)
417 define Package/eapol-test/install
418 $(INSTALL_DIR) $(1)/usr/sbin
419 $(CP) $(PKG_BUILD_DIR)/wpa_supplicant/eapol_test $(1)/usr/sbin/
420 endef
421 endif
422
423 $(eval $(call BuildPackage,hostapd))
424 $(eval $(call BuildPackage,hostapd-mini))
425 $(eval $(call BuildPackage,wpad))
426 $(eval $(call BuildPackage,wpad-mesh))
427 $(eval $(call BuildPackage,wpad-mini))
428 $(eval $(call BuildPackage,wpa-supplicant))
429 $(eval $(call BuildPackage,wpa-supplicant-mesh))
430 $(eval $(call BuildPackage,wpa-supplicant-mini))
431 $(eval $(call BuildPackage,wpa-supplicant-p2p))
432 $(eval $(call BuildPackage,wpa-cli))
433 $(eval $(call BuildPackage,hostapd-utils))
434 $(eval $(call BuildPackage,hostapd-common))
435 $(eval $(call BuildPackage,eapol-test))