# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//base/android/jni_generator/jni_exception_list.gni")
import("//build/config/android/rules.gni")
import("//testing/test.gni")

generate_jni("jni_sample_header") {
  sources = [
    "java/src/org/chromium/example/jni_generator/SampleForTests.java",
  ]
  jni_package = "example"
}

android_library("jni_sample_java") {
  java_files =
      [ "java/src/org/chromium/example/jni_generator/SampleForTests.java" ]
  deps = [
    "//base:base_java",
  ]
}

android_library("jni_annotation_sample_java") {
  java_files = [ "java/src/org/chromium/example/jni_generator/SampleForAnnotationProcessor.java" ]
  deps = [
    "//base:jni_processor_annotations_java",
  ]
  annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}

source_set("jni_sample_native_side") {
  deps = [
    ":jni_sample_header",
    "//base",
  ]
  sources = [
    "sample_for_tests.cc",
    "sample_for_tests.h",
  ]
}

shared_library("jni_sample_lib") {
  sources = [
    "sample_entry_point.cc",
  ]

  deps = [
    ":jni_sample_native_side",
    ":sample_jni_registration",
    "//base",
  ]
}

android_apk("sample_jni_apk") {
  apk_name = "SampleJni"
  android_manifest = "AndroidManifest.xml"
  deps = [
    ":jni_sample_java",
    "//base:base_java",
  ]
  shared_libraries = [ ":jni_sample_lib" ]
}

generate_jni_registration("sample_jni_registration") {
  target = ":sample_jni_apk"
  output = "$target_gen_dir/${target_name}.h"
  exception_files = jni_exception_files
}

# Serves to test that generated bindings compile properly.
group("jni_generator_tests") {
  deps = [
    ":jni_annotation_sample_java",
    ":sample_jni_apk",
  ]
}

java_annotation_processor("jni_processor") {
  java_files = [ "java/src/org/chromium/jni_generator/JniProcessor.java" ]

  main_class = "org.chromium.jni_generator.JniProcessor"

  annotation_processor_deps = [ "//third_party/auto:auto_service_processor" ]

  deps = [
    "//base:jni_processor_annotations_java",
    "//third_party/android_deps:com_squareup_javapoet_java",
    "//third_party/auto:auto_service_java",
    "//third_party/guava:guava_java",
  ]
}
