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

package {
    default_applicable_licenses: ["system_libhwbinder_license"],
}

// Added automatically by a large-scale-change
// http://go/android-license-faq
license {
    name: "system_libhwbinder_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_library_headers {
    name: "libhwbinder_headers",
    export_include_dirs: ["include"],
    host_supported: true,
    recovery_available: true,
    vendor_available: true,
    product_available: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,
    apex_available: [
        "//apex_available:platform",
        "//apex_available:anyapex",
    ],
    min_sdk_version: "29",
}

cc_defaults {
    name: "libhwbinder_defaults",

    header_libs: ["libhwbinder_headers"],
    export_header_lib_headers: ["libhwbinder_headers"],

    sanitize: {
        misc_undefined: ["integer"],
    },
    srcs: [
        "Binder.cpp",
        "BpHwBinder.cpp",
        "BufferedTextOutput.cpp",
        "Debug.cpp",
        "IInterface.cpp",
        "IPCThreadState.cpp",
        "Parcel.cpp",
        "ProcessState.cpp",
        "Static.cpp",
        "TextOutput.cpp",
        "Utils.cpp",
    ],

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

    cflags: [
        "-Wall",
        "-Werror",
    ],
}

cc_defaults {
    name: "libhwbinder-impl-shared-libs",
    shared_libs: [
        "libbase",
        "liblog",
        "libcutils",
        "libutils",
    ],
    export_shared_lib_headers: [
        "libbase",
        "libutils",
    ],
}

// WARNING: this should no longer be used
// This is automatically removed by bpfix. Once there are no makefiles, fixes can be automatically applied, and this can be removed.
cc_library {
    name: "libhwbinder",
    vendor_available: true,

    export_include_dirs: ["include"],

    visibility: [
        ":__subpackages__",
        "//vendor:__subpackages__",
    ],
}

// Combined into libhidlbase for efficiency.
// Used as shared library to provide headers for libhidltransport-impl-internal.
cc_library_static {
    name: "libhwbinder-impl-internal",
    include_dirs: [
        // TODO(b/31559095): get headers from bionic on host
        "bionic/libc/kernel/android/uapi/",
        "bionic/libc/kernel/uapi/",
    ],

    defaults: [
        "libhwbinder_defaults",
        "libhwbinder-impl-shared-libs",
        "hwbinder_pgo",
        "hwbinder_lto",
    ],
    host_supported: true,
    recovery_available: true,
    vendor_available: true,
    product_available: true,
    // TODO(b/153609531): remove when no longer needed.
    native_bridge_supported: true,
    apex_available: [
        "//apex_available:platform",
        "com.android.neuralnetworks",
        "com.android.bluetooth.updatable",
        "com.android.media",
        "com.android.media.swcodec",
        "com.android.tethering",
    ],
    min_sdk_version: "29",
}

// Only libhwbinder_benchmark needs to have pgo enabled. When all places
// support having PGO selectively enabled, all places can use libhwbinder.
//
// http://b/77320844
cc_library_static {
    name: "libhwbinder_pgo-impl-internal",
    defaults: [
        "libhwbinder_defaults",
        "libhwbinder-impl-shared-libs",
        "hwbinder_benchmark_pgo",
        "hwbinder_lto",
    ],
}

// Provide pgo property to build hwbinder with PGO
cc_defaults {
    name: "hwbinder_pgo",
    pgo: {
        instrumentation: true,
        profile_file: "hwbinder/hwbinder.profdata",
        benchmarks: ["hwbinder"],
        enable_profile_use: true,
    },
}

cc_defaults {
    name: "hwbinder_benchmark_pgo",
    pgo: {
        instrumentation: true,
        profile_file: "hwbinder/hwbinder.profdata",
        benchmarks: ["hwbinder_benchmark"],
        enable_profile_use: true,
    },
}

// Provide lto property to build hwbinder with LTO
cc_defaults {
    name: "hwbinder_lto",
    target: {
        android: {
            lto: {
                thin: true,
            },
        },
    },
}
