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

cc_library {
    name: "libbinder",

    // for vndbinder
    vendor_available: true,

    srcs: [
        "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",
        "MemoryBase.cpp",
        "MemoryDealer.cpp",
        "MemoryHeapBase.cpp",
        "Parcel.cpp",
        "PermissionCache.cpp",
        "PersistableBundle.cpp",
        "ProcessInfoService.cpp",
        "ProcessState.cpp",
        "Static.cpp",
        "Status.cpp",
        "TextOutput.cpp",
        "IpPrefix.cpp",
        "Value.cpp",
    ],

    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
    ],
    product_variables: {
        binder32bit: {
            cflags: ["-DBINDER_IPC_32BIT=1"],
        },
    },

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

    export_include_dirs: [
        "include",
    ],

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

subdirs = ["tests"]
