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

// Default flags to be used throughout all libraries in inputflinger.
package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_native_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_native_license"],
}

inputflinger_tidy_checks = [
    "android-*",
]

cc_defaults {
    name: "inputflinger_defaults",
    cpp_std: "c++20",
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wthread-safety",
        "-Wshadow",
        "-Wshadow-field-in-constructor-modified",
        "-Wshadow-uncaptured-local",
        "-DANDROID_UTILS_REF_BASE_DISABLE_IMPLICIT_CONSTRUCTION",
    ],
    sanitize: {
        misc_undefined: [
            "bounds",
        ],
    },
    tidy: true,
    tidy_checks: [
        "-*", // Disable all checks not explicitly enabled for now
    ] + inputflinger_tidy_checks,
    tidy_checks_as_errors: inputflinger_tidy_checks,
}

/////////////////////////////////////////////////
// libinputflinger
/////////////////////////////////////////////////

filegroup {
    name: "libinputflinger_sources",
    srcs: [
        "InputCommonConverter.cpp",
        "InputProcessor.cpp",
        "PreferStylusOverTouchBlocker.cpp",
        "UnwantedInteractionBlocker.cpp",
    ],
}

cc_defaults {
    name: "libinputflinger_defaults",
    srcs: [":libinputflinger_sources"],
    shared_libs: [
        "android.hardware.input.processor-V1-ndk",
        "libbase",
        "libbinder",
        "libbinder_ndk",
        "libchrome",
        "libcrypto",
        "libcutils",
        "libhidlbase",
        "libkll",
        "liblog",
        "libprotobuf-cpp-lite",
        "libstatslog",
        "libutils",
        "server_configurable_flags",
    ],
    static_libs: [
        "libattestation",
        "libpalmrejection",
        "libui-types",
    ],
    target: {
        android: {
            shared_libs: [
                "libgui",
                "libinput",
                "libstatspull",
                "libstatssocket",
            ],
        },
        host: {
            static_libs: [
                "libinput",
                "libstatspull",
                "libstatssocket",
            ],
        },
    },
}

cc_library_shared {
    name: "libinputflinger",
    defaults: [
        "inputflinger_defaults",
        "libinputflinger_defaults",
    ],
    srcs: [
        "InputManager.cpp",
        // other sources are added via "defaults"
    ],
    cflags: [
        // TODO(b/23084678): Move inputflinger to its own process and mark it hidden
        //-fvisibility=hidden
    ],
    shared_libs: [
        // This should consist only of dependencies from inputflinger. Other dependencies should be
        // in cc_defaults so that they are included in the tests.
        "libinputflinger_base",
        "libinputreader",
        "libinputreporter",
    ],
    static_libs: [
        "libinputdispatcher",
    ],
    export_static_lib_headers: [
        "libinputdispatcher",
    ],
    export_include_dirs: [
        ".",
        "include",
    ],
}

/////////////////////////////////////////////////
// libinputflinger_base
/////////////////////////////////////////////////

cc_library_headers {
    name: "libinputflinger_headers",
    host_supported: true,
    export_include_dirs: ["include"],
}

filegroup {
    name: "libinputflinger_base_sources",
    srcs: [
        "InputListener.cpp",
        "InputReaderBase.cpp",
        "InputThread.cpp",
        "NotifyArgs.cpp",
        "VibrationElement.cpp",
    ],
}

cc_defaults {
    name: "libinputflinger_base_defaults",
    srcs: [":libinputflinger_base_sources"],
    shared_libs: [
        "libbase",
        "libbinder",
        "libcutils",
        "liblog",
        "libutils",
    ],
    header_libs: [
        "libinputflinger_headers",
    ],
    target: {
        android: {
            shared_libs: [
                "libinput",
            ],
        },
        host: {
            static_libs: [
                "libinput",
                "libui-types",
            ],
        },
    },
}

cc_library_shared {
    name: "libinputflinger_base",
    host_supported: true,
    defaults: [
        "inputflinger_defaults",
        "libinputflinger_base_defaults",
    ],
    export_header_lib_headers: [
        "libinputflinger_headers",
    ],
}

// This target will build everything 'input-related'. This could be useful for
// large refactorings of the input code. This is similar to 'm checkbuild', but
// just for input code.
// Use 'm checkinput' to build, and then (optionally) use 'm installclean' to
// remove any of the installed artifacts that you may not want on your actual
// build.
phony {
    name: "checkinput",
    required: [
        // native targets
        "libgui_test",
        "libinput",
        "libinputflinger",
        "inputflinger_tests",
        "inputflinger_benchmarks",
        "libinput_tests",
        "libpalmrejection_test",
        "libandroid_runtime",
        "libinputservice_test",
        "Bug-115739809",
        "StructLayout_test",
        // currently unused, but still must build correctly
        "inputflinger",
        "libinputflingerhost",

        // native fuzzers
        "inputflinger_latencytracker_fuzzer",
        "inputflinger_cursor_input_fuzzer",
        "inputflinger_keyboard_input_fuzzer",
        "inputflinger_multitouch_input_fuzzer",
        "inputflinger_switch_input_fuzzer",
        "inputflinger_input_reader_fuzzer",
        "inputflinger_blocking_queue_fuzzer",
        "inputflinger_input_classifier_fuzzer",

        // Java/Kotlin targets
        "CtsWindowManagerDeviceTestCases",
        "InputTests",
        "CtsHardwareTestCases",
        "CtsInputTestCases",
        "CtsViewTestCases",
        "CtsWidgetTestCases",
        "FrameworksCoreTests",
        "FrameworksServicesTests",
        "CtsSecurityTestCases",
        "CtsSecurityBulletinHostTestCases",
    ],
}
