# 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.

import("//starboard/android/apk/apk_sources.gni")
import("//starboard/android/shared/toolchain/toolchain.gni")
import("//starboard/build/config/install.gni")

declare_args() {
  # Must be set to a positive integer. Needs to be a string due to us not being
  # able to cast to an integer in GN.
  num_gradle_workers = getenv("COBALT_GRADLE_BUILD_COUNT")
}

if (num_gradle_workers == "") {
  num_gradle_workers = "1"
}

template("install_target") {
  not_needed(invoker, [ "type" ])

  installable_target_name = invoker.installable_target_name

  action("build_${target_name}_apk") {
    forward_variables_from(invoker, [ "testonly" ])

    deps = invoker.deps
    deps += [ ":$installable_target_name" ]

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

    gradle_wrapper = "//starboard/android/apk/gradlew"

    sources = [
      gradle_wrapper,
      target_output,
    ]
    sources += apk_sources

    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)
    project_cache_dir =
        rebase_path("$root_build_dir/gradle/$installable_target_name/cache")
    use_parallel_build = num_gradle_workers != "1"

    script = "//starboard/build/run_bash.py"
    args = [
      "env",
      "ANDROID_HOME=${android_sdk_path}",
      rebase_path(gradle_wrapper, root_build_dir),
      "--project-cache-dir=$project_cache_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",
      "-Dorg.gradle.workers.max=$num_gradle_workers",
      "-Dorg.gradle.workers.parallel=$use_parallel_build",
      "-Dorg.gradle.workers.daemon=$use_parallel_build",
    ]
  }

  group(target_name) {
    forward_variables_from(invoker, [ "testonly" ])
    deps = [
      ":$installable_target_name",
      ":build_${target_name}_apk",
    ]
  }
}
