// Copyright (C) 2009 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_library_headers {
    name: "libbinder_headers",
    export_include_dirs: ["include"],
    vendor_available: true,
    host_supported: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,

    header_libs: [
        "libbase_headers",
        "libcutils_headers",
        "libutils_headers",
    ],
    export_header_lib_headers: [
        "libbase_headers",
        "libcutils_headers",
        "libutils_headers",
    ],
    min_sdk_version: "29",
}

// These interfaces are android-specific implementation unrelated to binder
// transport itself and should be moved to AIDL or in domain-specific libs.
//
// Currently, these are only on system android (not vendor, not host)
libbinder_device_interface_sources = [
    "ActivityManager.cpp",
    "AppOpsManager.cpp",
    "IActivityManager.cpp",
    "IAppOpsCallback.cpp",
    "IAppOpsService.cpp",
    "IBatteryStats.cpp",
    "IMediaResourceMonitor.cpp",
    "IPermissionController.cpp",
    "IProcessInfoService.cpp",
    "IUidObserver.cpp",
    "PermissionCache.cpp",
    "PermissionController.cpp",
    "ProcessInfoService.cpp",
    "IpPrefix.cpp",
]

cc_library {
    name: "libbinder",

    // for vndbinder
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    double_loadable: true,
    host_supported: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,

    // TODO(b/31559095): get headers from bionic on host
    include_dirs: [
        "bionic/libc/kernel/android/uapi/",
        "bionic/libc/kernel/uapi/",
    ],

    // libbinder does not offer a stable wire protocol.
    // if a second copy of it is installed, then it may break after security
    // or dessert updates. Instead, apex users should use libbinder_ndk.
    apex_available: [
        "//apex_available:platform",
        // TODO(b/166468760) remove these three
        "com.android.media.swcodec",
        "test_com.android.media.swcodec",
    ],

    srcs: [
        "Binder.cpp",
        "BpBinder.cpp",
        "BufferedTextOutput.cpp",
        "Debug.cpp",
        "IInterface.cpp",
        "IMemory.cpp",
        "IPCThreadState.cpp",
        "IResultReceiver.cpp",
        "IServiceManager.cpp",
        "IShellCallback.cpp",
        "LazyServiceRegistrar.cpp",
        "MemoryBase.cpp",
        "MemoryDealer.cpp",
        "MemoryHeapBase.cpp",
        "Parcel.cpp",
        "ParcelableHolder.cpp",
        "ParcelFileDescriptor.cpp",
        "PersistableBundle.cpp",
        "ProcessState.cpp",
        "Static.cpp",
        "Stability.cpp",
        "Status.cpp",
        "TextOutput.cpp",
        ":libbinder_aidl",
    ],

    target: {
        android: {
            srcs: libbinder_device_interface_sources,

            // NOT static to keep the wire protocol unfrozen
            static: {
                enabled: false,
            },
        },
        vendor: {
            exclude_srcs: libbinder_device_interface_sources,
        },
    },

    aidl: {
        export_aidl_headers: true,
    },

    // TODO(b/142684679): for com.android.media which is compiled
    // as vendor and used as system code.
    use_apex_name_macro: true,

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-Wzero-as-null-pointer-constant",
    ],
    product_variables: {
        binder32bit: {
            cflags: ["-DBINDER_IPC_32BIT=1"],
        },
    },

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

    header_libs: [
        "libbinder_headers",
    ],

    export_header_lib_headers: [
        "libbinder_headers",
    ],

    clang: true,
    sanitize: {
        misc_undefined: ["integer"],
    },
    min_sdk_version: "29",
}

// AIDL interface between libbinder and framework.jar
filegroup {
    name: "libbinder_aidl",
    srcs: [
        "aidl/android/content/pm/IPackageChangeObserver.aidl",
        "aidl/android/content/pm/IPackageManagerNative.aidl",
        "aidl/android/content/pm/PackageChangeEvent.aidl",
        "aidl/android/os/IClientCallback.aidl",
        "aidl/android/os/IServiceCallback.aidl",
        "aidl/android/os/IServiceManager.aidl",
    ],
    path: "aidl",
}

aidl_interface {
    name: "libbinder_aidl_test_stub",
    unstable: true,
    local_include_dir: "aidl",
    srcs: [":libbinder_aidl"],
    vendor_available: true,
    backend: {
        java: {
            enabled: false,
        },
    },
}
