// 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 {
    default_team: "trendy_team_input_framework",
    // 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",
        "InputFilterCallbacks.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",
        "libstatspull",
        "libstatssocket",
        "server_configurable_flags",
    ],
    static_libs: [
        "libattestation",
        "libperfetto_client_experimental",
        "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",
            ],
        },
    },
}

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