// Copyright (C) 2019 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 {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_av_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_av_license"],
}

tidy_errors = [
    // https://clang.llvm.org/extra/clang-tidy/checks/list.html
    // For many categories, the checks are too many to specify individually.
    // Feel free to disable as needed - as warnings are generally ignored,
    // we treat warnings as errors.
    "android-*",
    "bugprone-*",
    "cert-*",
    "clang-analyzer-security*",
    "google-*",
    "misc-*",
    //"modernize-*",  // explicitly list the modernize as they can be subjective.
    "modernize-avoid-bind",
    //"modernize-avoid-c-arrays", // std::array<> can be verbose
    "modernize-concat-nested-namespaces",
    //"modernize-deprecated-headers", // C headers still ok even if there is C++ equivalent.
    "modernize-deprecated-ios-base-aliases",
    "modernize-loop-convert",
    "modernize-make-shared",
    "modernize-make-unique",
    "modernize-pass-by-value",
    "modernize-raw-string-literal",
    "modernize-redundant-void-arg",
    "modernize-replace-auto-ptr",
    "modernize-replace-random-shuffle",
    "modernize-return-braced-init-list",
    "modernize-shrink-to-fit",
    "modernize-unary-static-assert",
    "modernize-use-auto",
    "modernize-use-bool-literals",
    "modernize-use-default-member-init",
    "modernize-use-emplace",
    "modernize-use-equals-default",
    "modernize-use-equals-delete",
    "modernize-use-nodiscard",
    "modernize-use-noexcept",
    "modernize-use-nullptr",
    "modernize-use-override",
    // "modernize-use-trailing-return-type", // not necessarily more readable
    "modernize-use-transparent-functors",
    "modernize-use-uncaught-exceptions",
    "modernize-use-using",
    "performance-*",

    // Remove some pedantic stylistic requirements.
    "-android-cloexec-dup", // found in AAudioServiceEndpointMMAP.cpp
    "-bugprone-narrowing-conversions", // found in several interface from size_t to int32_t

    "-google-readability-casting", // C++ casts not always necessary and may be verbose
    "-google-readability-todo", // do not require TODO(info)
    "-google-build-using-namespace", // Reenable and fix later.
    "-google-global-names-in-headers", // found in several files

    "-misc-non-private-member-variables-in-classes", // found in aidl generated files

]

cc_defaults {
    name: "libaaudioservice_dependencies",

    shared_libs: [
        "libaaudio_internal",
        "libaudioclient",
        "libaudioutils",
        "libmedia_helper",
        "libmediametrics",
        "libmediautils",
        "libbase",
        "libbinder",
        "libcutils",
        "liblog",
        "libutils",
        "aaudio-aidl-cpp",
        "framework-permission-aidl-cpp",
        "libaudioclient_aidl_conversion",
        "packagemanager_aidl-cpp",
    ],

    static_libs: [
        "libaudioflinger",
    ]
}

cc_library_static {

    name: "libaaudioservice",

    defaults: [
        "libaaudioservice_dependencies",
        "latest_android_media_audio_common_types_cpp_shared",
    ],

    srcs: [
        "AAudioClientTracker.cpp",
        "AAudioCommandQueue.cpp",
        "AAudioEndpointManager.cpp",
        "AAudioMixer.cpp",
        "AAudioService.cpp",
        "AAudioServiceEndpoint.cpp",
        "AAudioServiceEndpointCapture.cpp",
        "AAudioServiceEndpointMMAP.cpp",
        "AAudioServiceEndpointPlay.cpp",
        "AAudioServiceEndpointShared.cpp",
        "AAudioServiceStreamBase.cpp",
        "AAudioServiceStreamMMAP.cpp",
        "AAudioServiceStreamShared.cpp",
        "AAudioStreamTracker.cpp",
        "AAudioThread.cpp",
        "SharedMemoryProxy.cpp",
        "SharedMemoryWrapper.cpp",
        "SharedRingBuffer.cpp",
        "TimestampScheduler.cpp",
    ],

    cflags: [
        "-Wthread-safety",
        "-Wno-unused-parameter",
        "-Wall",
        "-Werror",
    ],

    export_shared_lib_headers: [
        "libaaudio_internal",
        "framework-permission-aidl-cpp",
    ],

    header_libs: [
        "libaudiohal_headers",
    ],

    include_dirs: [
        "frameworks/av/media/libnbaio/include_mono",
        "frameworks/av/media/libnbaio/include",
    ],

    tidy: true,
    tidy_checks: tidy_errors,
    tidy_checks_as_errors: tidy_errors,
    tidy_flags: [
        "-format-style=file",
    ]
}
