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

service_remoteauth_pre_jarjar_lib = "service-remoteauth-pre-jarjar"

// The above variables may have different values
// depending on the branch, and this comment helps
// separate them from the rest of the file to avoid merge conflicts

aidl_interface {
    name: "connectivity_native_aidl_interface",
    local_include_dir: "binder",
    srcs: [
        "binder/android/net/connectivity/aidl/*.aidl",
    ],
    backend: {
        java: {
            apex_available: [
                "com.android.tethering",
            ],
            min_sdk_version: "30",
        },
        ndk: {
            apex_available: [
                "com.android.tethering",
            ],
            min_sdk_version: "30",
        },
    },
    versions: ["1"],

}

cc_library_static {
    name: "connectivity_native_aidl_interface-lateststable-ndk",
    min_sdk_version: "30",
    whole_static_libs: [
        "connectivity_native_aidl_interface-V1-ndk",
    ],
    apex_available: [
        "com.android.tethering",
    ],
}

java_library {
    name: "connectivity_native_aidl_interface-lateststable-java",
    sdk_version: "system_current",
    min_sdk_version: "30",
    static_libs: [
        "connectivity_native_aidl_interface-V1-java",
    ],
    apex_available: [
        "com.android.tethering",
    ],
}

// The library name match the service-connectivity jarjar rules that put the JNI utils in the
// android.net.connectivity.com.android.net.module.util package.
cc_library_shared {
    name: "libandroid_net_connectivity_com_android_net_module_util_jni",
    min_sdk_version: "30",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wthread-safety",
    ],
    srcs: [
        "jni/com_android_net_module_util/onload.cpp",
    ],
    static_libs: [
        "libnet_utils_device_common_bpfjni",
        "libnet_utils_device_common_bpfutils",
    ],
    shared_libs: [
        "liblog",
        "libnativehelper",
    ],
    apex_available: [
        "com.android.tethering",
    ],
}

cc_library_shared {
    name: "libservice-connectivity",
    min_sdk_version: "30",
    cflags: [
        "-Wall",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wthread-safety",
    ],
    srcs: [
        ":services.connectivity-netstats-jni-sources",
        "jni/com_android_server_connectivity_ClatCoordinator.cpp",
        "jni/com_android_server_ServiceManagerWrapper.cpp",
        "jni/com_android_server_TestNetworkService.cpp",
        "jni/onload.cpp",
    ],
    header_libs: [
        "bpf_connectivity_headers",
    ],
    static_libs: [
        "libclat",
        "libip_checksum",
        "libmodules-utils-build",
        "libnetjniutils",
        "libnet_utils_device_common_bpfjni",
        "netd_aidl_interface-lateststable-ndk",
    ],
    shared_libs: [
        "libbase",
        "libbinder_ndk",
        "libcutils",
        "libnetdutils",
        "liblog",
        "libnativehelper",
        "libnetworkstats",
    ],
    apex_available: [
        "com.android.tethering",
    ],
}

