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

// =========
// incidentd
// =========

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

cc_binary {
    name: "incidentd",

    srcs: [
        "src/**/*.cpp",
        "src/**/*.proto",
        ":incidentd_section_list",
    ],

    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-missing-field-initializers",
        "-Wno-unused-variable",
        "-Wunused-parameter",
        "-Wno-tautological-undefined-compare",

        // Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed.
        "-Wno-error=implicit-fallthrough",

        // optimize for size (protobuf glop can get big)
        "-Os",
        //"-g",
        //"-O0",
    ],

    local_include_dirs: ["src"],
    generated_headers: ["framework-cppstream-protos"],

    proto: {
        type: "lite",
    },

    shared_libs: [
        "libbase",
        "libbinder",
        "libdebuggerd_client",
        "libdumputils",
        "libincidentpriv",
        "liblog",
        "libprotoutil",
        "libservices",
        "libutils",
        "libprotobuf-cpp-lite",
    ],

    static_libs: [
        "libincidentcompanion",
        "libplatformprotos",
    ],

    product_variables: {
        debuggable: {
            cflags: ["-DALLOW_RESTRICTED_SECTIONS=1"],
        },
    },

    init_rc: ["incidentd.rc"],
}

cc_defaults {
    name: "incidentd_test_defaults",

    cflags: [
        "-Werror",
        "-Wall",
        "-Wno-unused-variable",
        "-Wunused-parameter",
        "-g",
        "-Wno-tautological-undefined-compare",

        // Allow implicit fallthrough in IncidentService.cpp:85 until it is fixed.
        "-Wno-error=implicit-fallthrough",
    ],

    local_include_dirs: ["src"],
    generated_headers: ["framework-cppstream-protos"],

    srcs: [
        "src/FdBuffer.cpp",
        "src/Privacy.cpp",
        "src/PrivacyFilter.cpp",
        "src/Reporter.cpp",
        "src/Section.cpp",
        "src/Throttler.cpp",
        "src/WorkDirectory.cpp",
        "src/incidentd_util.cpp",
        "src/proto_util.cpp",
        "src/report_directory.cpp",
        "src/**/*.proto",
    ],

    static_libs: [
        "libincidentcompanion",
        "libplatformprotos-test",
    ],

    shared_libs: [
        "libbase",
        "libbinder",
        "libdebuggerd_client",
        "libdumputils",
        "libincidentpriv",
        "liblog",
        "libprotobuf-cpp-full",
        "libprotoutil",
        "libservices",
        "libutils",
    ],
}

// ==============
// incidentd_test
// ==============
cc_test {
    name: "incidentd_test",

    defaults: [
        "incidentd_test_defaults",
    ],

    test_suites: ["device-tests"],

    srcs: [
        "tests/**/*.cpp",
        "tests/**/*.proto",
    ],

    data: ["testdata/**/*"],

    static_libs: [
        "libgmock",
    ],

    target: {
        android: {
            proto: {
                type: "full",
            },
        },
    },
}

genrule {
    name: "incidentd_section_list",
    tools: ["incident-section-gen"],
    out: ["section_list.cpp"],
    cmd: "$(location incident-section-gen) incidentd > $(out)",
}

cc_fuzz {
    name: "incidentd_service_fuzzer",
    defaults: [
        "service_fuzzer_defaults",
        "fuzzer_disable_leaks",
        "incidentd_test_defaults",
    ],

    fuzz_config: {
        cc: [
            "yaochen@google.com",
            "yanmin@google.com",
        ],
        triage_assignee: "waghpawan@google.com",
    },

    srcs: [
        "fuzzers/IncidentServiceFuzzer.cpp",
        "src/IncidentService.cpp",
        "src/Broadcaster.cpp",
        ":incidentd_section_list",
    ],
}
