// 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,
    header_libs: [
        "libbase_headers",
        "libcutils_headers",
        "libutils_headers",
    ],
    export_header_lib_headers: [
        "libbase_headers",
        "libcutils_headers",
        "libutils_headers",
    ],
}

cc_library_shared {
    name: "libbinder",

    // for vndbinder
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    double_loadable: true,

    // 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.
    no_apex: true,

    srcs: [
        "ActivityManager.cpp",
        "AppOpsManager.cpp",
        "Binder.cpp",
        "BpBinder.cpp",
        "BufferedTextOutput.cpp",
        "Debug.cpp",
        "IActivityManager.cpp",
        "IAppOpsCallback.cpp",
        "IAppOpsService.cpp",
        "IBatteryStats.cpp",
        "IInterface.cpp",
        "IMediaResourceMonitor.cpp",
        "IMemory.cpp",
        "IPCThreadState.cpp",
        "IPermissionController.cpp",
        "IProcessInfoService.cpp",
        "IResultReceiver.cpp",
        "IServiceManager.cpp",
        "IShellCallback.cpp",
        "IUidObserver.cpp",
        "MemoryBase.cpp",
        "MemoryDealer.cpp",
        "MemoryHeapBase.cpp",
        "Parcel.cpp",
        "ParcelFileDescriptor.cpp",
        "PermissionCache.cpp",
        "PermissionController.cpp",
        "PersistableBundle.cpp",
        "ProcessInfoService.cpp",
        "ProcessState.cpp",
        "Static.cpp",
        "Stability.cpp",
        "Status.cpp",
        "TextOutput.cpp",
        "IpPrefix.cpp",
        ":libbinder_aidl",
    ],

    target: {
        vendor: {
            exclude_srcs: [
                "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",
            ],
        },
    },

    aidl: {
        export_aidl_headers: true,
    },

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

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

    header_libs: [
        "libbinder_headers",
    ],

    export_header_lib_headers: [
        "libbinder_headers",
    ],

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

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