java_library {
    name: "service-connectivity-pre-jarjar",
    sdk_version: "system_server_current",
    min_sdk_version: "30",
    // NetworkStackApiShimSettingsForCurrentBranch provides the latest available shims depending on
    // the branch to "service-connectivity".
    // There are Tethering.apk and TetheringNext.apk variants for the tethering APEX,
    // which use NetworkStackApiStableShims and NetworkStackApiCurrentShims respectively.
    // Note that there can be no service-connectivity-next because it would need to be configured in
    // default_art_config.mk which doesn't support conditionals, hence this scheme of using a
    // variable here.
    defaults: ["NetworkStackApiShimSettingsForCurrentBranch"],
    srcs: [
        "src/**/*.java",
        ":framework-connectivity-shared-srcs",
        ":services-connectivity-shared-srcs",
        ":statslog-connectivity-java-gen",
    ],
    libs: [
        "framework-annotations-lib",
        "framework-configinfrastructure",
        "framework-connectivity-pre-jarjar",
        // The framework-connectivity-t library is only available on T+ platforms
        // so any calls to it must be protected with a check to ensure that it is
        // available. The linter will detect any unprotected calls through an API
        // but not direct calls to the implementation. So, this depends on the
        // module lib stubs directly to ensure the linter will work correctly
        // as depending on framework-connectivity-t would cause it to be compiled
        // against the implementation because the two libraries are in the same
        // APEX.
        "framework-connectivity-t.stubs.module_lib",
        // TODO: figure out why just using "framework-tethering" uses the stubs, even though both
        // service-connectivity and framework-tethering are in the same APEX.
        "framework-tethering.impl",
        "framework-wifi",
        "unsupportedappusage",
        "ServiceConnectivityResources",
        "framework-statsd",
    ],
    static_libs: [
        // Do not add libs here if they are already included
        // in framework-connectivity
        "androidx.annotation_annotation",
        "connectivity-net-module-utils-bpf",
        "connectivity_native_aidl_interface-lateststable-java",
        "dnsresolver_aidl_interface-V13-java",
        "modules-utils-shell-command-handler",
        "net-utils-device-common",
        "net-utils-device-common-ip",
        "net-utils-device-common-netlink",
        "net-utils-services-common",
        "netd-client",
        "networkstack-client",
        "PlatformProperties",
        "service-connectivity-protos",
        "service-connectivity-stats-protos",
    ],
    apex_available: [
        "com.android.tethering",
    ],
    lint: { strict_updatability_linting: true },
    visibility: [
        "//packages/modules/Connectivity/service-t",
        "//packages/modules/Connectivity/tests:__subpackages__",
        "//packages/modules/Connectivity/thread/service:__subpackages__",
        "//packages/modules/Connectivity/thread/tests:__subpackages__",
    ],
}

java_library {
    name: "service-connectivity-protos",
    sdk_version: "system_current",
    min_sdk_version: "30",
    proto: {
        type: "nano",
    },
    srcs: [
        ":system-messages-proto-src",
    ],
    libs: ["libprotobuf-java-nano"],
    apex_available: [
        "com.android.tethering",
    ],
    lint: {
        strict_updatability_linting: true,
    },
}

java_defaults {
    name: "service-connectivity-defaults",
    sdk_version: "system_server_current",
    min_sdk_version: "30",
    defaults: [
        "standalone-system-server-module-optimize-defaults",
    ],
    // This library combines system server jars that have access to different bootclasspath jars.
    // Lower SDK service jars must not depend on higher SDK jars as that would let them
    // transitively depend on the wrong bootclasspath jars. Sources also cannot be added here as
    // they would depend on bootclasspath jars that may not be available.
    static_libs: [
        "service-connectivity-pre-jarjar",
        "service-connectivity-tiramisu-pre-jarjar",
        "service-nearby-pre-jarjar",
        service_remoteauth_pre_jarjar_lib,
        "service-thread-pre-jarjar",
    ],
    // The below libraries are not actually needed to build since no source is compiled
    // (only combining prebuilt static_libs), but they are necessary so that R8 has the right
    // references to optimize the code. Without these, there will be missing class warnings and
    // code may be wrongly optimized.
    // R8 runs after jarjar, so the framework-X libraries need to be the post-jarjar artifacts
    // (.impl), if they are not just stubs, so that the name of jarjared classes match.
    libs: [
        "androidx.annotation_annotation",
        "framework-annotations-lib",
        "framework-connectivity.impl",
        "framework-connectivity-t.impl",
        "framework-tethering.impl",
        "framework-wifi",
        "libprotobuf-java-nano",
    ],
    jarjar_rules: ":connectivity-jarjar-rules",
    apex_available: [
        "com.android.tethering",
    ],
    optimize: {
        proguard_flags_files: ["proguard.flags"],
    },
    lint: {
        strict_updatability_linting: true,
    },
}

// A special library created strictly for use by the tests as they need the
// implementation library but that is not available when building from prebuilts.
// Using a library with a different name to what is used by the prebuilts ensures
// that this will never depend on the prebuilt.
// Switching service-connectivity to a java_sdk_library would also have worked as
// that has built in support for managing this but that is too big a change at this
// point.
java_library {
    name: "service-connectivity-for-tests",
    defaults: ["service-connectivity-defaults"],
}

java_library {
    name: "service-connectivity",
    defaults: ["service-connectivity-defaults"],
    installable: true,
}

