// 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,
                diag: {
                    cfi: true,
                    integer_overflow: true,
                    memtag_heap: true,
                    undefined: true,
                    misc_undefined: [
                        "bounds",
                        "all",
                    ],
                },
            },
            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",
        "packagemanager_aidl-cpp",
        "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_shared_lib_headers: [
        "libinputflinger_base",
    ],
}

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

cc_library_headers {
    name: "libinputflinger_headers",
    host_supported: true,
    export_include_dirs: [
        "include",
        ".",
    ],
    header_libs: [
        "libchrome-gestures_headers",
    ],
    export_header_lib_headers: [
        "libchrome-gestures_headers",
    ],
}

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