// 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"],
}

// ==============
// incidentd_test
// ==============

cc_test {
    name: "incidentd_test",
    test_suites: ["device-tests"],

    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: [
        "tests/**/*.cpp",
        "tests/**/*.proto",
        "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",
    ],

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

    static_libs: [
        "libgmock",
        "libincidentcompanion",
        "libplatformprotos-test",
    ],
    shared_libs: [
        "libbase",
        "libbinder",
        "libdebuggerd_client",
        "libdumputils",
        "libincidentpriv",
        "liblog",
        "libprotobuf-cpp-full",
        "libprotoutil",
        "libservices",
        "libutils",
    ],

    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)",
}
