// Copyright (C) 2020 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.

soong_namespace {
}

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "//device/google/gs201:device_google_gs201_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: [
        "//device/google/gs201:device_google_gs201_license",
    ],
}

cc_prebuilt_library_shared {
    name: "android.hardware.gnss@2.1-impl-google",
    arch: {
        arm64: {
            srcs: ["bin/android.hardware.gnss@2.1-impl-google.so"],
            shared_libs: [
                "liblog",
                "libhidlbase",
                // "libhidltransport",
                "libutils",
                "android.hardware.gnss@1.0",
                "android.hardware.gnss@1.1",
                "android.hardware.gnss@2.0",
                "android.hardware.gnss@2.1",
                "android.hardware.gnss.measurement_corrections@1.0",
                "android.hardware.gnss.visibility_control@1.0",
                "android.hardware.gnss-V1-ndk",
                "libhardware",
                "libc++",
                "libc",
                "libm",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    // Bypass because libhidltransport is deprecated
    check_elf_files: false,
}

cc_prebuilt_binary {
    name: "android.hardware.gnss@2.1-service-brcm",
    arch: {
        arm64: {
            srcs: ["bin/android.hardware.gnss@2.1-service-brcm"],
            shared_libs: [
                "liblog",
                "libutils",
                "libhardware",
                "android.hardware.gnss@1.0",
                "libhidlbase",
                // "libhidltransport",
                // "libhwbinder",
                "android.hardware.gnss@1.1",
                "android.hardware.gnss@2.0",
                "android.hardware.gnss@2.1",
                "libc++",
                "libc",
                "libm",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    // Bypass because libhidltransport is deprecated
    // Bypass because libhwbinder is deprecated
    check_elf_files: false,
    vintf_fragments: ["android.hardware.gnss@2.1-service-brcm.xml"]
}

cc_prebuilt_library_shared {
    name: "flp.default",
    arch: {
        arm64: {
            srcs: ["bin/flp.default.so"],
            shared_libs: [
                "liblog",
                "libcutils",
                "libutils",
                "libc++",
                "libc",
                "libm",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    // Bypass because soname mismatch
    check_elf_files: false,
}

cc_prebuilt_binary {
    name: "gpsd",
    arch: {
        arm64: {
            srcs: ["bin/gpsd"],
            shared_libs: [
                "liblog",
                "libutils",
                "libhardware_legacy",
                "libcutils",
                "libssl",
                "libcrypto",
                // "libsitril-gps",
                "android.frameworks.sensorservice@1.0",
                "libhidlbase",
                "libandroid_net",
                "libc++",
                "libc",
                "libm",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    // Bypass because libsitril-gps is Android.mk module
    check_elf_files: false,
}

cc_prebuilt_library_shared {
    name: "gps.default",
    arch: {
        arm64: {
            srcs: ["bin/gps.default.so"],
            shared_libs: [
                "liblog",
                "libcutils",
                "libutils",
                "libc++",
                "libc",
                "libm",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
    // Bypass because soname mismatch
    check_elf_files: false,
}

cc_prebuilt_binary {
    name: "lhd",
    arch: {
        arm64: {
            srcs: ["bin/lhd"],
            shared_libs: [
                "liblog",
                "libutils",
                "libhardware_legacy",
                "libc++",
                "libc",
                "libm",
                "libz",
                "android.hardware.contexthub@1.0",
                "libhidlbase",
                "libdl",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
}

cc_prebuilt_binary {
    name: "scd",
    arch: {
        arm64: {
            srcs: ["bin/scd"],
            shared_libs: [
	        "liblog",
                "libutils",
                "libssl",
                "libcrypto",
                "libandroid_net",
            ],
        },
    },
    compile_multilib: "64",
    vendor: true,
    relative_install_path: "hw",
    strip: {
        none: true,
    },
}
