15f9996aaSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd.
25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
45f9996aaSopenharmony_ci# You may obtain a copy of the License at
55f9996aaSopenharmony_ci#
65f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
125f9996aaSopenharmony_ci# limitations under the License.
135f9996aaSopenharmony_ci
145f9996aaSopenharmony_ciimport("//build/templates/common/copy.gni")
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_citemplate("ohos_prebuilt_executable") {
175f9996aaSopenharmony_ci  assert(defined(invoker.source), "source must be defined for ${target_name}.")
185f9996aaSopenharmony_ci
195f9996aaSopenharmony_ci  if (defined(invoker.output)) {
205f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.output}"
215f9996aaSopenharmony_ci  } else {
225f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.source}"
235f9996aaSopenharmony_ci  }
245f9996aaSopenharmony_ci
255f9996aaSopenharmony_ci  if (!defined(invoker.deps)) {
265f9996aaSopenharmony_ci    invoker.deps = []
275f9996aaSopenharmony_ci  }
285f9996aaSopenharmony_ci
295f9996aaSopenharmony_ci  if (!defined(invoker.stable)) {
305f9996aaSopenharmony_ci    invoker.stable = false
315f9996aaSopenharmony_ci  }
325f9996aaSopenharmony_ci
335f9996aaSopenharmony_ci  deps_info = []
345f9996aaSopenharmony_ci  foreach(dep, invoker.deps) {
355f9996aaSopenharmony_ci    info = {
365f9996aaSopenharmony_ci    }
375f9996aaSopenharmony_ci    info = {
385f9996aaSopenharmony_ci      target_out_dir =
395f9996aaSopenharmony_ci          rebase_path(get_label_info(dep, "target_out_dir"), root_build_dir)
405f9996aaSopenharmony_ci      target_name = get_label_info(dep, "name")
415f9996aaSopenharmony_ci    }
425f9996aaSopenharmony_ci    deps_info += [ info ]
435f9996aaSopenharmony_ci  }
445f9996aaSopenharmony_ci  module_label = get_label_info(":${target_name}", "label_with_toolchain")
455f9996aaSopenharmony_ci  target_deps_data = {
465f9996aaSopenharmony_ci    label = module_label
475f9996aaSopenharmony_ci    module_deps_info = deps_info
485f9996aaSopenharmony_ci    type = "executable"
495f9996aaSopenharmony_ci    prebuilt = true
505f9996aaSopenharmony_ci    stable = invoker.stable
515f9996aaSopenharmony_ci    toolchain = get_label_info(":${target_name}", "toolchain")
525f9996aaSopenharmony_ci    source_path = rebase_path(invoker.source, root_build_dir)
535f9996aaSopenharmony_ci    output_path = rebase_path(_copy_output, root_build_dir)
545f9996aaSopenharmony_ci  }
555f9996aaSopenharmony_ci  write_file("${target_out_dir}/${target_name}_deps_data.json",
565f9996aaSopenharmony_ci             target_deps_data,
575f9996aaSopenharmony_ci             "json")
585f9996aaSopenharmony_ci
595f9996aaSopenharmony_ci  ohos_copy(target_name) {
605f9996aaSopenharmony_ci    forward_variables_from(invoker,
615f9996aaSopenharmony_ci                           [
625f9996aaSopenharmony_ci                             "testonly",
635f9996aaSopenharmony_ci                             "visibility",
645f9996aaSopenharmony_ci
655f9996aaSopenharmony_ci                             "deps",
665f9996aaSopenharmony_ci                             "external_deps",
675f9996aaSopenharmony_ci                             "public_external_deps",
685f9996aaSopenharmony_ci                             "public_configs",
695f9996aaSopenharmony_ci                             "subsystem_name",
705f9996aaSopenharmony_ci                             "part_name",
715f9996aaSopenharmony_ci
725f9996aaSopenharmony_ci                             # For generate_module_info
735f9996aaSopenharmony_ci                             "install_images",
745f9996aaSopenharmony_ci                             "module_install_dir",
755f9996aaSopenharmony_ci                             "relative_install_dir",
765f9996aaSopenharmony_ci                             "symlink_target_name",
775f9996aaSopenharmony_ci
785f9996aaSopenharmony_ci                             # Open source license related
795f9996aaSopenharmony_ci                             "license_file",
805f9996aaSopenharmony_ci                             "license_as_sources",
815f9996aaSopenharmony_ci                           ])
825f9996aaSopenharmony_ci    sources = [ invoker.source ]
835f9996aaSopenharmony_ci    outputs = [ _copy_output ]
845f9996aaSopenharmony_ci    module_type = "bin"
855f9996aaSopenharmony_ci    prebuilt = true
865f9996aaSopenharmony_ci    install_enable = false
875f9996aaSopenharmony_ci    enable_strip = false
885f9996aaSopenharmony_ci    if (defined(invoker.enable_strip) && invoker.enable_strip) {
895f9996aaSopenharmony_ci      enable_strip = true
905f9996aaSopenharmony_ci    }
915f9996aaSopenharmony_ci    if (defined(invoker.install_enable)) {
925f9996aaSopenharmony_ci      install_enable = invoker.install_enable
935f9996aaSopenharmony_ci    }
945f9996aaSopenharmony_ci  }
955f9996aaSopenharmony_ci}
965f9996aaSopenharmony_ci
975f9996aaSopenharmony_citemplate("ohos_prebuilt_shared_library") {
985f9996aaSopenharmony_ci  assert(defined(invoker.source), "source must be defined for ${target_name}.")
995f9996aaSopenharmony_ci
1005f9996aaSopenharmony_ci  if (defined(invoker.output)) {
1015f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.output}"
1025f9996aaSopenharmony_ci  } else {
1035f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.source}"
1045f9996aaSopenharmony_ci  }
1055f9996aaSopenharmony_ci  config("${target_name}__config") {
1065f9996aaSopenharmony_ci    libs = [ _copy_output ]
1075f9996aaSopenharmony_ci  }
1085f9996aaSopenharmony_ci
1095f9996aaSopenharmony_ci  if (!defined(invoker.deps)) {
1105f9996aaSopenharmony_ci    invoker.deps = []
1115f9996aaSopenharmony_ci  }
1125f9996aaSopenharmony_ci
1135f9996aaSopenharmony_ci  if (!defined(invoker.stable)) {
1145f9996aaSopenharmony_ci    invoker.stable = false
1155f9996aaSopenharmony_ci  }
1165f9996aaSopenharmony_ci
1175f9996aaSopenharmony_ci  # auto set auto_relative_install_dir by innerapi_tags
1185f9996aaSopenharmony_ci  if (defined(invoker.innerapi_tags)) {
1195f9996aaSopenharmony_ci    is_chipsetsdk = false
1205f9996aaSopenharmony_ci    is_platformsdk = false
1215f9996aaSopenharmony_ci    is_passthrough = false
1225f9996aaSopenharmony_ci    foreach(tag, filter_include(invoker.innerapi_tags, [ "chipsetsdk*" ])) {
1235f9996aaSopenharmony_ci      is_chipsetsdk = true
1245f9996aaSopenharmony_ci    }
1255f9996aaSopenharmony_ci    foreach(tag, filter_include(invoker.innerapi_tags, [ "platformsdk*" ])) {
1265f9996aaSopenharmony_ci      is_platformsdk = true
1275f9996aaSopenharmony_ci    }
1285f9996aaSopenharmony_ci    foreach(tag, filter_include(invoker.innerapi_tags, [ "passthrough*" ])) {
1295f9996aaSopenharmony_ci      is_passthrough = true
1305f9996aaSopenharmony_ci    }
1315f9996aaSopenharmony_ci
1325f9996aaSopenharmony_ci    if (is_chipsetsdk && is_platformsdk) {
1335f9996aaSopenharmony_ci      auto_relative_install_dir = "chipset-pub-sdk"
1345f9996aaSopenharmony_ci    } else if (is_chipsetsdk) {
1355f9996aaSopenharmony_ci      auto_relative_install_dir = "chipset-sdk"
1365f9996aaSopenharmony_ci    } else if (is_platformsdk) {
1375f9996aaSopenharmony_ci      auto_relative_install_dir = "platformsdk"
1385f9996aaSopenharmony_ci    }
1395f9996aaSopenharmony_ci    if (is_passthrough) {
1405f9996aaSopenharmony_ci      auto_relative_install_dir = chipset_passthrough_dir
1415f9996aaSopenharmony_ci    }
1425f9996aaSopenharmony_ci
1435f9996aaSopenharmony_ci    is_ndk = false
1445f9996aaSopenharmony_ci    foreach(tag, filter_include(invoker.innerapi_tags, [ "ndk" ])) {
1455f9996aaSopenharmony_ci      is_ndk = true
1465f9996aaSopenharmony_ci    }
1475f9996aaSopenharmony_ci    if (is_ndk) {
1485f9996aaSopenharmony_ci      auto_relative_install_dir = "ndk"
1495f9996aaSopenharmony_ci    }
1505f9996aaSopenharmony_ci  }
1515f9996aaSopenharmony_ci
1525f9996aaSopenharmony_ci  deps_info = []
1535f9996aaSopenharmony_ci  foreach(dep, invoker.deps) {
1545f9996aaSopenharmony_ci    info = {
1555f9996aaSopenharmony_ci    }
1565f9996aaSopenharmony_ci    info = {
1575f9996aaSopenharmony_ci      target_out_dir =
1585f9996aaSopenharmony_ci          rebase_path(get_label_info(dep, "target_out_dir"), root_build_dir)
1595f9996aaSopenharmony_ci      target_name = get_label_info(dep, "name")
1605f9996aaSopenharmony_ci    }
1615f9996aaSopenharmony_ci    deps_info += [ info ]
1625f9996aaSopenharmony_ci  }
1635f9996aaSopenharmony_ci  module_label = get_label_info(":${target_name}", "label_with_toolchain")
1645f9996aaSopenharmony_ci  target_deps_data = {
1655f9996aaSopenharmony_ci    label = module_label
1665f9996aaSopenharmony_ci    module_deps_info = deps_info
1675f9996aaSopenharmony_ci    type = "shared_library"
1685f9996aaSopenharmony_ci    prebuilt = true
1695f9996aaSopenharmony_ci    stable = invoker.stable
1705f9996aaSopenharmony_ci    toolchain = get_label_info(":${target_name}", "toolchain")
1715f9996aaSopenharmony_ci    source_path = rebase_path(invoker.source, root_build_dir)
1725f9996aaSopenharmony_ci    output_path = rebase_path(_copy_output, root_build_dir)
1735f9996aaSopenharmony_ci  }
1745f9996aaSopenharmony_ci  write_file("${target_out_dir}/${target_name}_deps_data.json",
1755f9996aaSopenharmony_ci             target_deps_data,
1765f9996aaSopenharmony_ci             "json")
1775f9996aaSopenharmony_ci
1785f9996aaSopenharmony_ci  ohos_copy(target_name) {
1795f9996aaSopenharmony_ci    forward_variables_from(invoker,
1805f9996aaSopenharmony_ci                           [
1815f9996aaSopenharmony_ci                             "testonly",
1825f9996aaSopenharmony_ci                             "visibility",
1835f9996aaSopenharmony_ci
1845f9996aaSopenharmony_ci                             "deps",
1855f9996aaSopenharmony_ci                             "external_deps",
1865f9996aaSopenharmony_ci                             "public_external_deps",
1875f9996aaSopenharmony_ci                             "public_configs",
1885f9996aaSopenharmony_ci                             "subsystem_name",
1895f9996aaSopenharmony_ci                             "part_name",
1905f9996aaSopenharmony_ci
1915f9996aaSopenharmony_ci                             # For generate_module_info
1925f9996aaSopenharmony_ci                             "install_images",
1935f9996aaSopenharmony_ci                             "module_install_dir",
1945f9996aaSopenharmony_ci                             "symlink_target_name",
1955f9996aaSopenharmony_ci                             "innerapi_tags",
1965f9996aaSopenharmony_ci                             "symlink_ext",
1975f9996aaSopenharmony_ci
1985f9996aaSopenharmony_ci                             # Open source license related
1995f9996aaSopenharmony_ci                             "license_file",
2005f9996aaSopenharmony_ci                             "license_as_sources",
2015f9996aaSopenharmony_ci                           ])
2025f9996aaSopenharmony_ci    sources = [ invoker.source ]
2035f9996aaSopenharmony_ci    outputs = [ _copy_output ]
2045f9996aaSopenharmony_ci    module_type = "lib"
2055f9996aaSopenharmony_ci    prebuilt = true
2065f9996aaSopenharmony_ci    install_enable = true
2075f9996aaSopenharmony_ci    enable_strip = false
2085f9996aaSopenharmony_ci    if (defined(invoker.enable_strip) && invoker.enable_strip) {
2095f9996aaSopenharmony_ci      enable_strip = true
2105f9996aaSopenharmony_ci    }
2115f9996aaSopenharmony_ci    mini_debug = false
2125f9996aaSopenharmony_ci    if (defined(invoker.mini_debug) && invoker.mini_debug) {
2135f9996aaSopenharmony_ci      mini_debug = true
2145f9996aaSopenharmony_ci    }
2155f9996aaSopenharmony_ci    if (defined(invoker.install_enable)) {
2165f9996aaSopenharmony_ci      install_enable = invoker.install_enable
2175f9996aaSopenharmony_ci    }
2185f9996aaSopenharmony_ci
2195f9996aaSopenharmony_ci    # update relative_install_dir if auto_relative_install_dir defined
2205f9996aaSopenharmony_ci    if (defined(auto_relative_install_dir)) {
2215f9996aaSopenharmony_ci      relative_install_dir = auto_relative_install_dir
2225f9996aaSopenharmony_ci    }
2235f9996aaSopenharmony_ci    if (defined(invoker.relative_install_dir)) {
2245f9996aaSopenharmony_ci      relative_install_dir = invoker.relative_install_dir
2255f9996aaSopenharmony_ci    }
2265f9996aaSopenharmony_ci    if (!defined(public_configs)) {
2275f9996aaSopenharmony_ci      public_configs = []
2285f9996aaSopenharmony_ci    }
2295f9996aaSopenharmony_ci    public_configs += [ ":${target_name}__config" ]
2305f9996aaSopenharmony_ci  }
2315f9996aaSopenharmony_ci}
2325f9996aaSopenharmony_ci
2335f9996aaSopenharmony_citemplate("ohos_prebuilt_static_library") {
2345f9996aaSopenharmony_ci  assert(defined(invoker.source), "source must be defined for ${target_name}.")
2355f9996aaSopenharmony_ci
2365f9996aaSopenharmony_ci  if (defined(invoker.output)) {
2375f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.output}"
2385f9996aaSopenharmony_ci  } else {
2395f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.source}"
2405f9996aaSopenharmony_ci  }
2415f9996aaSopenharmony_ci  config("${target_name}__config") {
2425f9996aaSopenharmony_ci    libs = [ _copy_output ]
2435f9996aaSopenharmony_ci  }
2445f9996aaSopenharmony_ci  ohos_copy(target_name) {
2455f9996aaSopenharmony_ci    forward_variables_from(invoker,
2465f9996aaSopenharmony_ci                           [
2475f9996aaSopenharmony_ci                             "testonly",
2485f9996aaSopenharmony_ci                             "visibility",
2495f9996aaSopenharmony_ci
2505f9996aaSopenharmony_ci                             "deps",
2515f9996aaSopenharmony_ci                             "external_deps",
2525f9996aaSopenharmony_ci                             "public_external_deps",
2535f9996aaSopenharmony_ci                             "public_configs",
2545f9996aaSopenharmony_ci                             "subsystem_name",
2555f9996aaSopenharmony_ci                             "part_name",
2565f9996aaSopenharmony_ci
2575f9996aaSopenharmony_ci                             # Open source license related
2585f9996aaSopenharmony_ci                             "license_file",
2595f9996aaSopenharmony_ci                             "license_as_sources",
2605f9996aaSopenharmony_ci                           ])
2615f9996aaSopenharmony_ci    sources = [ invoker.source ]
2625f9996aaSopenharmony_ci    outputs = [ _copy_output ]
2635f9996aaSopenharmony_ci    bypass_module_info_generation = true
2645f9996aaSopenharmony_ci    if (!defined(public_configs)) {
2655f9996aaSopenharmony_ci      public_configs = []
2665f9996aaSopenharmony_ci    }
2675f9996aaSopenharmony_ci    public_configs += [ ":${target_name}__config" ]
2685f9996aaSopenharmony_ci  }
2695f9996aaSopenharmony_ci}
2705f9996aaSopenharmony_ci
2715f9996aaSopenharmony_citemplate("ohos_prebuilt_etc") {
2725f9996aaSopenharmony_ci  assert(defined(invoker.source), "source must be defined for ${target_name}.")
2735f9996aaSopenharmony_ci
2745f9996aaSopenharmony_ci  if (defined(invoker.output)) {
2755f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.output}"
2765f9996aaSopenharmony_ci  } else {
2775f9996aaSopenharmony_ci    _copy_output = "${target_out_dir}/${invoker.source}"
2785f9996aaSopenharmony_ci  }
2795f9996aaSopenharmony_ci
2805f9996aaSopenharmony_ci  source_path = rebase_path(invoker.source, root_build_dir)
2815f9996aaSopenharmony_ci  module_label = get_label_info(":${target_name}", "label_with_toolchain")
2825f9996aaSopenharmony_ci  target_deps_data = {
2835f9996aaSopenharmony_ci    label = module_label
2845f9996aaSopenharmony_ci    type = "etc"
2855f9996aaSopenharmony_ci    prebuilt = true
2865f9996aaSopenharmony_ci    source_path = source_path
2875f9996aaSopenharmony_ci    output_path = rebase_path(_copy_output, root_build_dir)
2885f9996aaSopenharmony_ci  }
2895f9996aaSopenharmony_ci  write_file("${target_out_dir}/${target_name}_deps_data.json",
2905f9996aaSopenharmony_ci             target_deps_data,
2915f9996aaSopenharmony_ci             "json")
2925f9996aaSopenharmony_ci
2935f9996aaSopenharmony_ci  ohos_copy(target_name) {
2945f9996aaSopenharmony_ci    forward_variables_from(invoker,
2955f9996aaSopenharmony_ci                           [
2965f9996aaSopenharmony_ci                             "testonly",
2975f9996aaSopenharmony_ci                             "visibility",
2985f9996aaSopenharmony_ci
2995f9996aaSopenharmony_ci                             "deps",
3005f9996aaSopenharmony_ci                             "external_deps",
3015f9996aaSopenharmony_ci                             "public_external_deps",
3025f9996aaSopenharmony_ci                             "public_configs",
3035f9996aaSopenharmony_ci                             "subsystem_name",
3045f9996aaSopenharmony_ci                             "part_name",
3055f9996aaSopenharmony_ci
3065f9996aaSopenharmony_ci                             # For generate_module_info
3075f9996aaSopenharmony_ci                             "install_images",
3085f9996aaSopenharmony_ci                             "module_install_dir",
3095f9996aaSopenharmony_ci                             "relative_install_dir",
3105f9996aaSopenharmony_ci                             "symlink_target_name",
3115f9996aaSopenharmony_ci
3125f9996aaSopenharmony_ci                             # Open source license related
3135f9996aaSopenharmony_ci                             "license_file",
3145f9996aaSopenharmony_ci                             "license_as_sources",
3155f9996aaSopenharmony_ci                           ])
3165f9996aaSopenharmony_ci    sources = [ invoker.source ]
3175f9996aaSopenharmony_ci    outputs = [ _copy_output ]
3185f9996aaSopenharmony_ci    module_type = "etc"
3195f9996aaSopenharmony_ci    prebuilt = true
3205f9996aaSopenharmony_ci    install_enable = true
3215f9996aaSopenharmony_ci    if (defined(invoker.install_enable)) {
3225f9996aaSopenharmony_ci      install_enable = invoker.install_enable
3235f9996aaSopenharmony_ci    }
3245f9996aaSopenharmony_ci    if (defined(invoker.symlink_path)) {
3255f9996aaSopenharmony_ci      symlink_path = invoker.symlink_path
3265f9996aaSopenharmony_ci    }
3275f9996aaSopenharmony_ci  }
3285f9996aaSopenharmony_ci}
329