|
| 1 | +########################################################################## |
| 2 | +# If not stated otherwise in this file or this component's LICENSE |
| 3 | +# file the following copyright and licenses apply: |
| 4 | +# |
| 5 | +# Copyright 2024 RDK Management |
| 6 | +# |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | +# you may not use this file except in compliance with the License. |
| 9 | +# You may obtain a copy of the License at |
| 10 | +# |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | +# |
| 13 | +# Unless required by applicable law or agreed to in writing, software |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | +# See the License for the specific language governing permissions and |
| 17 | +# limitations under the License. |
| 18 | +########################################################################## |
| 19 | +LIB_PRFIX := lib |
| 20 | +LIB_NAME := $(LIB_PRFIX)$(NAME) |
| 21 | +LIB_NAME_PKG := $(LIB_NAME).pc |
| 22 | +LIB_NAME_REAL := $(LIB_NAME).so |
| 23 | +LIB_NAME_LINKER := $(LIB_NAME_REAL).$(LIB_VERSION) |
| 24 | +LIB_NAME_SO := $(LIB_NAME_REAL).$(LIB_VERSION_MAJOR) |
| 25 | + |
| 26 | +LIB_OBJS := ../src/common/wpa_ctrl.o |
| 27 | + |
| 28 | +#################part of `wpa_supplicant`################# |
| 29 | +ifeq ($(WIFI_EMULATOR), true) |
| 30 | +LIB_OBJS += ../wpa_supplicant/rrm_test.o |
| 31 | +endif |
| 32 | + |
| 33 | +LIB_OBJS += ../wpa_supplicant/sme.o |
| 34 | +LIB_OBJS += ../wpa_supplicant/wmm_ac.o |
| 35 | +LIB_OBJS += ../wpa_supplicant/rrm.o |
| 36 | +LIB_OBJS += ../wpa_supplicant/wps_supplicant.o |
| 37 | +LIB_OBJS += ../wpa_supplicant/wpas_glue.o |
| 38 | +LIB_OBJS += ../wpa_supplicant/interworking.o |
| 39 | +LIB_OBJS += ../wpa_supplicant/op_classes.o |
| 40 | +LIB_OBJS += ../wpa_supplicant/events.o |
| 41 | +LIB_OBJS += ../wpa_supplicant/hs20_supplicant.o |
| 42 | +LIB_OBJS += ../wpa_supplicant/scan.o |
| 43 | +LIB_OBJS += ../wpa_supplicant/bss.o |
| 44 | +LIB_OBJS += ../wpa_supplicant/notify.o |
| 45 | +LIB_OBJS += ../wpa_supplicant/wpa_supplicant.o |
| 46 | +LIB_OBJS += ../wpa_supplicant/robust_av.o |
| 47 | +LIB_OBJS += ../wpa_supplicant/bssid_ignore.o |
| 48 | +LIB_OBJS += ../src/utils/bitfield.o |
| 49 | + |
| 50 | +LIB_OBJS += ../wpa_supplicant/wnm_sta.o |
| 51 | +LIB_OBJS += ../wpa_supplicant/config.o |
| 52 | +LIB_OBJS += ../wpa_supplicant/gas_query.o |
| 53 | +LIB_OBJS += ../wpa_supplicant/config_none.o |
| 54 | +LIB_OBJS += ../wpa_supplicant/ctrl_iface.o |
| 55 | +LIB_OBJS += ../wpa_supplicant/offchannel.o |
| 56 | +LIB_OBJS += ../wpa_supplicant/eap_register.o |
| 57 | +LIB_OBJS += ../wpa_supplicant/ap.o |
| 58 | +LIB_OBJS += ../wpa_supplicant/ctrl_iface_unix.o |
| 59 | +LIB_OBJS += ../wpa_supplicant/mbo.o |
| 60 | +LIB_OBJS += ../wpa_supplicant/wnm_sta.o |
| 61 | + |
| 62 | +ifdef CONFIG_EAP_TLS |
| 63 | +# EAP-TLS |
| 64 | +CFLAGS += -DEAP_TLS |
| 65 | +LIB_OBJS += ../src/eap_peer/eap_tls.o |
| 66 | +SUPP_TLS_FUNCS=y |
| 67 | +CONFIG_IEEE8021X_EAPOL=y |
| 68 | +ifdef CONFIG_EAP_TLSV1_3 |
| 69 | +CFLAGS += -DEAP_TLSV1_3 |
| 70 | +endif |
| 71 | +endif |
| 72 | + |
| 73 | +ifdef CONFIG_EAP_UNAUTH_TLS |
| 74 | +# EAP-UNAUTH-TLS |
| 75 | +CFLAGS += -DEAP_UNAUTH_TLS |
| 76 | +ifndef CONFIG_EAP_TLS |
| 77 | +LIB_OBJS += ../src/eap_peer/eap_tls.o |
| 78 | +SUPP_TLS_FUNCS=y |
| 79 | +endif |
| 80 | +CONFIG_IEEE8021X_EAPOL=y |
| 81 | +endif |
| 82 | + |
| 83 | +ifdef CONFIG_EAP_PEAP |
| 84 | +# EAP-PEAP |
| 85 | +CFLAGS += -DEAP_PEAP |
| 86 | +LIB_OBJS += ../src/eap_peer/eap_peap.o |
| 87 | +SUPP_TLS_FUNCS=y |
| 88 | +CONFIG_IEEE8021X_EAPOL=y |
| 89 | +endif |
| 90 | + |
| 91 | +ifdef CONFIG_EAP_TTLS |
| 92 | +# EAP-TTLS |
| 93 | +CFLAGS += -DEAP_TTLS |
| 94 | +LIB_OBJS += ../src/eap_peer/eap_ttls.o |
| 95 | +SUPP_TLS_FUNCS=y |
| 96 | +CONFIG_IEEE8021X_EAPOL=y |
| 97 | +endif |
| 98 | + |
| 99 | +ifdef CONFIG_EAP_MD5 |
| 100 | +# EAP-MD5 |
| 101 | +CFLAGS += -DEAP_MD5 |
| 102 | +LIB_OBJS += ../src/eap_peer/eap_md5.o |
| 103 | +CONFIG_IEEE8021X_EAPOL=y |
| 104 | +endif |
| 105 | + |
| 106 | +ifdef CONFIG_EAP_MSCHAPV2 |
| 107 | +# EAP-MSCHAPv2 |
| 108 | +CFLAGS += -DEAP_MSCHAPv2 |
| 109 | +LIB_OBJS += ../src/eap_peer/eap_mschapv2.o |
| 110 | +LIB_OBJS += ../src/eap_peer/mschapv2.o |
| 111 | +CONFIG_IEEE8021X_EAPOL=y |
| 112 | +endif |
| 113 | + |
| 114 | +ifdef CONFIG_EAP_GTC |
| 115 | +# EAP-GTC |
| 116 | +CFLAGS += -DEAP_GTC |
| 117 | +LIB_OBJS += ../src/eap_peer/eap_gtc.o |
| 118 | +CONFIG_IEEE8021X_EAPOL=y |
| 119 | +endif |
| 120 | + |
| 121 | +ifdef CONFIG_EAP_OTP |
| 122 | +# EAP-OTP |
| 123 | +CFLAGS += -DEAP_OTP |
| 124 | +LIB_OBJS += ../src/eap_peer/eap_otp.o |
| 125 | +CONFIG_IEEE8021X_EAPOL=y |
| 126 | +endif |
| 127 | + |
| 128 | +ifdef CONFIG_EAP_LEAP |
| 129 | +# EAP-LEAP |
| 130 | +CFLAGS += -DEAP_LEAP |
| 131 | +LIB_OBJS += ../src/eap_peer/eap_leap.o |
| 132 | +CONFIG_IEEE8021X_EAPOL=y |
| 133 | +endif |
| 134 | + |
| 135 | +ifdef CONFIG_EAP_PSK |
| 136 | +# EAP-PSK |
| 137 | +CFLAGS += -DEAP_PSK |
| 138 | +LIB_OBJS += ../src/eap_peer/eap_psk.o |
| 139 | +CONFIG_IEEE8021X_EAPOL=y |
| 140 | +endif |
| 141 | + |
| 142 | +ifdef CONFIG_EAP_PAX |
| 143 | +# EAP-PAX |
| 144 | +CFLAGS += -DEAP_PAX |
| 145 | +LIB_OBJS += ../src/eap_peer/eap_pax.o |
| 146 | +CONFIG_IEEE8021X_EAPOL=y |
| 147 | +endif |
| 148 | + |
| 149 | +ifdef CONFIG_EAP_SAKE |
| 150 | +# EAP-SAKE |
| 151 | +CFLAGS += -DEAP_SAKE |
| 152 | +LIB_OBJS += ../src/eap_peer/eap_sake.o |
| 153 | +CONFIG_IEEE8021X_EAPOL=y |
| 154 | +endif |
| 155 | + |
| 156 | +ifdef CONFIG_EAP_GPSK |
| 157 | +# EAP-GPSK |
| 158 | +CFLAGS += -DEAP_GPSK |
| 159 | +LIB_OBJS += ../src/eap_peer/eap_gpsk.o |
| 160 | +CONFIG_IEEE8021X_EAPOL=y |
| 161 | +endif |
| 162 | + |
| 163 | +ifdef CONFIG_EAP_PWD |
| 164 | +CFLAGS += -DEAP_PWD |
| 165 | +LIB_OBJS += ../src/eap_peer/eap_pwd.o |
| 166 | +CONFIG_IEEE8021X_EAPOL=y |
| 167 | +endif |
| 168 | + |
| 169 | +ifdef CONFIG_IEEE8021X_EAPOL |
| 170 | +# IEEE 802.1X/EAPOL state machines (e.g., for RADIUS authentication) |
| 171 | +CFLAGS += -DIEEE8021X_EAPOL |
| 172 | +LIB_OBJS += ../src/eapol_supp/eapol_supp_sm.o |
| 173 | +LIB_OBJS += ../src/eap_peer/eap.o |
| 174 | +LIB_OBJS += ../src/eap_peer/eap_methods.o |
| 175 | +endif |
| 176 | + |
| 177 | +ifdef SUPP_TLS_FUNCS |
| 178 | +LIB_OBJS += ../src/eap_peer/eap_tls_common.o |
| 179 | +endif |
| 180 | + |
| 181 | +ifndef CONFIG_NO_WPA |
| 182 | +LIB_OBJS += ../src/rsn_supp/wpa.o |
| 183 | +LIB_OBJS += ../src/rsn_supp/preauth.o |
| 184 | +LIB_OBJS += ../src/rsn_supp/pmksa_cache.o |
| 185 | +LIB_OBJS += ../src/rsn_supp/wpa_ie.o |
| 186 | +LIB_OBJS += ../src/common/wpa_common.o |
| 187 | +else |
| 188 | +CFLAGS += -DCONFIG_NO_WPA |
| 189 | +endif |
| 190 | + |
| 191 | +ifdef CONFIG_IEEE80211R |
| 192 | +LIB_OBJS += ../src/rsn_supp/wpa_ft.o |
| 193 | +endif |
| 194 | + |
| 195 | +ifdef CONFIG_MBO |
| 196 | +CFLAGS += -DCONFIG_MBO |
| 197 | +LIB_OBJS += ../src/ap/mbo_ap.o |
| 198 | +endif |
| 199 | + |
| 200 | +#################part of `wpa_supplicant`################# |
| 201 | + |
| 202 | +ifeq ($(call VERSION_CMP,$(LIB_VERSION_MAJOR),$(LIB_VERSION_MINOR),gt,2,9),true) |
| 203 | +# This configuration has been removed and enabled by default since 2.10. |
| 204 | +CFLAGS += -DCONFIG_IEEE80211W |
| 205 | +endif |
| 206 | + |
| 207 | +# Someone is incorrectly calling functions that were not included in the library. |
| 208 | +ifdef CONFIG_SAE |
| 209 | +ifndef NEED_AES_OMAC1 |
| 210 | +ifneq ($(CONFIG_TLS), openssl) |
| 211 | +LIB_OBJS += -DCONFIG_OPENSSL_CMAC |
| 212 | +endif |
| 213 | +endif |
| 214 | +ifdef NEED_SHA384 |
| 215 | +ifndef NEED_HMAC_SHA384_KDF |
| 216 | +LIB_OBJS += ../src/crypto/sha384-kdf.o |
| 217 | +endif |
| 218 | +endif |
| 219 | +ifdef NEED_SHA512 |
| 220 | +ifndef NEED_HMAC_SHA512_KDF |
| 221 | +LIB_OBJS += ../src/crypto/sha512-kdf.o |
| 222 | +endif |
| 223 | +endif |
| 224 | +endif |
| 225 | + |
| 226 | +ifdef CONFIG_DRIVER_NL80211 |
| 227 | +ifdef CONFIG_DRIVER_BRCM |
| 228 | +CFLAGS += -DCONFIG_DRIVER_BRCM |
| 229 | +endif |
| 230 | +endif |
| 231 | + |
| 232 | +ifdef CONFIG_WPS |
| 233 | +ifdef CONFIG_DRIVER_BRCM_MAP |
| 234 | +CFLAGS += -DCONFIG_DRIVER_BRCM_MAP |
| 235 | +endif |
| 236 | +endif |
| 237 | + |
| 238 | +ifdef ONE_WIFI |
| 239 | +CFLAGS += -DRDK_ONEWIFI |
| 240 | +endif |
| 241 | + |
| 242 | +ifdef FEATURE_SUPPORT_RADIUSGREYLIST |
| 243 | +CFLAGS += -DFEATURE_SUPPORT_RADIUSGREYLIST |
| 244 | +LIB_OBJS += ../src/ap/greylist.o |
| 245 | +endif |
| 246 | + |
| 247 | +EXPORT_COMPILE_DEFINITIONS := $(filter -D%, $(CFLAGS)) -DHOSTAPD_$(subst .,_,$(LIB_VERSION)) |
| 248 | + |
| 249 | +CFLAGS += -fPIC -DPIC |
| 250 | +CFLAGS += $(shell $(PKG_CONFIG) --cflags $(PKG_CONFIG_LIST)) |
| 251 | + |
| 252 | +_OBJS_VAR := LIB_OBJS |
| 253 | +ifneq ("$(wildcard ../src/objs.mk)","") |
| 254 | +include ../src/objs.mk |
| 255 | +else |
| 256 | +ROOTDIR := $(dir $(lastword $(MAKEFILE_LIST))) |
| 257 | +ROOTDIR := $(dir $(ROOTDIR:%../src/=%))../ |
| 258 | +PROJ := $(NAME) |
| 259 | + |
| 260 | +_DIRS := $(BUILDDIR)/$(PROJ) |
| 261 | +.PHONY: _make_dirs common-clean |
| 262 | +_make_dirs: |
| 263 | + $(Q)mkdir -p $(_DIRS) |
| 264 | + |
| 265 | +$(BUILDDIR)/$(PROJ)/src/%.o: $(ROOTDIR)src/%.c $(CONFIG_FILE) | _make_dirs |
| 266 | + $(Q)$(CC) -c -o $@ $(CFLAGS) $< |
| 267 | + |
| 268 | +$(BUILDDIR)/$(PROJ)/%.o: %.c $(CONFIG_FILE) | _make_dirs |
| 269 | + $(Q)$(CC) -c -o $@ $(CFLAGS) $< |
| 270 | + |
| 271 | +common-clean: |
| 272 | + $(Q)rm -rf $(BUILDDIR)/$(PROJ) $(BUILDDIR)/src |
| 273 | + |
| 274 | +BUILDOBJ = $(patsubst %,$(BUILDDIR)/$(PROJ)/%,$(patsubst $(ROOTDIR)%,%,$(1))) |
| 275 | + |
| 276 | +$(_OBJS_VAR) := $(call BUILDOBJ,$($(_OBJS_VAR))) |
| 277 | +OBJS := $(call BUILDOBJ,$(OBJS)) |
| 278 | +_DIRS += $(dir $($(_OBJS_VAR)) $(OBJS)) |
| 279 | +endif |
| 280 | + |
| 281 | +LIB_OBJS += $(OBJS) |
| 282 | + |
| 283 | +# Do not install all header files. This will help resolve dl lookup errors at compile time. |
| 284 | +LIB_HDRS := $(patsubst src/%,../src/%,$(patsubst $(BUILDDIR)/$(PROJ)/%,%,$(LIB_OBJS:%.o=%.h))) |
| 285 | +#for sha |
| 286 | +LIB_HDRS := $(shell echo "$(LIB_HDRS)" | sed -E 's/sha([0-9]+)-([a-zA-Z0-9]+)\.h/sha\1.h/g') |
| 287 | +LIB_HDRS += ../src/ap/wpa_auth_i.h |
| 288 | +ifdef CONFIG_DRIVER_NL80211_BRCM |
| 289 | +LIB_HDRS += ../src/common/brcm_vendor.h |
| 290 | +endif |
| 291 | +LIB_HDRS += ../src/crypto/crypto.h |
| 292 | +LIB_HDRS += ../src/crypto/tls.h |
| 293 | +LIB_HDRS += ../src/common/defs.h |
| 294 | +# Since 2.10, some headers (like `hostapd.h`) started including this file without checking `CONFIG_DPP`. |
| 295 | +# Of course this doesn't lead to ld issues and etc., but it does cause compilation errors. |
| 296 | +ifeq ($(call VERSION_CMP,$(LIB_VERSION_MAJOR),$(LIB_VERSION_MINOR),gt,2,9),true) |
| 297 | +LIB_HDRS += ../src/common/dpp.h |
| 298 | +endif |
| 299 | +LIB_HDRS += ../src/common/eapol_common.h |
| 300 | +ifdef CONFIG_MACSEC |
| 301 | +LIB_HDRS += ../src/common/ieee802_1x_defs.h |
| 302 | +endif |
| 303 | +LIB_HDRS += ../src/common/ieee802_11_defs.h |
| 304 | +LIB_HDRS += ../src/drivers/driver.h |
| 305 | +LIB_HDRS += ../src/drivers/nl80211_copy.h |
| 306 | +LIB_HDRS += ../src/eap_common/eap_defs.h |
| 307 | +LIB_HDRS += ../src/eap_peer/eap_config.h |
| 308 | +LIB_HDRS += ../src/fst/fst.h |
| 309 | +ifdef CONFIG_SAE |
| 310 | +LIB_HDRS += ../src/pasn/pasn_common.h |
| 311 | +endif |
| 312 | +ifndef CONFIG_NO_WPA |
| 313 | +LIB_HDRS += ../src/rsn_supp/wpa_i.h |
| 314 | +endif |
| 315 | +LIB_HDRS += ../src/utils/build_config.h |
| 316 | +LIB_HDRS += ../src/utils/includes.h |
| 317 | +LIB_HDRS += ../src/utils/list.h |
| 318 | +# We should not use `os.h` in our projects, as it is not part of the hostapd public API and is only used in translation units. |
| 319 | +# WORKAROUND: since we started using it in our project, I'll add it here. |
| 320 | +LIB_HDRS += ../src/utils/os.h |
| 321 | +LIB_HDRS += ../src/wps/wps_defs.h |
| 322 | + |
| 323 | +.PHONY: $(LIB_NAME) $(LIB_NAME_PKG) install_$(LIB_NAME) clean_$(LIB_NAME) |
| 324 | + |
| 325 | +$(LIB_NAME): $(BUILDDIR)/$(LIB_NAME_LINKER) |
| 326 | +$(LIB_NAME_PKG): $(BUILDDIR)/$(LIB_NAME_PKG) |
| 327 | + |
| 328 | +$(BUILDDIR)/$(LIB_NAME_LINKER): $(LIB_OBJS) |
| 329 | + $(Q)$(CC) $(LDFLAGS) -shared -Wl,-soname,$(LIB_NAME_SO) -o $@ $^ |
| 330 | + |
| 331 | +$(BUILDDIR)/$(LIB_NAME_PKG): |
| 332 | + $(Q)echo "prefix=$(prefix)" > $@ |
| 333 | + $(Q)echo "exec_prefix=\$${prefix}" >> $@ |
| 334 | + $(Q)echo "includedir=\$${prefix}/include" >> $@ |
| 335 | + $(Q)echo "libdir=\$${exec_prefix}/lib" >> $@ |
| 336 | + $(Q)echo "" >> $@ |
| 337 | + $(Q)echo "Name: $(LIB_NAME)" >> $@ |
| 338 | + $(Q)echo "Description: User space shared lib for access points" >> $@ |
| 339 | + $(Q)echo "Version: $(LIB_VERSION)" >> $@ |
| 340 | + $(Q)echo "Requires: $(PKG_CONFIG_LIST)" >> $@ |
| 341 | + $(Q)echo "Libs: -L\$${libdir} -l$(NAME)" >> $@ |
| 342 | + $(Q)echo "Libs.private: $(LIBS)" >> $@ |
| 343 | +# We must add `-I\$${includedir}/$(PN)/src/utils` to the include path because some `libhostapd` headers are included without the full path. |
| 344 | + $(Q)echo "Cflags: -I\$${includedir}/$(PN) -I\$${includedir}/$(PN)/src -I\$${includedir}/$(PN)/src/utils -I\$${includedir}/$(PN)/src/ap $(EXPORT_COMPILE_DEFINITIONS)" >> $@ |
| 345 | + |
| 346 | +install_$(LIB_NAME): $(LIB_NAME) $(LIB_NAME_PKG) |
| 347 | + $(Q)install -D -m 0644 $(BUILDDIR)/$(LIB_NAME_PKG) $(DESTDIR)$(libdir)/pkgconfig/$(LIB_NAME_PKG) |
| 348 | + $(Q)install -D -m 0755 $(BUILDDIR)/$(LIB_NAME_LINKER) $(DESTDIR)$(libdir)/$(LIB_NAME_LINKER) |
| 349 | + $(Q)for file in $(LIB_HDRS); do test -f $$file && install -D -m 0644 $$file $(DESTDIR)$(includedir)/$(PN)/$(notdir $(CURDIR))/$$file; done |
| 350 | + $(Q)ln -sf $(LIB_NAME_LINKER) $(DESTDIR)$(libdir)/$(LIB_NAME_SO) |
| 351 | + $(Q)ln -sf $(LIB_NAME_LINKER) $(DESTDIR)$(libdir)/$(LIB_NAME_REAL) |
| 352 | + |
| 353 | +clean_$(LIB_NAME): common-clean |
| 354 | + $(Q)rm -rf $(BUILDDIR)/$(LIB_NAME_LINKER) $(BUILDDIR)/$(LIB_NAME_PKG) |
0 commit comments