java_library_static {
    name: "service-connectivity-stats-protos",
    sdk_version: "system_current",
    min_sdk_version: "30",
    proto: {
        type: "lite",
    },
    srcs: [
        "src/com/android/metrics/stats.proto",
    ],
    static_libs: ["ConnectivityServiceprotos"],
    apex_available: ["com.android.tethering"],
}

genrule {
    name: "connectivity-jarjar-rules",
    defaults: ["jarjar-rules-combine-defaults"],
    srcs: [
        ":framework-connectivity-jarjar-rules",
        ":service-connectivity-jarjar-gen",
        ":service-nearby-jarjar-gen",
        ":service-remoteauth-jarjar-gen",
        ":service-thread-jarjar-gen",
    ],
    out: ["connectivity-jarjar-rules.txt"],
    visibility: ["//packages/modules/Connectivity:__subpackages__"],
}

// TODO: This filegroup temporary exposes for NetworkStats. It should be
// removed right after NetworkStats moves into mainline module.
filegroup {
    name: "traffic-controller-utils",
    srcs: ["src/com/android/server/BpfNetMaps.java"],
    visibility: ["//packages/modules/Connectivity:__subpackages__"],
}

java_genrule {
    name: "service-connectivity-jarjar-gen",
    tool_files: [
        ":service-connectivity-pre-jarjar{.jar}",
        ":service-connectivity-tiramisu-pre-jarjar{.jar}",
        "jarjar-excludes.txt",
    ],
    tools: [
        "jarjar-rules-generator",
    ],
    out: ["service_connectivity_jarjar_rules.txt"],
    cmd: "$(location jarjar-rules-generator) " +
        "$(location :service-connectivity-pre-jarjar{.jar}) " +
        "$(location :service-connectivity-tiramisu-pre-jarjar{.jar}) " +
        "--prefix android.net.connectivity " +
        "--excludes $(location jarjar-excludes.txt) " +
        "--output $(out)",
    visibility: ["//visibility:private"],
}

java_genrule {
    name: "service-nearby-jarjar-gen",
    tool_files: [
        ":service-nearby-pre-jarjar{.jar}",
        "jarjar-excludes.txt",
    ],
    tools: [
        "jarjar-rules-generator",
    ],
    out: ["service_nearby_jarjar_rules.txt"],
    cmd: "$(location jarjar-rules-generator) " +
        "$(location :service-nearby-pre-jarjar{.jar}) " +
        "--prefix com.android.server.nearby " +
        "--excludes $(location jarjar-excludes.txt) " +
        "--output $(out)",
    visibility: ["//visibility:private"],
}

java_genrule {
    name: "service-remoteauth-jarjar-gen",
    tool_files: [
        ":" + service_remoteauth_pre_jarjar_lib + "{.jar}",
        "jarjar-excludes.txt",
    ],
    tools: [
        "jarjar-rules-generator",
    ],
    out: ["service_remoteauth_jarjar_rules.txt"],
    cmd: "$(location jarjar-rules-generator) " +
        "$(location :" + service_remoteauth_pre_jarjar_lib + "{.jar}) " +
        "--prefix com.android.server.remoteauth " +
        "--excludes $(location jarjar-excludes.txt) " +
        "--output $(out)",
    visibility: ["//visibility:private"],
}

java_genrule {
    name: "service-thread-jarjar-gen",
    tool_files: [
        ":service-thread-pre-jarjar{.jar}",
        "jarjar-excludes.txt",
    ],
    tools: [
        "jarjar-rules-generator",
    ],
    out: ["service_thread_jarjar_rules.txt"],
    cmd: "$(location jarjar-rules-generator) " +
        "$(location :service-thread-pre-jarjar{.jar}) " +
        "--prefix com.android.server.thread " +
        "--excludes $(location jarjar-excludes.txt) " +
        "--output $(out)",
    visibility: ["//visibility:private"],
}

genrule {
    name: "statslog-connectivity-java-gen",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --java $(out) --module connectivity --javaPackage com.android.server --javaClass ConnectivityStatsLog",
    out: ["com/android/server/ConnectivityStatsLog.java"],
}
