// Copyright (C) 2016 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"],
}

ndk_headers {
    name: "libAAudio_headers",
    from: "include",
    to: "",
    // omit AAudioTesting.h; supplied separately to those who need it
    srcs: ["include/aaudio/AAudio.h"],
    license: "include/aaudio/NOTICE",
}

ndk_library {
    name: "libaaudio",
    // deliberately includes symbols from AAudioTesting.h
    symbol_file: "src/libaaudio.map.txt",
    first_version: "26",
    unversioned_until: "current",
    export_header_libs: [
        "libAAudio_headers",
    ],
}

cc_library_headers {
    name: "libaaudio_headers",
    export_include_dirs: ["include"],
    export_shared_lib_headers: ["aaudio-aidl-cpp"],
    shared_libs: ["aaudio-aidl-cpp"],
}
