// Copyright (C) 2021 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // The wpa_supplicant related modules are split into 2 sections: // 1. For cuttlefish series products, start from `wpa_supplicant_headers` to `libpasn`. // 2. For non-cuttlefish series products, ex: physical devices created by oems, // the section starts from `wpa_supplicant_driver_srcs_default` to the end of this file. package { default_applicable_licenses: [ // Inherits SPDX-license-identifier-BSD-3-Clause "external_wpa_supplicant_8_license", ], } // See: http://go/android-license-faq license { name: "external_wpa_supplicant_8_wpa_supplicant_icons_license", license_kinds: ["SPDX-license-identifier-CC0-1.0"], license_text: ["wpa_gui-qt4/icons/LICENSE"], } // Ostensibly unused. filegroup { name: "wpa_supplicant_gui_qt4_icons", srcs: ["wpa_gui-qt4/icons/*.svg"], licenses: [ "external_wpa_supplicant_8_license", "external_wpa_supplicant_8_wpa_supplicant_icons_license", ], } // The section below is for cuttlefish series products. For non-cuttlefish // products please update the section starting at `wpa_supplicant_driver_srcs_default`. // Start of cuttlefish section cc_library_headers { name: "wpa_supplicant_headers", export_include_dirs: [ ".", "src", "src/common", "src/drivers", "src/eap_common", "src/eapol_supp", "src/eap_peer", "src/eap_server", "src/l2_packet", "src/radius", "src/rsn_supp", "src/tls", "src/utils", "src/wps", ], soc_specific: true, } cc_library_headers { name: "wpa_supplicant_headers_mainline", export_include_dirs: [ ".", "src", "src/common", "src/drivers", "src/eap_common", "src/eapol_supp", "src/eap_peer", "src/eap_server", "src/l2_packet", "src/radius", "src/rsn_supp", "src/tls", "src/utils", "src/wps", ], apex_available: [ "//apex_available:platform", "com.android.wifi", ], min_sdk_version: "30", } filegroup { name: "wpa_supplicant_template.conf", srcs: ["wpa_supplicant_template.conf"], } cc_defaults { name: "wpa_supplicant_defaults", defaults: ["wpa_supplicant_cflags_defaults"], srcs: [":wpa_supplicant_srcs"], shared_libs: [ "android.hardware.wifi.supplicant-V4-ndk", "android.system.keystore2-V1-ndk", "libbase", "libbinder_ndk", "libc", "libcrypto", "libcutils", "libkeystore-engine-wifi-hidl", "liblog", "libnl", "libssl", "libutils", ], relative_install_path: "hw", soc_specific: true, static_libs: [ "libwpa_aidl_bp", ], header_libs: [ "wpa_supplicant_headers", "libwpa_aidl_headers", ], } cc_defaults { name: "wpa_supplicant_cflags_defaults", // Generated by building wpa_supplicant and printing LOCAL_CFLAGS. cflags: [ "-DANDROID_LOG_NAME=\"wpa_supplicant\"", "-DANDROID_P2P", "-DCONFIG_ACS", "-DCONFIG_ANDROID_LOG", "-DCONFIG_AP", "-DCONFIG_BACKEND_FILE", "-DCONFIG_CTRL_IFACE", "-DCONFIG_CTRL_IFACE_CLIENT_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_AIDL", "-DCONFIG_CTRL_IFACE_UNIX", "-DCONFIG_DPP", "-DCONFIG_DPP2", "-DCONFIG_DRIVER_NL80211", "-DCONFIG_ECC", "-DCONFIG_ERP", "-DCONFIG_FILS", "-DCONFIG_GAS", "-DCONFIG_GAS_SERVER", "-DCONFIG_AIDL", "-DCONFIG_HMAC_SHA256_KDF", "-DCONFIG_HMAC_SHA384_KDF", "-DCONFIG_HMAC_SHA512_KDF", "-DCONFIG_HS20", "-DCONFIG_IEEE80211AC", "-DCONFIG_IEEE80211R", "-DCONFIG_INTERWORKING", "-DCONFIG_IPV6", "-DCONFIG_JSON", "-DCONFIG_MBO", "-DCONFIG_NAN_USD", "-DCONFIG_NO_ACCOUNTING", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RANDOM_POOL", "-DCONFIG_NO_ROAMING", "-DCONFIG_NO_VLAN", "-DCONFIG_OFFCHANNEL", "-DCONFIG_OWE", "-DCONFIG_P2P", "-DCONFIG_PASN", "-DCONFIG_SAE", "-DCONFIG_SAE_PK", "-DCONFIG_SHA256", "-DCONFIG_SHA384", "-DCONFIG_SHA512", "-DCONFIG_SMARTCARD", "-DCONFIG_SME", "-DCONFIG_SUITEB", "-DCONFIG_SUITEB192", "-DCONFIG_TDLS", "-DCONFIG_WEP", "-DCONFIG_WIFI_DISPLAY", "-DCONFIG_WNM", "-DCONFIG_WPA_CLI_HISTORY_DIR=\"/data/vendor/wifi/wpa\"", "-DCONFIG_WPS", "-DCONFIG_WPS_ER", "-DCONFIG_WPS_NFC", "-DCONFIG_WPS_OOB", "-DCONFIG_WPS_UPNP", "-DEAP_AKA", "-DEAP_AKA_PRIME", "-DEAP_GTC", "-DEAP_LEAP", "-DEAP_MD5", "-DEAP_MSCHAPv2", "-DEAP_OTP", "-DEAP_PEAP", "-DCONFIG_PTKSA_CACHE", "-DEAP_PWD", "-DEAP_SERVER", "-DEAP_SERVER_IDENTITY", "-DEAP_SERVER_WSC", "-DEAP_SIM", "-DEAP_TLS", "-DEAP_TLS_OPENSSL", "-DEAP_TTLS", "-DEAP_WSC", "-DIEEE8021X_EAPOL", "-DNEED_AP_MLME", "-DPKCS12_FUNCS", "-DTLS_DEFAULT_CIPHERS=\"DEFAULT:!EXP:!LOW\"", "-DWPA_IGNORE_CONFIG_ERRORS", "-Wall", "-Werror", "-Wno-error=sometimes-uninitialized", "-Wno-incompatible-pointer-types", "-Wno-incompatible-pointer-types-discards-qualifiers", "-Wno-macro-redefined", "-Wno-parentheses-equality", "-Wno-sign-compare", "-Wno-unused-function", "-Wno-unused-parameter", "-Wno-unused-variable", ] + // Devices that include this module should set these soong config vars appropriately. // For example: // $(call soong_config_set, wpa_supplicant, platform_version, $(PLATFORM_VERSION)) // $(call soong_config_set, wpa_supplicant, nl80211_driver, CONFIG_DRIVER_NL80211_QCA) select(soong_config_variable("wpa_supplicant", "platform_version"), { any @ version: ["-DVERSION_STR_POSTFIX=\"-" + version + "\""], default: ["-DVERSION_STR_POSTFIX=\"-Android\""], }) + select(soong_config_variable("wpa_supplicant", "nl80211_driver"), { any @ driver: ["-D" + driver], // Flag is optional, so no default value provided. default: [], }), // Similar to suppressing clang compiler warnings, here we // suppress clang-tidy warnings to reduce noises in Android build.log. tidy_checks: [ "-android-cloexec-*", "-bugprone-branch-clone", "-bugprone-macro-parentheses", "-bugprone-misplaced-widening-cast", "-bugprone-signal-handler", "-bugprone-signed-char-misuse", "-bugprone-sizeof-expression", "-bugprone-suspicious-string-compare", "-bugprone-too-small-loop-variable", "-cert-err34-c", "-cert-msc30-c", "-cert-msc50-cpp", "-cert-msc54-cpp", "-cert-sig30-c", "-cert-str34-c", "-clang-analyzer-core.NullDereference", "-clang-analyzer-core.UndefinedBinaryOperatorResult", "-clang-analyzer-deadcode.DeadStores", "-clang-analyzer-optin.performance.Padding", "-clang-analyzer-optin.portability.UnixAPI", "-clang-analyzer-security.insecureAPI.UncheckedReturn", "-clang-analyzer-unix.cstring.NullArg", "-clang-analyzer-unix.Malloc", "-clang-diagnostic-unused-but-set-variable", "-misc-redundant-expression", ], } // Generated by building wpa_supplicant and printing LOCAL_SRC_FILES. filegroup { name: "wpa_supplicant_srcs", srcs: [ "ap.c", "bss.c", "bssid_ignore.c", "config.c", "config_file.c", "ctrl_iface.c", "ctrl_iface_unix.c", "dpp_supplicant.c", "eap_register.c", "events.c", "gas_query.c", "hs20_supplicant.c", "interworking.c", "main.c", "mbo.c", "nan_usd.c", "notify.c", "offchannel.c", "op_classes.c", "p2p_supplicant.c", "p2p_supplicant_sd.c", "pasn_supplicant.c", "robust_av.c", "rrm.c", "scan.c", "sme.c", "src/ap/acs.c", "src/ap/ap_config.c", "src/ap/ap_drv_ops.c", "src/ap/ap_list.c", "src/ap/comeback_token.c", "src/ap/ap_mlme.c", "src/ap/authsrv.c", "src/ap/beacon.c", "src/ap/bss_load.c", "src/ap/ctrl_iface_ap.c", "src/ap/dfs.c", "src/ap/dpp_hostapd.c", "src/ap/drv_callbacks.c", "src/ap/eap_user_db.c", "src/ap/fils_hlp.c", "src/ap/gas_query_ap.c", "src/ap/gas_serv.c", "src/ap/hostapd.c", "src/ap/hs20.c", "src/ap/hw_features.c", "src/ap/ieee802_11_auth.c", "src/ap/ieee802_11.c", "src/ap/ieee802_11_ht.c", "src/ap/ieee802_11_shared.c", "src/ap/ieee802_11_vht.c", "src/ap/ieee802_1x.c", "src/ap/mbo_ap.c", "src/ap/nan_usd_ap.c", "src/ap/neighbor_db.c", "src/ap/p2p_hostapd.c", "src/ap/pmksa_cache_auth.c", "src/ap/rrm.c", "src/ap/sta_info.c", "src/ap/tkip_countermeasures.c", "src/ap/utils.c", "src/ap/wmm.c", "src/ap/wpa_auth.c", "src/ap/wpa_auth_glue.c", "src/ap/wpa_auth_ie.c", "src/ap/wps_hostapd.c", "src/common/ctrl_iface_common.c", "src/common/dpp_auth.c", "src/common/dpp_backup.c", "src/common/dpp.c", "src/common/dpp_crypto.c", "src/common/dpp_pkex.c", "src/common/dpp_reconfig.c", "src/common/dpp_tcp.c", "src/common/dragonfly.c", "src/common/gas.c", "src/common/gas_server.c", "src/common/hw_features_common.c", "src/common/ieee802_11_common.c", "src/common/nan_de.c", "src/common/sae.c", "src/common/sae_pk.c", "src/common/wpa_common.c", "src/common/ptksa_cache.c", "src/crypto/aes-ctr.c", "src/crypto/aes-encblock.c", "src/crypto/aes-siv.c", "src/crypto/crypto_openssl.c", "src/crypto/dh_groups.c", "src/crypto/fips_prf_openssl.c", "src/crypto/milenage.c", "src/crypto/ms_funcs.c", "src/crypto/sha1-prf.c", "src/crypto/sha1-tlsprf.c", "src/crypto/sha256-kdf.c", "src/crypto/sha256-prf.c", "src/crypto/sha256-tlsprf.c", "src/crypto/sha384-kdf.c", "src/crypto/sha384-prf.c", "src/crypto/sha512-kdf.c", "src/crypto/sha512-prf.c", "src/crypto/tls_openssl.c", "src/crypto/tls_openssl_ocsp.c", "src/drivers/driver_common.c", "src/drivers/driver_nl80211_android.c", "src/drivers/driver_nl80211.c", "src/drivers/driver_nl80211_capa.c", "src/drivers/driver_nl80211_event.c", "src/drivers/driver_nl80211_monitor.c", "src/drivers/driver_nl80211_scan.c", "src/drivers/drivers.c", "src/drivers/linux_ioctl.c", "src/drivers/netlink.c", "src/drivers/rfkill.c", "src/eap_common/chap.c", "src/eap_common/eap_common.c", "src/eap_common/eap_peap_common.c", "src/eap_common/eap_pwd_common.c", "src/eap_common/eap_sim_common.c", "src/eap_common/eap_wsc_common.c", "src/eapol_auth/eapol_auth_sm.c", "src/eapol_supp/eapol_supp_sm.c", "src/eap_peer/eap_aka.c", "src/eap_peer/eap.c", "src/eap_peer/eap_gtc.c", "src/eap_peer/eap_leap.c", "src/eap_peer/eap_md5.c", "src/eap_peer/eap_methods.c", "src/eap_peer/eap_mschapv2.c", "src/eap_peer/eap_otp.c", "src/eap_peer/eap_peap.c", "src/eap_peer/eap_pwd.c", "src/eap_peer/eap_sim.c", "src/eap_peer/eap_tls.c", "src/eap_peer/eap_tls_common.c", "src/eap_peer/eap_ttls.c", "src/eap_peer/eap_wsc.c", "src/eap_peer/mschapv2.c", "src/eap_server/eap_server.c", "src/eap_server/eap_server_identity.c", "src/eap_server/eap_server_methods.c", "src/eap_server/eap_server_wsc.c", "src/l2_packet/l2_packet_linux.c", "src/p2p/p2p_build.c", "src/p2p/p2p.c", "src/p2p/p2p_dev_disc.c", "src/p2p/p2p_go_neg.c", "src/p2p/p2p_group.c", "src/p2p/p2p_invitation.c", "src/p2p/p2p_parse.c", "src/p2p/p2p_pd.c", "src/p2p/p2p_sd.c", "src/p2p/p2p_utils.c", "src/pasn/pasn_initiator.c", "src/pasn/pasn_responder.c", "src/pasn/pasn_common.c", "src/rsn_supp/pmksa_cache.c", "src/rsn_supp/preauth.c", "src/rsn_supp/tdls.c", "src/rsn_supp/wpa.c", "src/rsn_supp/wpa_ft.c", "src/rsn_supp/wpa_ie.c", "src/tls/asn1.c", "src/utils/base64.c", "src/utils/bitfield.c", "src/utils/common.c", "src/utils/config.c", "src/utils/crc32.c", "src/utils/eloop.c", "src/utils/ip_addr.c", "src/utils/json.c", "src/utils/os_unix.c", "src/utils/radiotap.c", "src/utils/uuid.c", "src/utils/wpabuf.c", "src/utils/wpa_debug.c", "src/wps/http_client.c", "src/wps/httpread.c", "src/wps/http_server.c", "src/wps/ndef.c", "src/wps/upnp_xml.c", "src/wps/wps_attr_build.c", "src/wps/wps_attr_parse.c", "src/wps/wps_attr_process.c", "src/wps/wps.c", "src/wps/wps_common.c", "src/wps/wps_dev_attr.c", "src/wps/wps_enrollee.c", "src/wps/wps_er.c", "src/wps/wps_er_ssdp.c", "src/wps/wps_registrar.c", "src/wps/wps_upnp_ap.c", "src/wps/wps_upnp.c", "src/wps/wps_upnp_event.c", "src/wps/wps_upnp_ssdp.c", "src/wps/wps_upnp_web.c", "twt.c", "wifi_display.c", "wmm_ac.c", "wnm_sta.c", "wpas_glue.c", "wpa_supplicant.c", "wps_supplicant.c", ], } // Generated by building wpa_cli and printing LOCAL_SRC_FILES filegroup { name: "wpa_cli_srcs", srcs: [ "src/common/cli.c", "src/common/wpa_ctrl.c", "src/utils/common.c", "src/utils/edit.c", "src/utils/eloop.c", "src/utils/os_unix.c", "src/utils/wpa_debug.c", "wpa_cli.c", ], } // Generated by building libwpa_client and printing LOCAL_SRC_FILES filegroup { name: "libwpa_client_srcs", srcs: [ "src/common/wpa_ctrl.c", "src/utils/os_unix.c", ], } cc_library_headers { name: "libwpa_client_headers", export_include_dirs: [ ".", "wpa_client_include/libwpa_client", ], soc_specific: true, } cc_library { name: "libpasn", vendor: true, cflags: [ "-DANDROID_LOG_NAME=\"libpasn\"", "-DANDROID_P2P", "-DCONFIG_ACS", "-DCONFIG_ANDROID_LOG", "-DCONFIG_AP", "-DCONFIG_BACKEND_FILE", "-DCONFIG_CTRL_IFACE", "-DCONFIG_CTRL_IFACE_CLIENT_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_AIDL", "-DCONFIG_CTRL_IFACE_UNIX", "-DCONFIG_DPP", "-DCONFIG_DPP2", "-DCONFIG_DRIVER_NL80211", "-DCONFIG_ECC", "-DCONFIG_ERP", "-DCONFIG_FILS", "-DCONFIG_GAS", "-DCONFIG_GAS_SERVER", "-DCONFIG_AIDL", "-DCONFIG_HMAC_SHA256_KDF", "-DCONFIG_HMAC_SHA384_KDF", "-DCONFIG_HMAC_SHA512_KDF", "-DCONFIG_HS20", "-DCONFIG_IEEE80211AC", "-DCONFIG_IEEE80211R", "-DCONFIG_INTERWORKING", "-DCONFIG_IPV6", "-DCONFIG_JSON", "-DCONFIG_MBO", "-DCONFIG_NO_ACCOUNTING", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RANDOM_POOL", "-DCONFIG_NO_ROAMING", "-DCONFIG_NO_VLAN", "-DCONFIG_OFFCHANNEL", "-DCONFIG_OWE", "-DCONFIG_P2P", "-DCONFIG_SAE", "-DCONFIG_SAE_PK", "-DCONFIG_SHA256", "-DCONFIG_SHA384", "-DCONFIG_SHA512", "-DCONFIG_SMARTCARD", "-DCONFIG_SME", "-DCONFIG_SUITEB", "-DCONFIG_SUITEB192", "-DCONFIG_TDLS", "-DCONFIG_WEP", "-DCONFIG_WIFI_DISPLAY", "-DCONFIG_WNM", "-DCONFIG_WPA_CLI_HISTORY_DIR=\"/data/vendor/wifi/wpa\"", "-DCONFIG_WPS", "-DCONFIG_WPS_ER", "-DCONFIG_WPS_NFC", "-DCONFIG_WPS_OOB", "-DCONFIG_WPS_UPNP", "-DEAP_AKA", "-DEAP_AKA_PRIME", "-DEAP_GTC", "-DEAP_LEAP", "-DEAP_MD5", "-DEAP_MSCHAPv2", "-DEAP_OTP", "-DEAP_PEAP", "-DCONFIG_PASN", "-DCONFIG_PTKSA_CACHE", "-DEAP_PWD", "-DEAP_SERVER", "-DEAP_SERVER_IDENTITY", "-DEAP_SERVER_WSC", "-DEAP_SIM", "-DEAP_TLS", "-DEAP_TLS_OPENSSL", "-DEAP_TTLS", "-DEAP_WSC", "-DIEEE8021X_EAPOL", "-DNEED_AP_MLME", "-DPKCS12_FUNCS", "-DTLS_DEFAULT_CIPHERS=\"DEFAULT:!EXP:!LOW\"", "-DWPA_IGNORE_CONFIG_ERRORS", "-Wall", "-Werror", "-Wno-error=sometimes-uninitialized", "-Wno-incompatible-pointer-types", "-Wno-incompatible-pointer-types-discards-qualifiers", "-Wno-macro-redefined", "-Wno-parentheses-equality", "-Wno-sign-compare", "-Wno-unused-function", "-Wno-unused-parameter", "-Wno-unused-variable", ], product_variables: { debuggable: { cflags: ["-DLOG_NDEBUG=0"], }, }, local_include_dirs: [ ".", "src", "src/common", "src/drivers", "src/eap_common", "src/eapol_supp", "src/eap_peer", "src/eap_server", "src/l2_packet", "src/radius", "src/rsn_supp", "src/tls", "src/utils", "src/wps", ], srcs: [ "src/utils/eloop.c", "src/utils/wpa_debug.c", "src/utils/wpabuf.c", "src/utils/os_unix.c", "src/utils/config.c", "src/utils/common.c", "src/utils/base64.c", "src/common/sae.c", "src/common/sae_pk.c", "src/common/wpa_common.c", "src/common/ieee802_11_common.c", "src/common/dragonfly.c", "src/common/ptksa_cache.c", "src/rsn_supp/pmksa_cache.c", "src/rsn_supp/wpa_ie.c", "src/ap/comeback_token.c", "src/ap/pmksa_cache_auth.c", "src/eap_common/eap_common.c", "src/eap_common/chap.c", "src/eap_peer/eap.c", "src/eap_peer/eap_methods.c", "src/eapol_supp/eapol_supp_sm.c", "src/crypto/crypto_openssl.c", "src/crypto/tls_openssl.c", "src/crypto/tls_openssl_ocsp.c", "src/crypto/sha256-tlsprf.c", "src/crypto/sha512-prf.c", "src/crypto/sha384-prf.c", "src/crypto/sha256-prf.c", "src/crypto/sha512-kdf.c", "src/crypto/sha384-kdf.c", "src/crypto/sha256-kdf.c", "src/crypto/dh_groups.c", "src/crypto/aes-siv.c", "src/crypto/aes-ctr.c", "src/crypto/sha1-prf.c", "src/crypto/sha1-tlsprf.c", "src/pasn/pasn_initiator.c", "src/pasn/pasn_responder.c", "src/pasn/pasn_common.c", ], shared_libs: [ "libc", "libcutils", "liblog", "libcrypto", "libssl", "libkeystore-engine-wifi-hidl", ], sanitize: { misc_undefined: [ "unsigned-integer-overflow", "signed-integer-overflow", ], cfi: true, }, } // End of cuttlefish section // The section starting below is for non-cuttlefish products. // For cuttlefish series please update the section starting from `wpa_supplicant_headers`. // If you need to add a new build setting based on a product config, ex: // ifeq ($(WIFI_PRIV_CMD_UPDATE_MBO_CELL_STATUS), enabled) // L_CFLAGS += -DENABLE_PRIV_CMD_UPDATE_MBO_CELL_STATUS // endif // In order to export the Makefile variable to soong, you will need to use a `soong_config_set` method // under `build/core/board_config_wpa_supplicant.mk`. Ex: // ifeq ($(WIFI_PRIV_CMD_UPDATE_MBO_CELL_STATUS), enabled) // $(call soong_config_set_bool,wpa_supplicant_8,wifi_priv_cmd_update_mbo_cell_status,true) // endif // And then use the select statement in Android.bp to reflect the condition you need, ex: // select(soong_config_variable("wpa_supplicant_8", "wifi_priv_cmd_update_mbo_cell_status"), { // true: ["-DENABLE_PRIV_CMD_UPDATE_MBO_CELL_STATUS"], // default: [], // }) // Start of non-cuttlefish section cc_defaults { name: "wpa_supplicant_driver_srcs_default", srcs: [ "src/drivers/driver_nl80211.c", "src/drivers/driver_nl80211_android.c", "src/drivers/driver_nl80211_capa.c", "src/drivers/driver_nl80211_event.c", "src/drivers/driver_nl80211_monitor.c", "src/drivers/driver_nl80211_scan.c", "src/drivers/linux_ioctl.c", "src/drivers/netlink.c", "src/drivers/rfkill.c", "src/utils/radiotap.c", ], } cc_defaults { name: "wpa_supplicant_driver_cflags_default", cflags: [ "-DCONFIG_DRIVER_NL80211", // Because the original Android.mk will call hostapd's Android.mk first and it // will make the flag share with wpa_supplicant, keep the original logic in hostapd. ] + select(soong_config_variable("wpa_supplicant_8", "board_wlan_device"), { "bcmdhd": ["-DCONFIG_DRIVER_NL80211_BRCM"], "synadhd": ["-DCONFIG_DRIVER_NL80211_SYNA"], "qcwcn": ["-DCONFIG_DRIVER_NL80211_QCA"], default: ["-DCONFIG_DRIVER_NL80211_QCA"], }), } cc_defaults { name: "wpa_supplicant_includes_default", local_include_dirs: [ ".", "src", "src/common", "src/drivers", "src/eap_common", "src/eap_peer", "src/eap_server", "src/eapol_supp", "src/l2_packet", "src/pasn", "src/radius", "src/rsn_supp", "src/tls", "src/utils", "src/wps", ], include_dirs: [ // There's an if condition for external/libnl but current code base should always have this. "external/libnl/include", "system/security/keystore/include", ], } soong_config_module_type { name: "wpa_supplicant_cc_defaults_type", module_type: "cc_defaults", config_namespace: "wpa_supplicant_8", value_variables: [ "platform_version", ], properties: ["cflags"], } // Hostap related module share the same CFLAGS wpa_supplicant_cc_defaults_type { name: "wpa_supplicant_no_aidl_cflags_default", cflags: [ "-DANDROID_LOG_NAME=\"wpa_supplicant\"", "-DANDROID_P2P", "-DCONFIG_ACS", "-DCONFIG_ANDROID_LOG", "-DCONFIG_AP", "-DCONFIG_BACKEND_FILE", "-DCONFIG_CTRL_IFACE", "-DCONFIG_CTRL_IFACE_CLIENT_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_DIR=\"/data/vendor/wifi/wpa/sockets\"", "-DCONFIG_CTRL_IFACE_UNIX", "-DCONFIG_DPP", "-DCONFIG_DPP2", "-DCONFIG_DRIVER_NL80211", "-DCONFIG_ECC", "-DCONFIG_ERP", "-DCONFIG_FILS", "-DCONFIG_GAS", "-DCONFIG_GAS_SERVER", "-DCONFIG_HMAC_SHA256_KDF", "-DCONFIG_HMAC_SHA384_KDF", "-DCONFIG_HMAC_SHA512_KDF", "-DCONFIG_HS20", "-DCONFIG_IEEE80211AC", "-DCONFIG_IEEE80211R", "-DCONFIG_INTERWORKING", "-DCONFIG_IPV6", "-DCONFIG_JSON", "-DCONFIG_MBO", "-DCONFIG_NO_ACCOUNTING", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RANDOM_POOL", "-DCONFIG_NO_VLAN", "-DCONFIG_OFFCHANNEL", "-DCONFIG_OWE", "-DCONFIG_P2P", "-DCONFIG_PTKSA_CACHE", "-DCONFIG_SAE", "-DCONFIG_SAE_PK", "-DCONFIG_SHA256", "-DCONFIG_SHA384", "-DCONFIG_SHA512", "-DCONFIG_SMARTCARD", "-DCONFIG_SME", "-DCONFIG_SUITEB", "-DCONFIG_SUITEB192", "-DCONFIG_TDLS", "-DCONFIG_WEP", "-DCONFIG_WIFI_DISPLAY", "-DCONFIG_WNM", "-DCONFIG_WPA_CLI_HISTORY_DIR=\"/data/vendor/wifi/wpa\"", "-DCONFIG_WPS", "-DCONFIG_WPS_ER", "-DCONFIG_WPS_NFC", "-DCONFIG_WPS_OOB", "-DCONFIG_WPS_UPNP", "-DCRYPTO_RSA_OAEP_SHA256", "-DEAP_AKA", "-DEAP_AKA_PRIME", "-DEAP_GTC", "-DEAP_LEAP", "-DEAP_MD5", "-DEAP_MSCHAPv2", "-DEAP_OTP", "-DEAP_PEAP", "-DEAP_PWD", "-DEAP_SERVER", "-DEAP_SERVER_IDENTITY", "-DEAP_SERVER_WSC", "-DEAP_SIM", "-DEAP_TLS", "-DEAP_TLSV1_3", "-DEAP_TLS_OPENSSL", "-DEAP_TTLS", "-DEAP_WSC", "-DIEEE8021X_EAPOL", "-DNEED_AP_MLME", "-DPKCS12_FUNCS", "-DTLS_DEFAULT_CIPHERS=\"DEFAULT:!EXP:!LOW\"", "-DWPA_IGNORE_CONFIG_ERRORS", "-Wall", "-Werror", "-Wno-error=sometimes-uninitialized", "-Wno-incompatible-pointer-types", "-Wno-incompatible-pointer-types-discards-qualifiers", "-Wno-macro-redefined", "-Wno-parentheses-equality", "-Wno-sign-compare", "-Wno-unused-function", "-Wno-unused-parameter", "-Wno-unused-variable", ] + select(soong_config_variable("wpa_supplicant_8", "wpa_supplicant_use_stub_lib"), { true: ["-DANDROID_LIB_STUB"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "board_wpa_supplicant_private_lib_event"), { true: ["-DANDROID_LIB_EVENT"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "wifi_priv_cmd_update_mbo_cell_status"), { true: ["-DENABLE_PRIV_CMD_UPDATE_MBO_CELL_STATUS"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "wifi_brcm_open_source_multi_akm"), { true: ["-DWIFI_BRCM_OPEN_SOURCE_MULTI_AKM"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "wpa_supplicant_11ax"), { true: ["-DCONFIG_IEEE80211AX"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "wpa_supplicant_11be"), { true: ["-DCONFIG_IEEE80211BE"], default: [], }) + select(soong_config_variable("wpa_supplicant", "roaming"), { true: [], default: ["-DCONFIG_NO_ROAMING"], }) + select(soong_config_variable("wpa_supplicant", "pasn"), { false: [], default: ["-DCONFIG_PASN"], }) + select(soong_config_variable("wpa_supplicant", "bgscan_simple"), { true: [ "-DCONFIG_BGSCAN", "-DCONFIG_BGSCAN_SIMPLE", ], default: [], }), arch: { arm: { cflags: [ "-mabi=aapcs-linux", ], }, }, defaults: [ "wpa_supplicant_driver_cflags_default", ], soong_config_variables: { platform_version: { cflags: ["-DVERSION_STR_POSTFIX=\"-%s\""], }, }, } cc_defaults { name: "wpa_supplicant_cflags_default", cflags: [ "-DCONFIG_AIDL", "-DCONFIG_CTRL_IFACE_AIDL", ], defaults: [ "wpa_supplicant_no_aidl_cflags_default", ], } wpa_supplicant_cc_defaults_type { name: "wpa_supplicant_mainline_cflags_default", cflags: [ "-DANDROID_LIB_STUB", "-DANDROID_LOG_NAME=\"mainline_supplicant\"", "-DCONFIG_ANDROID_LOG", "-DCONFIG_BACKEND_FILE", "-DCONFIG_CTRL_IFACE", "-DCONFIG_CTRL_IFACE_UNIX", "-DCONFIG_DRIVER_NL80211", "-DCONFIG_NO_ACCOUNTING", "-DCONFIG_NO_CONFIG_BLOBS", "-DCONFIG_NO_CONFIG_WRITE", "-DCONFIG_NO_RADIUS", "-DCONFIG_NO_RANDOM_POOL", "-DCONFIG_NO_ROAMING", "-DCONFIG_NO_ROBUST_AV", "-DCONFIG_NO_RRM", "-DCONFIG_NO_SCAN_PROCESSING", "-DCONFIG_NO_TKIP", "-DCONFIG_NO_VLAN", "-DCONFIG_NO_WMM_AC", "-DCONFIG_NO_WPA", "-DCONFIG_NO_WPA_PASSPHRASE", "-DCONFIG_OFFCHANNEL", "-DMAINLINE_SUPPLICANT", "-DOPENSSL_NO_ENGINE", "-DWPA_IGNORE_CONFIG_ERRORS", "-Wall", "-Werror", "-Wno-error=sometimes-uninitialized", "-Wno-incompatible-pointer-types", "-Wno-incompatible-pointer-types-discards-qualifiers", "-Wno-macro-redefined", "-Wno-parentheses-equality", "-Wno-sign-compare", "-Wno-unused-function", "-Wno-unused-parameter", "-Wno-unused-variable", ], } cc_defaults { name: "wpa_supplicant_srcs_default", srcs: [ "ap.c", "bss.c", "bssid_ignore.c", "config.c", "config_file.c", "ctrl_iface.c", "ctrl_iface_unix.c", "dpp_supplicant.c", "eap_register.c", "events.c", "gas_query.c", "hs20_supplicant.c", "interworking.c", "main.c", "mbo.c", "notify.c", "offchannel.c", "op_classes.c", "p2p_supplicant.c", "p2p_supplicant_sd.c", "robust_av.c", "rrm.c", "scan.c", "sme.c", "twt.c", "wifi_display.c", "wmm_ac.c", "wnm_sta.c", "wpa_supplicant.c", "wpas_glue.c", "wps_supplicant.c", "src/ap/acs.c", "src/ap/ap_config.c", "src/ap/ap_drv_ops.c", "src/ap/ap_list.c", "src/ap/ap_mlme.c", "src/ap/authsrv.c", "src/ap/beacon.c", "src/ap/bss_load.c", "src/ap/comeback_token.c", "src/ap/ctrl_iface_ap.c", "src/ap/dfs.c", "src/ap/dpp_hostapd.c", "src/ap/drv_callbacks.c", "src/ap/eap_user_db.c", "src/ap/fils_hlp.c", "src/ap/gas_query_ap.c", "src/ap/gas_serv.c", "src/ap/hostapd.c", "src/ap/hs20.c", "src/ap/hw_features.c", "src/ap/ieee802_11.c", "src/ap/ieee802_11_auth.c", "src/ap/ieee802_11_ht.c", "src/ap/ieee802_11_shared.c", "src/ap/ieee802_11_vht.c", "src/ap/ieee802_1x.c", "src/ap/mbo_ap.c", "src/ap/neighbor_db.c", "src/ap/p2p_hostapd.c", "src/ap/pmksa_cache_auth.c", "src/ap/rrm.c", "src/ap/sta_info.c", "src/ap/tkip_countermeasures.c", "src/ap/utils.c", "src/ap/wmm.c", "src/ap/wpa_auth.c", "src/ap/wpa_auth_glue.c", "src/ap/wpa_auth_ie.c", "src/ap/wps_hostapd.c", "src/common/ctrl_iface_common.c", "src/common/dpp.c", "src/common/dpp_auth.c", "src/common/dpp_backup.c", "src/common/dpp_crypto.c", "src/common/dpp_pkex.c", "src/common/dpp_reconfig.c", "src/common/dpp_tcp.c", "src/common/dragonfly.c", "src/common/gas.c", "src/common/gas_server.c", "src/common/hw_features_common.c", "src/common/ieee802_11_common.c", "src/common/ptksa_cache.c", "src/common/sae.c", "src/common/sae_pk.c", "src/common/wpa_common.c", "src/crypto/aes-ctr.c", "src/crypto/aes-siv.c", "src/crypto/crypto_openssl.c", "src/crypto/dh_groups.c", "src/crypto/fips_prf_openssl.c", "src/crypto/ms_funcs.c", "src/crypto/sha1-prf.c", "src/crypto/sha1-tlsprf.c", "src/crypto/sha256-kdf.c", "src/crypto/sha256-prf.c", "src/crypto/sha256-tlsprf.c", "src/crypto/sha384-kdf.c", "src/crypto/sha384-prf.c", "src/crypto/sha512-kdf.c", "src/crypto/sha512-prf.c", "src/crypto/tls_openssl.c", "src/crypto/tls_openssl_ocsp.c", "src/drivers/driver_common.c", "src/drivers/driver_nl80211.c", "src/drivers/driver_nl80211_android.c", "src/drivers/driver_nl80211_capa.c", "src/drivers/driver_nl80211_event.c", "src/drivers/driver_nl80211_monitor.c", "src/drivers/driver_nl80211_scan.c", "src/drivers/drivers.c", "src/drivers/linux_ioctl.c", "src/drivers/netlink.c", "src/drivers/rfkill.c", "src/eap_common/chap.c", "src/eap_common/eap_common.c", "src/eap_common/eap_peap_common.c", "src/eap_common/eap_pwd_common.c", "src/eap_common/eap_sim_common.c", "src/eap_common/eap_wsc_common.c", "src/eap_peer/eap.c", "src/eap_peer/eap_aka.c", "src/eap_peer/eap_gtc.c", "src/eap_peer/eap_leap.c", "src/eap_peer/eap_md5.c", "src/eap_peer/eap_methods.c", "src/eap_peer/eap_mschapv2.c", "src/eap_peer/eap_otp.c", "src/eap_peer/eap_peap.c", "src/eap_peer/eap_pwd.c", "src/eap_peer/eap_sim.c", "src/eap_peer/eap_tls.c", "src/eap_peer/eap_tls_common.c", "src/eap_peer/eap_ttls.c", "src/eap_peer/eap_wsc.c", "src/eap_peer/mschapv2.c", "src/eap_server/eap_server.c", "src/eap_server/eap_server_identity.c", "src/eap_server/eap_server_methods.c", "src/eap_server/eap_server_wsc.c", "src/eapol_auth/eapol_auth_sm.c", "src/eapol_supp/eapol_supp_sm.c", "src/l2_packet/l2_packet_linux.c", "src/p2p/p2p.c", "src/p2p/p2p_build.c", "src/p2p/p2p_dev_disc.c", "src/p2p/p2p_go_neg.c", "src/p2p/p2p_group.c", "src/p2p/p2p_invitation.c", "src/p2p/p2p_parse.c", "src/p2p/p2p_pd.c", "src/p2p/p2p_sd.c", "src/p2p/p2p_utils.c", "src/rsn_supp/pmksa_cache.c", "src/rsn_supp/preauth.c", "src/rsn_supp/tdls.c", "src/rsn_supp/wpa.c", "src/rsn_supp/wpa_ft.c", "src/rsn_supp/wpa_ie.c", "src/tls/asn1.c", "src/utils/base64.c", "src/utils/bitfield.c", "src/utils/common.c", "src/utils/config.c", "src/utils/crc32.c", "src/utils/eloop.c", "src/utils/ip_addr.c", "src/utils/json.c", "src/utils/os_unix.c", "src/utils/radiotap.c", "src/utils/uuid.c", "src/utils/wpa_debug.c", "src/utils/wpabuf.c", "src/wps/http_client.c", "src/wps/http_server.c", "src/wps/httpread.c", "src/wps/ndef.c", "src/wps/upnp_xml.c", "src/wps/wps.c", "src/wps/wps_attr_build.c", "src/wps/wps_attr_parse.c", "src/wps/wps_attr_process.c", "src/wps/wps_common.c", "src/wps/wps_dev_attr.c", "src/wps/wps_enrollee.c", "src/wps/wps_er.c", "src/wps/wps_er_ssdp.c", "src/wps/wps_registrar.c", "src/wps/wps_upnp.c", "src/wps/wps_upnp_ap.c", "src/wps/wps_upnp_event.c", "src/wps/wps_upnp_ssdp.c", "src/wps/wps_upnp_web.c", ] + select(soong_config_variable("wpa_supplicant_8", "wpa_supplicant_11ax"), { true: ["src/ap/ieee802_11_he.c"], default: [], }) + select(soong_config_variable("wpa_supplicant_8", "wpa_supplicant_11be"), { true: ["src/ap/ieee802_11_eht.c"], default: [], }) + select(soong_config_variable("wpa_supplicant", "bgscan_simple"), { true: [ "bgscan.c", "bgscan_simple.c", ], default: [], }) + select(soong_config_variable("wpa_supplicant", "pasn"), { false: [], default: [ "pasn_supplicant.c", "src/pasn/pasn_initiator.c", "src/pasn/pasn_responder.c", "src/pasn/pasn_common.c", ], }), defaults: [ "wpa_supplicant_driver_srcs_default", ], } cc_defaults { name: "wpa_supplicant_mainline_srcs_default", srcs: [ "bss.c", "bssid_ignore.c", "config.c", "config_file.c", "ctrl_iface.c", "ctrl_iface_unix.c", "eap_register.c", "events.c", "main.c", "notify.c", "offchannel.c", "op_classes.c", "rrm.c", "scan.c", "wpa_supplicant.c", "wpas_glue.c", "src/common/ctrl_iface_common.c", "src/common/hw_features_common.c", "src/common/ieee802_11_common.c", "src/common/ptksa_cache.c", "src/common/wpa_common.c", "src/crypto/crypto_openssl.c", "src/crypto/tls_none.c", "src/drivers/driver_common.c", "src/drivers/driver_nl80211.c", "src/drivers/driver_nl80211_android.c", "src/drivers/driver_nl80211_capa.c", "src/drivers/driver_nl80211_event.c", "src/drivers/driver_nl80211_monitor.c", "src/drivers/driver_nl80211_scan.c", "src/drivers/drivers.c", "src/drivers/linux_ioctl.c", "src/drivers/netlink.c", "src/drivers/rfkill.c", "src/l2_packet/l2_packet_linux.c", "src/rsn_supp/pmksa_cache.c", "src/utils/base64.c", "src/utils/bitfield.c", "src/utils/common.c", "src/utils/config.c", "src/utils/crc32.c", "src/utils/eloop.c", "src/utils/ip_addr.c", "src/utils/os_unix.c", "src/utils/radiotap.c", "src/utils/wpa_debug.c", "src/utils/wpabuf.c", ], defaults: [ "wpa_supplicant_driver_srcs_default", ], } cc_defaults { name: "wpa_supplicant_usd_defaults", cflags: [ "-DCONFIG_NAN_USD", ], srcs: [ "nan_usd.c", "src/ap/nan_usd_ap.c", "src/common/nan_de.c", ], } cc_binary { name: "wpa_cli", proprietary: true, srcs: [ "wpa_cli.c", "src/common/cli.c", "src/common/wpa_ctrl.c", "src/utils/common.c", "src/utils/edit.c", "src/utils/eloop.c", "src/utils/os_unix.c", "src/utils/wpa_debug.c", ], shared_libs: [ "libcutils", "liblog", ], defaults: [ "wpa_supplicant_cflags_default", "wpa_supplicant_includes_default", ], } soong_config_module_type { name: "wpa_supplicant_cc_binary", module_type: "cc_binary", config_namespace: "wpa_supplicant_8", value_variables: [ "board_wpa_supplicant_private_lib", ], bool_variables: [ "wifi_hidl_unified_supplicant_service_rc_entry", ], properties: [ "init_rc", "static_libs", ], } wpa_supplicant_cc_binary { name: "wpa_supplicant", proprietary: true, relative_install_path: "hw", // vintf_fragments: wpa_supplicant only // vintf_fragments: ["aidl/android.hardware.wifi.supplicant.xml"], required: [ "android.hardware.wifi.supplicant.xml", ], // wpa_supplicant only static_libs: [ "libwpa_aidl", ], shared_libs: [ // Share between wpa_supplicant and wpa_supplicant_macsec "libc", "libcrypto", "libcutils", "libkeystore-engine-wifi-hidl", "liblog", "libnl", "libssl", ] + [ // wpa_supplicant only "android.hardware.wifi.supplicant-V4-ndk", "android.system.keystore2-V1-ndk", "libbase", "libbinder_ndk", "libutils", ], defaults: [ "wpa_supplicant_srcs_default", "wpa_supplicant_cflags_default", "wpa_supplicant_includes_default", "wpa_supplicant_usd_defaults", ], soong_config_variables: { board_wpa_supplicant_private_lib: { static_libs: ["%s"], }, // init_rc: wpa_supplicant only wifi_hidl_unified_supplicant_service_rc_entry: { init_rc: ["aidl/vendor/android.hardware.wifi.supplicant-service.rc"], }, }, } wpa_supplicant_cc_binary { name: "wpa_supplicant_macsec", proprietary: true, relative_install_path: "hw", srcs: [ // wpa_supplicant_macsec only ":wpa_supplicant_macsec_extra_driver_srcs", "wpas_kay.c", "src/ap/wpa_auth_kay.c", "src/pae/ieee802_1x_cp.c", "src/pae/ieee802_1x_kay.c", "src/pae/ieee802_1x_key.c", "src/pae/ieee802_1x_secy_ops.c", "src/pae/aidl/aidl_psk.cpp", ], shared_libs: [ // Share between wpa_supplicant and wpa_supplicant_macsec "libc", "libcrypto", "libcutils", "libkeystore-engine-wifi-hidl", "liblog", "libnl", "libssl", ] + [ // wpa_supplicant_macsec only "android.hardware.macsec-V1-ndk", "libbinder_ndk", ], cflags: [ "-DCONFIG_AIDL_MACSEC_PSK_METHODS", "-DCONFIG_DRIVER_MACSEC_LINUX", "-DCONFIG_MACSEC", ], local_include_dirs: [ // wpa_supplicant_macsec only "aidl", ], defaults: [ "wpa_supplicant_srcs_default", "wpa_supplicant_includes_default", "wpa_supplicant_no_aidl_cflags_default", ], soong_config_variables: { board_wpa_supplicant_private_lib: { static_libs: ["%s"], }, }, } wpa_supplicant_cc_binary { name: "wpa_supplicant_mainline", shared_libs: [ "android.system.wifi.mainline_supplicant-ndk", "libbase", "libbinder_ndk", "libc", "libcrypto", "libcutils_sockets", "liblog", "libnl", "libssl", ], static_libs: [ "mainline_supplicant_aidl_bp", ], defaults: [ "wpa_supplicant_mainline_srcs_default", "wpa_supplicant_includes_default", "wpa_supplicant_mainline_cflags_default", "wpa_supplicant_usd_defaults", ], apex_available: [ "//apex_available:platform", "com.android.wifi", ], min_sdk_version: "30", } cc_library_shared { name: "libwpa_client", proprietary: true, srcs: [ "src/common/wpa_ctrl.c", "src/utils/os_unix.c", ], shared_libs: [ "libc", "libcutils", "liblog", ], defaults: [ "wpa_supplicant_cflags_default", "wpa_supplicant_includes_default", ], } cc_fuzz { name: "mainline_supplicant_service_fuzzer", team: "trendy_team_fwk_wifi_hal", srcs: [ "aidl/mainline/fuzzers/mainline_supplicant_service_fuzzer.cpp", ], defaults: [ "fuzzer_disable_leaks", "service_fuzzer_defaults", "wpa_supplicant_includes_default", "wpa_supplicant_mainline_cflags_default", "wpa_supplicant_mainline_srcs_default", "wpa_supplicant_usd_defaults", ], shared_libs: [ "android.system.wifi.mainline_supplicant-ndk", "libbase", "libbinder_ndk", "libc", "libcrypto", "libcutils_sockets", "liblog", "libnl", "libssl", ], static_libs: [ "mainline_supplicant_aidl_bp", ], cflags: [ "-DSUPPLICANT_SERVICE_FUZZER", ], fuzz_config: { triage_assignee: "android-wifi-team@google.com", }, proto: { type: "lite", static: true, }, } //## Aidl service library ### //####################### cc_library_static { name: "libwpa_aidl", vendor: true, cppflags: [ "-DCONFIG_NAN_USD", "-Wall", "-Werror", "-Wno-unused-parameter", "-Wno-unused-private-field", "-Wno-unused-variable", ], srcs: [ "aidl/vendor/aidl.cpp", "aidl/vendor/aidl_manager.cpp", "aidl/vendor/certificate_utils.cpp", "aidl/vendor/iface_config_utils.cpp", "aidl/vendor/p2p_iface.cpp", "aidl/vendor/p2p_network.cpp", "aidl/vendor/sta_iface.cpp", "aidl/vendor/sta_network.cpp", "aidl/vendor/supplicant.cpp", ], shared_libs: [ "android.hardware.wifi.supplicant-V4-ndk", "android.system.keystore2-V1-ndk", "libbinder_ndk", "libbase", "libutils", "liblog", "libssl", ], export_include_dirs: ["aidl"], defaults: [ "wpa_supplicant_cflags_default", "wpa_supplicant_includes_default", ], } // End of non-cuttlefish section genrule { name: "com.android.hardware.wpa_supplicant.rc-gen", srcs: ["aidl/vendor/android.hardware.wifi.supplicant-service.rc"], out: ["com.android.hardware.wpa_supplicant.rc"], cmd: "sed -E 's@/vendor/bin@/apex/com.android.hardware.wpa_supplicant/bin@' $(in) > $(out)", } prebuilt_etc { name: "com.android.hardware.wpa_supplicant.rc", src: ":com.android.hardware.wpa_supplicant.rc-gen", installable: false, }