/*
 * Copyright (C) 2022 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: ["Android-Apache-2.0"],
}

cc_defaults {
    name: "remote-access-hal-defaults",
    vendor: true,
    relative_install_path: "hw",
    srcs: [
        "src/RemoteAccessImpl.cpp",
    ],
    whole_static_libs: [
        "RemoteAccessService",
    ],
    static_libs: [
        "BindToDeviceSocketMutatorLib",
    ],
    shared_libs: [
        "libbinder_ndk",
        "libutils",
        "libprotobuf-cpp-full",
    ],
    defaults: [
        "vhalclient_defaults",
        "BindToDeviceSocketMutatorDefaults",
    ],
    cflags: [
        // This is already included in BindToDeviceSocketMutatorDefaults but
        // might be overridden by vhalclient_defaults.
        "-Wno-unused-parameter",
    ],
}

cc_binary {
    name: "android.hardware.automotive.remoteaccess@V2-default-service",
    defaults: ["remote-access-hal-defaults"],
    vintf_fragments: ["remoteaccess-default-service.xml"],
    init_rc: ["remoteaccess-default-service.rc"],
}

cc_binary {
    name: "android.hardware.automotive.remoteaccess@V2-tcu-test-service",
    defaults: ["remote-access-hal-defaults"],
    vintf_fragments: ["remoteaccess-default-service.xml"],
    init_rc: ["remoteaccess-tcu-test-service.rc"],
}

cc_library {
    name: "RemoteAccessService",
    vendor_available: true,
    local_include_dirs: ["include"],
    export_include_dirs: ["include"],
    srcs: [
        "src/RemoteAccessService.cpp",
    ],
    whole_static_libs: [
        "android.hardware.automotive.remoteaccess-V2-ndk",
        "wakeup_client_protos",
        "libvhalclient",
    ],
    defaults: [
        "vhalclient_defaults",
    ],
    shared_libs: [
        "libbase",
        "libbinder_ndk",
        "libcutils",
        "liblog",
        "libutils",
        "libgrpc++",
        "libprotobuf-cpp-full",
    ],
    cflags: [
        "-Wno-unused-parameter",
    ],
}

cc_fuzz {
    name: "android.hardware.automotive.remoteaccess@V2-default-service.aidl_fuzzer",
    srcs: ["fuzzer/fuzzer.cpp"],
    whole_static_libs: [
        "RemoteAccessService",
    ],
    static_libs: [
        "libgtest",
        "libgmock",
    ],
    shared_libs: [
        "libbase",
        "libbinder_ndk",
        "liblog",
        "libutils",
        "libgrpc++",
        "libprotobuf-cpp-full",
    ],
    defaults: [
        "vhalclient_defaults",
        "service_fuzzer_defaults",
    ],
    cflags: [
        "-Wno-unused-parameter",
        "-DGRPC_SERVICE_ADDRESS=\"localhost:50051\"",
    ],
    fuzz_config: {
        cc: [
            "shanyu@google.com",
        ],
    },
}
