// 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.

cc_defaults {
    name: "inputflinger_defaults",
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wthread-safety",
    ],
}

cc_library_shared {
    name: "libinputflinger",
    defaults: ["inputflinger_defaults"],

    srcs: [
        "InputClassifier.cpp",
        "InputClassifierConverter.cpp",
        "InputDispatcher.cpp",
        "InputManager.cpp",
    ],

    shared_libs: [
        "android.hardware.input.classifier@1.0",
        "libbase",
        "libinputflinger_base",
        "libinputreporter",
        "libinputreader",
        "libbinder",
        "libcutils",
        "libhidlbase",
        "libinput",
        "liblog",
        "libutils",
        "libui",
        "server_configurable_flags",
    ],

    cflags: [
        // TODO(b/23084678): Move inputflinger to its own process and mark it hidden
        //-fvisibility=hidden
    ],

    export_include_dirs: [
        ".",
        "include",
    ],

}

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

cc_library_shared {
    name: "libinputreader",
    defaults: ["inputflinger_defaults"],

    srcs: [
        "EventHub.cpp",
        "InputReader.cpp",
        "InputReaderFactory.cpp",
        "TouchVideoDevice.cpp",
    ],

    shared_libs: [
        "libbase",
        "libinputflinger_base",
        "libcrypto",
        "libcutils",
        "libinput",
        "liblog",
        "libui",
        "libutils",
        "libhardware_legacy",
        "libstatslog",
    ],

    header_libs: [
        "libinputflinger_headers",
    ],

    export_header_lib_headers: [
        "libinputflinger_headers",
    ],
}

cc_library_shared {
    name: "libinputflinger_base",
    defaults: ["inputflinger_defaults"],

    srcs: [
        "InputListener.cpp",
        "InputReaderBase.cpp",
    ],

    shared_libs: [
        "libbase",
        "libinput",
        "liblog",
        "libutils",
    ],

    header_libs: [
        "libinputflinger_headers",
    ],

    export_header_lib_headers: [
        "libinputflinger_headers",
    ],
}

cc_library_shared {
    name: "libinputreporter",
    defaults: ["inputflinger_defaults"],

    srcs: [
        "InputReporter.cpp",
    ],

    shared_libs: [
        "liblog",
        "libutils",
    ],

    header_libs: [
        "libinputflinger_headers",
    ],

    export_header_lib_headers: [
        "libinputflinger_headers",
    ],
}

subdirs = [
    "host",
    "tests",
]
