//
// 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 {
    default_applicable_licenses: ["Android-Apache-2.0"],
}

java_defaults {
    name: "TetheringApiLevel",
    sdk_version: "module_current",
    target_sdk_version: "33",
    min_sdk_version: "30",
}

java_defaults {
    name: "TetheringAndroidLibraryDefaults",
    srcs: [
        "apishim/**/*.java",
        "src/**/*.java",
        ":framework-connectivity-shared-srcs",
        ":tethering-module-utils-srcs",
        ":services-tethering-shared-srcs",
        ":statslog-tethering-java-gen",
    ],
    static_libs: [
        "androidx.annotation_annotation",
        "modules-utils-build",
        "modules-utils-statemachine",
        "networkstack-client",
        "android.hardware.tetheroffload.config-V1.0-java",
        "android.hardware.tetheroffload.control-V1.0-java",
        "android.hardware.tetheroffload.control-V1.1-java",
        "net-utils-framework-common",
        "net-utils-device-common",
        "net-utils-device-common-bpf",
        "net-utils-device-common-netlink",
        "netd-client",
        "tetheringstatsprotos",
    ],
    libs: [
        "framework-connectivity",
        "framework-connectivity-t.stubs.module_lib",
        "framework-statsd.stubs.module_lib",
        "framework-tethering.impl",
        "framework-wifi",
        "framework-bluetooth",
        "unsupportedappusage",
    ],
    plugins: ["java_api_finder"],
    manifest: "AndroidManifestBase.xml",
    lint: { strict_updatability_linting: true },
}

// build tethering static library, used to compile both variants of the tethering.
android_library {
    name: "TetheringApiCurrentLib",
    defaults: [
        "ConnectivityNextEnableDefaults",
        "TetheringAndroidLibraryDefaults",
        "TetheringApiLevel"
    ],
    static_libs: [
        "NetworkStackApiCurrentShims",
    ],
    apex_available: ["com.android.tethering"],
    lint: { strict_updatability_linting: true },
}

android_library {
    name: "TetheringApiStableLib",
    defaults: [
        "TetheringAndroidLibraryDefaults",
        "TetheringApiLevel"
    ],
    static_libs: [
        "NetworkStackApiStableShims",
    ],
    apex_available: ["com.android.tethering"],
    lint: { strict_updatability_linting: true },
}

// Due to b/143733063, APK can't access a jni lib that is in APEX (but not in the APK).
cc_library {
    name: "libcom_android_networkstack_tethering_util_jni",
    sdk_version: "30",
    apex_available: [
        "//apex_available:platform", // Used by InProcessTethering
        "com.android.tethering",
    ],
    min_sdk_version: "30",
    header_libs: [
        "bpf_connectivity_headers",
    ],
    srcs: [
        "jni/*.cpp",
    ],
    shared_libs: [
        "liblog",
        "libnativehelper_compat_libc++",
    ],
    static_libs: [
        "libnet_utils_device_common_bpfjni",
        "libnetjniutils",
    ],

    // We cannot use plain "libc++" here to link libc++ dynamically because it results in:
    //   java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
    // even if "libc++" is added into jni_libs below. Adding "libc++_shared" into jni_libs doesn't
    // build because soong complains of:
    //   module Tethering missing dependencies: libc++_shared
    //
    // So, link libc++ statically. This means that we also need to ensure that all the C++ libraries
    // we depend on do not dynamically link libc++. This is currently the case, because liblog is
    // C-only and libnativehelper_compat_libc also uses stl: "c++_static".
    stl: "c++_static",

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

    ldflags: ["-Wl,--exclude-libs=ALL,-error-limit=0"],
}

// Common defaults for compiling the actual APK.
java_defaults {
    name: "TetheringAppDefaults",
    privileged: true,
    jni_libs: [
        "libcom_android_networkstack_tethering_util_jni",
    ],
    resource_dirs: [
        "res",
    ],
    libs: [
        "framework-tethering",
        "framework-wifi",
    ],
    jarjar_rules: "jarjar-rules.txt",
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
    lint: { strict_updatability_linting: true },
}

// Non-updatable tethering running in the system server process for devices not using the module
android_app {
    name: "InProcessTethering",
    defaults: ["TetheringAppDefaults", "TetheringApiLevel", "ConnectivityNextEnableDefaults"],
    static_libs: ["TetheringApiCurrentLib"],
    certificate: "platform",
    manifest: "AndroidManifest_InProcess.xml",
    // InProcessTethering is a replacement for Tethering
    overrides: ["Tethering"],
    apex_available: ["com.android.tethering"],
    lint: { strict_updatability_linting: true },
}

// Updatable tethering packaged for finalized API
android_app {
    name: "Tethering",
    defaults: ["TetheringAppDefaults", "TetheringApiLevel"],
    static_libs: ["TetheringApiStableLib"],
    certificate: "networkstack",
    manifest: "AndroidManifest.xml",
    use_embedded_native_libs: true,
    // The permission configuration *must* be included to ensure security of the device
    required: [
        "NetworkPermissionConfig",
        "privapp_allowlist_com.android.tethering",
    ],
    apex_available: ["com.android.tethering"],
    lint: { strict_updatability_linting: true },
}

android_app {
    name: "TetheringNext",
    defaults: [
        "TetheringAppDefaults",
        "TetheringApiLevel",
        "ConnectivityNextEnableDefaults",
    ],
    static_libs: ["TetheringApiCurrentLib"],
    certificate: "networkstack",
    manifest: "AndroidManifest.xml",
    use_embedded_native_libs: true,
    // The permission configuration *must* be included to ensure security of the device
    required: [
        "NetworkPermissionConfig",
        "privapp_allowlist_com.android.tethering",
    ],
    apex_available: ["com.android.tethering"],
    lint: { strict_updatability_linting: true },
}

sdk {
    name: "tethering-module-sdk",
    bootclasspath_fragments: ["com.android.tethering-bootclasspath-fragment"],
    systemserverclasspath_fragments: ["com.android.tethering-systemserverclasspath-fragment"],
}

java_library_static {
    name: "tetheringstatsprotos",
    proto: {type: "lite"},
    srcs: [
        "src/com/android/networkstack/tethering/metrics/stats.proto",
    ],
    static_libs: ["tetheringprotos"],
    apex_available: ["com.android.tethering"],
    min_sdk_version: "30",
}

genrule {
    name: "statslog-tethering-java-gen",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --java $(out) --module network_tethering" +
         " --javaPackage com.android.networkstack.tethering.metrics --javaClass TetheringStatsLog",
    out: ["com/android/networkstack/tethering/metrics/TetheringStatsLog.java"],
}