// Copyright (C) 2016 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.

package {
    default_applicable_licenses: ["system_connectivity_wificond_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'filegroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
// http://go/android-license-faq
license {
    name: "system_connectivity_wificond_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-ISC",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_defaults {
    name: "wificond_defaults",

    cppflags: [
        "-Wall",
        "-Werror",
        "-Wno-unused-parameter",
    ],
    include_dirs: ["system/connectivity"],
}

//
// wificond daemon.
//
cc_binary {
    name: "wificond",
    defaults: ["wificond_defaults"],
    init_rc: ["wificond.rc"],
    srcs: [
	"main.cpp",
	"wifi_keystore_hal_connector.cpp"
    ],
    include_dirs: ["system/security/keystore/include"],

    shared_libs: [
        "android.system.keystore2-V1-ndk_platform",
        "libbinder",
        "libbinder_ndk",
        "libbase",
        "libcrypto",
        "libcutils",
        "libhidlbase",
        "libminijail",
        "libssl",
        "libutils",
        "libwifi-system-iface",
        "android.system.wifi.keystore@1.0",
    ],
    static_libs: [
        "libwificond", // Wificond daemon
        "libwifikeystorehal"  // Wifi Keystore HAL service
    ],
}

//
// wificond static library
//
cc_library_static {
    name: "libwificond",
    defaults: ["wificond_defaults"],
    srcs: [
        "ap_interface_binder.cpp",
        "ap_interface_impl.cpp",
        "client_interface_binder.cpp",
        "client_interface_impl.cpp",
        "device_wiphy_capabilities.cpp",
        "logging_utils.cpp",
        "client/native_wifi_client.cpp",
        "scanning/channel_settings.cpp",
        "scanning/hidden_network.cpp",
        "scanning/pno_network.cpp",
        "scanning/pno_settings.cpp",
        "scanning/radio_chain_info.cpp",
        "scanning/scan_result.cpp",
        "scanning/single_scan_settings.cpp",
        "scanning/scan_utils.cpp",
        "scanning/scanner_impl.cpp",
        "server.cpp",
    ],

    shared_libs: [
        "libbase",
        "libutils",
        "libwifi-system-iface",
    ],
    whole_static_libs: [
        "libwificond_ipc",
        "libwificond_nl",
        "libwificond_event_loop",
    ],
}

//
// wificond netlink library
//
cc_library_static {
    name: "libwificond_nl",
    defaults: ["wificond_defaults"],
    srcs: [
        "net/mlme_event.cpp",
        "net/netlink_manager.cpp",
        "net/netlink_utils.cpp",
        "net/nl80211_attribute.cpp",
        "net/nl80211_packet.cpp",
    ],
    shared_libs: ["libbase"],

}

//
// wificond event loop library
//
cc_library_static {
    name: "libwificond_event_loop",
    defaults: ["wificond_defaults"],
    srcs: ["looper_backed_event_loop.cpp"],
    whole_static_libs: [
        "liblog",
        "libbase",
        "libutils",
    ],

}

//
// wificond IPC interface library
//
cc_library_static {
    name: "libwificond_ipc",
    defaults: ["wificond_defaults"],
    aidl: {
        local_include_dirs: ["aidl"],
        export_aidl_headers: true,
    },
    srcs: [
        "ipc_constants.cpp",
        ":libwificond_ipc_aidl",
        "client/native_wifi_client.cpp",
        "device_wiphy_capabilities.cpp",
        "scanning/channel_settings.cpp",
        "scanning/hidden_network.cpp",
        "scanning/pno_network.cpp",
        "scanning/pno_settings.cpp",
        "scanning/radio_chain_info.cpp",
        "scanning/scan_result.cpp",
        "scanning/single_scan_settings.cpp",
    ],
    shared_libs: ["libbinder"],
}

filegroup {
    name: "libwificond_ipc_aidl",
    srcs: [
        "aidl/android/net/wifi/nl80211/IApInterface.aidl",
        "aidl/android/net/wifi/nl80211/IApInterfaceEventCallback.aidl",
        "aidl/android/net/wifi/nl80211/IClientInterface.aidl",
        "aidl/android/net/wifi/nl80211/IInterfaceEventCallback.aidl",
        "aidl/android/net/wifi/nl80211/IPnoScanEvent.aidl",
        "aidl/android/net/wifi/nl80211/IScanEvent.aidl",
        "aidl/android/net/wifi/nl80211/ISendMgmtFrameEvent.aidl",
        "aidl/android/net/wifi/nl80211/IWificond.aidl",
        "aidl/android/net/wifi/nl80211/IWifiScannerImpl.aidl",
    ],
    path: "aidl",
}

//
// test util library
//
cc_library_static {
    name: "libwificond_test_utils",
    defaults: ["wificond_defaults"],
    srcs: [
        "tests/integration/process_utils.cpp",
        "tests/shell_utils.cpp",
    ],
    shared_libs: ["libbase"],

    whole_static_libs: [
        "libwificond_ipc",
        "libwificond_event_loop",
    ],
}

//
// wificond unit tests.
//
cc_test {
    name: "wificond_unit_test",
    defaults: ["wificond_defaults"],
    test_suites: ["device-tests"],
    srcs: [
        "tests/ap_interface_impl_unittest.cpp",
        "tests/client_interface_impl_unittest.cpp",
        "tests/looper_backed_event_loop_unittest.cpp",
        "tests/main.cpp",
        "tests/mock_client_interface_impl.cpp",
        "tests/mock_netlink_manager.cpp",
        "tests/mock_netlink_utils.cpp",
        "tests/mock_scan_utils.cpp",
        "tests/native_wifi_client_unittest.cpp",
        "tests/netlink_manager_unittest.cpp",
        "tests/netlink_utils_unittest.cpp",
        "tests/nl80211_attribute_unittest.cpp",
        "tests/nl80211_packet_unittest.cpp",
        "tests/scanner_unittest.cpp",
        "tests/scan_result_unittest.cpp",
        "tests/scan_settings_unittest.cpp",
        "tests/scan_utils_unittest.cpp",
        "tests/server_unittest.cpp",
    ],

    static_libs: [
        "libgmock",
        "libgtest",
        "libwifi-system-iface-test",
        "libwificond",
        "libwificond_nl",
    ],
    shared_libs: [
        "libbase",
        "libbinder",
        "libcutils",
        "liblog",
        "libutils",
        "libwifi-system-iface",
    ],
}

//
// wificond device integration tests.
//
cc_test {
    name: "wificond_integration_test",
    defaults: ["wificond_defaults"],
    srcs: [
        "tests/integration/ap_interface_test.cpp",
        "tests/integration/client_interface_test.cpp",
        "tests/integration/life_cycle_test.cpp",
        "tests/integration/scanner_test.cpp",
        "tests/main.cpp",
        "tests/shell_unittest.cpp",
    ],
    shared_libs: [
        "libbase",
        "libbinder",
        "libcutils",
        "libutils",
        "libwifi-system-iface",
    ],
    static_libs: [
        "libgmock",
        "libwificond_ipc",
        "libwificond_test_utils",
    ],
}
