// 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.

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.hardware.wifi.offload@1.0",
        "libbinder",
        "libbase",
        "libcutils",
        "libhidlbase",
        "libhidltransport",
        "libkeystore_aidl",
        "libkeystore_binder",
        "libkeystore_parcelables",
        "libminijail",
        "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",
        "logging_utils.cpp",
        "scanning/channel_settings.cpp",
        "scanning/hidden_network.cpp",
        "scanning/offload_scan_callback_interface_impl.cpp",
        "scanning/pno_network.cpp",
        "scanning/pno_settings.cpp",
        "scanning/radio_chain_info.cpp",
        "scanning/scan_result.cpp",
        "scanning/offload/scan_stats.cpp",
        "scanning/single_scan_settings.cpp",
        "scanning/scan_utils.cpp",
        "scanning/scanner_impl.cpp",
        "scanning/offload/offload_scan_manager.cpp",
        "scanning/offload/offload_callback.cpp",
        "scanning/offload/offload_service_utils.cpp",
        "scanning/offload/offload_scan_utils.cpp",
        "server.cpp",
    ],

    shared_libs: [
        "android.hardware.wifi.offload@1.0",
        "libbase",
        "libutils",
        "libhidlbase",
        "libhidltransport",
        "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",
        "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/IApInterface.aidl",
        "aidl/android/net/wifi/IApInterfaceEventCallback.aidl",
        "aidl/android/net/wifi/IClientInterface.aidl",
        "aidl/android/net/wifi/IInterfaceEventCallback.aidl",
        "aidl/android/net/wifi/IPnoScanEvent.aidl",
        "aidl/android/net/wifi/IScanEvent.aidl",
        "aidl/android/net/wifi/ISendMgmtFrameEvent.aidl",
        "aidl/android/net/wifi/IWificond.aidl",
        "aidl/android/net/wifi/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_offload.cpp",
        "tests/mock_offload_callback_handlers.cpp",
        "tests/mock_offload_scan_callback_interface.cpp",
        "tests/mock_offload_scan_callback_interface_impl.cpp",
        "tests/mock_offload_scan_manager.cpp",
        "tests/mock_offload_service_utils.cpp",
        "tests/mock_scan_utils.cpp",
        "tests/netlink_manager_unittest.cpp",
        "tests/netlink_utils_unittest.cpp",
        "tests/nl80211_attribute_unittest.cpp",
        "tests/nl80211_packet_unittest.cpp",
        "tests/offload_callback_test.cpp",
        "tests/offload_hal_test_constants.cpp",
        "tests/offload_scan_manager_test.cpp",
        "tests/offload_scan_utils_test.cpp",
        "tests/offload_test_utils.cpp",
        "tests/scanner_unittest.cpp",
        "tests/scan_result_unittest.cpp",
        "tests/scan_settings_unittest.cpp",
        "tests/scan_stats_unittest.cpp",
        "tests/scan_utils_unittest.cpp",
        "tests/server_unittest.cpp",
    ],

    static_libs: [
        "libgmock",
        "libgtest",
        "libwifi-system-iface-test",
        "libwificond",
        "libwificond_nl",
    ],
    shared_libs: [
        "android.hardware.wifi.offload@1.0",
        "libbase",
        "libbinder",
        "libcutils",
        "libhidltransport",
        "libhidlbase",
        "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",
    ],
}
