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

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

cc_binary {
    name: "android.hardware.gnss-service.example",
    relative_install_path: "hw",
    installable: false, // install APEX instead
    vendor: true,
    cflags: [
        "-Wall",
        "-Wextra",
    ],
    shared_libs: [
        "libbase",
        "libcutils",
        "libbinder_ndk",
        "libhidlbase",
        "libutils",
        "liblog",
        "android.hardware.gnss@2.1",
        "android.hardware.gnss@2.0",
        "android.hardware.gnss@1.0",
        "android.hardware.gnss.measurement_corrections@1.1",
        "android.hardware.gnss.measurement_corrections@1.0",
        "android.hardware.gnss.visibility_control@1.0",
        "android.hardware.gnss-V4-ndk",
    ],
    srcs: [
        "AGnssRil.cpp",
        "AGnss.cpp",
        "Gnss.cpp",
        "GnssAntennaInfo.cpp",
        "GnssBatching.cpp",
        "GnssDebug.cpp",
        "GnssGeofence.cpp",
        "GnssNavigationMessageInterface.cpp",
        "GnssPowerIndication.cpp",
        "GnssPsds.cpp",
        "GnssConfiguration.cpp",
        "GnssMeasurementInterface.cpp",
        "GnssVisibilityControl.cpp",
        "MeasurementCorrectionsInterface.cpp",
        "service.cpp",
    ],
    static_libs: [
        "android.hardware.gnss@common-default-lib",
    ],
}

prebuilt_etc {
    name: "gnss-default.rc",
    src: "gnss-default.rc",
    installable: false,
}

prebuilt_etc {
    name: "gnss-default.xml",
    src: "gnss-default.xml",
    sub_dir: "vintf",
    installable: false,
}

apex {
    name: "com.android.hardware.gnss",
    manifest: "apex_manifest.json",
    file_contexts: "apex_file_contexts",
    key: "com.android.hardware.key",
    certificate: ":com.android.hardware.certificate",
    updatable: false,
    vendor: true,

    binaries: [
        "android.hardware.gnss-service.example",
    ],
    prebuilts: [
        "gnss-default.rc",
        "gnss-default.xml",
        "android.hardware.location.gps.prebuilt.xml", // permission
    ],
}
