# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# 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.

template("install_target") {
  not_needed(invoker, [ "type" ])
  content_dir = "usr/share/cobalt"

  action("build_${target_name}_apk") {
    forward_variables_from(invoker,
                           [
                             "installable_target_name",
                             "testonly",
                           ])
    deps = [
      ":$installable_target_name",
      "//starboard/android/apk:apk_sources",
    ]

    target_output = "$root_out_dir/lib${installable_target_name}.so"
    gradle_content_dir = "$sb_install_output_dir/$content_dir"
    gradle_files_dir = "$root_out_dir/gradle/$installable_target_name"
    if (is_gold) {
      gradle_build_type = "release"
    } else {
      gradle_build_type = build_type
    }

    sources = [
      "$root_out_dir/gradle/apk_sources.stamp",
      target_output,
    ]

    outputs = [ "$root_out_dir/${installable_target_name}.apk" ]

    cobalt_project_dir = rebase_path("//starboard/android/apk")
    cobalt_deploy_apk = rebase_path(outputs[0])
    cobalt_content_dir = rebase_path(gradle_content_dir)
    cobalt_gradle_dir = rebase_path(gradle_files_dir)
    cobalt_product_dir = rebase_path(root_out_dir)
    cobalt_library_dir = rebase_path(root_out_dir)

    script = "//starboard/build/run_bash.py"
    bash_script =
        rebase_path("//starboard/android/apk/cobalt-gradle.sh", root_build_dir)
    args = [
      bash_script,
      "--sdk",
      android_sdk_path,
      "--cache",
      rebase_path(root_build_dir),
      "--project-dir",
      cobalt_project_dir,
      "-P",
      "cobaltBuildAbi=$android_abi",
      "-P",
      "cobaltDeployApk=$cobalt_deploy_apk",
      "-P",
      "cobaltContentDir=$cobalt_content_dir",
      "-P",
      "cobaltGradleDir=$cobalt_gradle_dir",
      "-P",
      "cobaltProductDir=$cobalt_product_dir",
      "-P",
      "cobaltLibraryDir=$cobalt_library_dir",
      "-P",
      "cobaltTarget=$installable_target_name",
      "-P",
      "enableVulkan=$enable_vulkan",
      "assembleCobalt_$gradle_build_type",
    ]
  }
}
