# Copyright (c) 2020-2021 Project CHIP Authors
#
# 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.

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("${chip_root}/build/chip/java/config.gni")
import("${chip_root}/build/chip/java/rules.gni")

if (!build_java_matter_controller) {
  import("${build_root}/config/android_abi.gni")
}

shared_library("jni") {
  output_name = "libCHIPMessaging"

  sources = [ "MessagingContext-JNI.cpp" ]
  deps = [ "${chip_root}/src/messaging/tests:helpers" ]

  public_configs = [ "${chip_root}/src:includes" ]

  if (build_java_matter_controller) {
    defines = [ "JAVA_MATTER_CONTROLLER_TEST" ]
    include_dirs = java_matter_controller_dependent_paths

    deps += [ "${chip_root}/src/platform/Linux" ]

    cflags = [ "-Wno-unknown-pragmas" ]

    output_dir = "${root_out_dir}/lib/jni"
  } else {
    deps += [ "${chip_root}/src/platform/android" ]

    output_dir = "${root_out_dir}/lib/jni/${android_abi}"
  }

  ldflags = [ "-Wl,--gc-sections" ]
}

android_library("java") {
  output_name = "CHIPMessaging.jar"

  deps = [ "${chip_root}/third_party/java_deps:annotation" ]

  data_deps = [ ":jni" ]

  sources = [ "src/chip/testing/MessagingContext.java" ]

  if (build_java_matter_controller) {
    deps += [
      "${chip_root}/third_party/java_deps:json",
      "${chip_root}/third_party/java_deps/stub_src",
    ]
  } else {
    deps += [ ":android" ]

    data_deps += [ "${chip_root}/build/chip/java:shared_cpplib" ]
  }

  javac_flags = [ "-Xlint:deprecation" ]

  # TODO: add classpath support (we likely need to add something like
  #  ..../platforms/android-26/android.jar to access BLE items)
}

if (!build_java_matter_controller) {
  java_prebuilt("android") {
    jar_path = "${android_sdk_root}/platforms/android-26/android.jar"
  }
}
