// 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",
    host_supported: true,
    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,
    target: {
        host: {
            sanitize: {
                address: true,
            },
            include_dirs: [
                "bionic/libc/kernel/android/uapi/",
                "bionic/libc/kernel/uapi",
            ],
            cflags: [
                "-D__ANDROID_HOST__",
            ],
        },
    },
}

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

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

cc_defaults {
    name: "libinputflinger_defaults",
    srcs: [":libinputflinger_sources"],
    shared_libs: [
        "android.hardware.input.processor-V1-ndk",
        "com.android.server.inputflinger-ndk",
        "libbase",
        "libbinder",
        "libbinder_ndk",
        "libchrome",
        "libcrypto",
        "libcutils",
        "libhidlbase",
        "libinput",
        "libkll",
        "liblog",
        "libprotobuf-cpp-lite",
        "libstatslog",
        "libutils",
        "server_configurable_flags",
    ],
    static_libs: [
        "libattestation",
        "libpalmrejection",
        "libui-types",
    ],
    generated_headers: [
        "cxx-bridge-header",
        "inputflinger_rs_bootstrap_bridge_header",
    ],
    header_libs: ["inputflinger_rs_bootstrap_cxx_headers"],
    generated_sources: ["inputflinger_rs_bootstrap_bridge_code"],
    whole_static_libs: ["libinputflinger_rs"],
    export_shared_lib_headers: ["com.android.server.inputflinger-ndk"],
    target: {
        android: {
            shared_libs: [
                "libgui",
                "libstatspull",
                "libstatssocket",
            ],
        },
        host: {
            static_libs: [
                "libstatspull",
                "libstatssocket",
            ],
        },
    },
}

cc_library_shared {
    name: "libinputflinger",
    host_supported: true,
    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",
        "libPlatformProperties",
    ],
    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: [
        "InputDeviceMetricsSource.cpp",
        "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",
        "libinput",
        "liblog",
        "libstatslog",
        "libutils",
    ],
    header_libs: [
        "libinputflinger_headers",
    ],
}

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",
        "libinputreader_static",
        "libinputflinger",
        "inputflinger_tests",
        "inputflinger_benchmarks",
        "libinput_tests",
        "libpalmrejection_test",
        "libandroid_runtime",
        "libinputservice_test",
        "Bug-115739809",
        "StructLayout_test",

        // jni
        "libservices.core",

        // rust targets
        "libinput_rust_test",

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

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