xref: /build/ohos/sdk/BUILD.gn (revision 5f9996aa)
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/ohos/build_var.gni")
155f9996aaSopenharmony_ciimport("//build/ohos/sdk/sdk.gni")
165f9996aaSopenharmony_ciimport("//build/ohos_var.gni")
175f9996aaSopenharmony_ciimport("${build_configs_path}/platforms_list.gni")
185f9996aaSopenharmony_ci
195f9996aaSopenharmony_ciif (!use_current_sdk) {
205f9996aaSopenharmony_ci  parse_script = "//build/ohos/sdk/parse_sdk_description.py"
215f9996aaSopenharmony_ci  ohos_sdk_description_file = "//build/ohos/sdk/ohos_sdk_description_std.json"
225f9996aaSopenharmony_ci  if (defined(ext_sdk_config_file) && ext_sdk_config_file != "") {
235f9996aaSopenharmony_ci    ohos_sdk_description_file = ext_sdk_config_file
245f9996aaSopenharmony_ci  }
255f9996aaSopenharmony_ci  if (sdk_for_hap_build) {
265f9996aaSopenharmony_ci    hap_build_sdk_config_parser =
275f9996aaSopenharmony_ci        "//build/ohos/sdk/generate_hap_build_sdk_config.py"
285f9996aaSopenharmony_ci    hap_build_sdk_description_file = "//out/sdk/ohos_sdk_description_hap.json"
295f9996aaSopenharmony_ci    hap_build_sdk_args = [
305f9996aaSopenharmony_ci      "--sdk-description-file",
315f9996aaSopenharmony_ci      rebase_path(ohos_sdk_description_file, root_build_dir),
325f9996aaSopenharmony_ci      "--output-hap-build-sdk-desc-file",
335f9996aaSopenharmony_ci      rebase_path(hap_build_sdk_description_file, root_build_dir),
345f9996aaSopenharmony_ci    ]
355f9996aaSopenharmony_ci    exec_script(hap_build_sdk_config_parser, hap_build_sdk_args)
365f9996aaSopenharmony_ci    ohos_sdk_description_file = hap_build_sdk_description_file
375f9996aaSopenharmony_ci  }
385f9996aaSopenharmony_ci
395f9996aaSopenharmony_ci  if (sdk_build_public) {
405f9996aaSopenharmony_ci    public_sdk_config_parser = "//build/ohos/sdk/parse_public_sdk.py"
415f9996aaSopenharmony_ci    ohos_sdk_pub_description_file =
425f9996aaSopenharmony_ci        "//out/sdk-public/ohos_sdk_pub_description_std.json"
435f9996aaSopenharmony_ci    public_sdk_args = [
445f9996aaSopenharmony_ci      "--sdk-description-file",
455f9996aaSopenharmony_ci      rebase_path(ohos_sdk_description_file, root_build_dir),
465f9996aaSopenharmony_ci      "--root-build-dir",
475f9996aaSopenharmony_ci      rebase_path("//", root_build_dir),
485f9996aaSopenharmony_ci      "--node-js",
495f9996aaSopenharmony_ci      rebase_path(nodejs, root_build_dir),
505f9996aaSopenharmony_ci      "--output-pub-sdk-desc-file",
515f9996aaSopenharmony_ci      rebase_path(ohos_sdk_pub_description_file, root_build_dir),
525f9996aaSopenharmony_ci    ]
535f9996aaSopenharmony_ci    exec_script(public_sdk_config_parser, public_sdk_args)
545f9996aaSopenharmony_ci    ohos_sdk_description_file = ohos_sdk_pub_description_file
555f9996aaSopenharmony_ci  }
565f9996aaSopenharmony_ci
575f9996aaSopenharmony_ci  generated_sdk_modules_gni = "${generated_files_dir}/ohos_sdk_modules.gni"
585f9996aaSopenharmony_ci  generated_sdk_types_file = "${generated_files_dir}/generated_sdk_types.txt"
595f9996aaSopenharmony_ci
605f9996aaSopenharmony_ci  parse_args = [
615f9996aaSopenharmony_ci    "--sdk-description-file",
625f9996aaSopenharmony_ci    rebase_path(ohos_sdk_description_file, root_build_dir),
635f9996aaSopenharmony_ci    "--sdk-modules-gni",
645f9996aaSopenharmony_ci    rebase_path(generated_sdk_modules_gni, root_build_dir),
655f9996aaSopenharmony_ci    "--sdk-install-info-file",
665f9996aaSopenharmony_ci    rebase_path(generated_sdk_module_install_paths, root_build_dir),
675f9996aaSopenharmony_ci    "--sdk-types-file",
685f9996aaSopenharmony_ci    rebase_path(generated_sdk_types_file, root_build_dir),
695f9996aaSopenharmony_ci    "--base-platform",
705f9996aaSopenharmony_ci    "phone",
715f9996aaSopenharmony_ci    "--variant-to-product",
725f9996aaSopenharmony_ci    rebase_path("./variant_to_product.json", root_build_dir),
735f9996aaSopenharmony_ci    "--source-root-dir",
745f9996aaSopenharmony_ci    rebase_path("//", root_build_dir),
755f9996aaSopenharmony_ci    "--node-js",
765f9996aaSopenharmony_ci    rebase_path(nodejs, root_build_dir),
775f9996aaSopenharmony_ci  ]
785f9996aaSopenharmony_ci  foreach(p, target_platform_list) {
795f9996aaSopenharmony_ci    parse_args += [
805f9996aaSopenharmony_ci      "--platforms",
815f9996aaSopenharmony_ci      p,
825f9996aaSopenharmony_ci    ]
835f9996aaSopenharmony_ci  }
845f9996aaSopenharmony_ci
855f9996aaSopenharmony_ci  exec_script(parse_script, parse_args)
865f9996aaSopenharmony_ci
875f9996aaSopenharmony_ci  sdk_types = read_file(generated_sdk_types_file, "list lines")
885f9996aaSopenharmony_ci
895f9996aaSopenharmony_ci  import("${generated_sdk_modules_gni}")
905f9996aaSopenharmony_ci
915f9996aaSopenharmony_ci  generate_all_types_sdk_script = "//build/ohos/sdk/generate_all_types_sdk.py"
925f9996aaSopenharmony_ci  generated_build_gn = "$generated_files_dir/BUILD.gn"
935f9996aaSopenharmony_ci  generate_args = [
945f9996aaSopenharmony_ci    "--sdk-modules",
955f9996aaSopenharmony_ci    "ohos_sdk_modules",
965f9996aaSopenharmony_ci    "--output",
975f9996aaSopenharmony_ci    rebase_path(generated_build_gn, root_build_dir),
985f9996aaSopenharmony_ci    "--current-dir",
995f9996aaSopenharmony_ci    get_path_info(sdk_base_build_gn, "dir"),
1005f9996aaSopenharmony_ci    "--generated-sdk-modules-gni",
1015f9996aaSopenharmony_ci    generated_sdk_modules_gni,
1025f9996aaSopenharmony_ci    "--type2displayname",
1035f9996aaSopenharmony_ci    rebase_path("./type_to_display_name.json", root_build_dir),
1045f9996aaSopenharmony_ci    "--api-version",
1055f9996aaSopenharmony_ci    api_version,
1065f9996aaSopenharmony_ci    "--release-type",
1075f9996aaSopenharmony_ci    release_type,
1085f9996aaSopenharmony_ci    "--meta-version",
1095f9996aaSopenharmony_ci    meta_version,
1105f9996aaSopenharmony_ci  ]
1115f9996aaSopenharmony_ci
1125f9996aaSopenharmony_ci  foreach(os, sdk_systems) {
1135f9996aaSopenharmony_ci    generate_args += [
1145f9996aaSopenharmony_ci      "--sdk-systems",
1155f9996aaSopenharmony_ci      os,
1165f9996aaSopenharmony_ci    ]
1175f9996aaSopenharmony_ci  }
1185f9996aaSopenharmony_ci
1195f9996aaSopenharmony_ci  foreach(sdk_type, sdk_types) {
1205f9996aaSopenharmony_ci    generate_args += [
1215f9996aaSopenharmony_ci      "--sdk-types",
1225f9996aaSopenharmony_ci      sdk_type,
1235f9996aaSopenharmony_ci    ]
1245f9996aaSopenharmony_ci  }
1255f9996aaSopenharmony_ci
1265f9996aaSopenharmony_ci  exec_script(generate_all_types_sdk_script, generate_args)
1275f9996aaSopenharmony_ci
1285f9996aaSopenharmony_ci  action_with_pydeps("generate_sdk_notice") {
1295f9996aaSopenharmony_ci    deps = [ "${generated_files_dir}:generated_ohos_sdk" ]
1305f9996aaSopenharmony_ci    inputs = []
1315f9996aaSopenharmony_ci
1325f9996aaSopenharmony_ci    script = "//build/ohos/notice/merge_notice_files.py"
1335f9996aaSopenharmony_ci    depfile = "$target_gen_dir/$target_name.d"
1345f9996aaSopenharmony_ci    _install_path = "${target_out_dir}/SDK_NOTICE_FILES/"
1355f9996aaSopenharmony_ci
1365f9996aaSopenharmony_ci    outputs = [
1375f9996aaSopenharmony_ci      sdk_notice_txt,
1385f9996aaSopenharmony_ci      sdk_notice_gz,
1395f9996aaSopenharmony_ci    ]
1405f9996aaSopenharmony_ci    args = [
1415f9996aaSopenharmony_ci      "--image-name",
1425f9996aaSopenharmony_ci      "sdk",
1435f9996aaSopenharmony_ci      "--notice-root-dir",
1445f9996aaSopenharmony_ci      rebase_path(sdk_notice_dir, root_build_dir),
1455f9996aaSopenharmony_ci      "--output-notice-txt",
1465f9996aaSopenharmony_ci      rebase_path(sdk_notice_txt, root_build_dir),
1475f9996aaSopenharmony_ci      "--output-notice-gz",
1485f9996aaSopenharmony_ci      rebase_path(sdk_notice_gz, root_build_dir),
1495f9996aaSopenharmony_ci      "--notice-title",
1505f9996aaSopenharmony_ci      "Notices for files contained in SDK in this directory:",
1515f9996aaSopenharmony_ci      "--static-library-notice-dir",
1525f9996aaSopenharmony_ci      rebase_path(static_libraries_notice_dir, root_build_dir),
1535f9996aaSopenharmony_ci      "--target-cpu",
1545f9996aaSopenharmony_ci      target_cpu,
1555f9996aaSopenharmony_ci      "--depfile",
1565f9996aaSopenharmony_ci      rebase_path(depfile, root_build_dir),
1575f9996aaSopenharmony_ci    ]
1585f9996aaSopenharmony_ci
1595f9996aaSopenharmony_ci    foreach(type, sdk_types) {
1605f9996aaSopenharmony_ci      foreach(os, sdk_systems) {
1615f9996aaSopenharmony_ci        args += [
1625f9996aaSopenharmony_ci          "--collected-notice-zipfile",
1635f9996aaSopenharmony_ci          rebase_path("${sdk_notice_archive_dir}/${os}-${type}.zip",
1645f9996aaSopenharmony_ci                      root_build_dir),
1655f9996aaSopenharmony_ci        ]
1665f9996aaSopenharmony_ci        inputs += [ "${sdk_notice_archive_dir}/${os}-${type}.zip" ]
1675f9996aaSopenharmony_ci      }
1685f9996aaSopenharmony_ci    }
1695f9996aaSopenharmony_ci  }
1705f9996aaSopenharmony_ci
1715f9996aaSopenharmony_ci  action("verify_sdk_notice_file") {
1725f9996aaSopenharmony_ci    deps = [ ":generate_sdk_notice" ]
1735f9996aaSopenharmony_ci
1745f9996aaSopenharmony_ci    script = "//build/core/build_scripts/verify_notice.sh"
1755f9996aaSopenharmony_ci    _verify_result = "${target_out_dir}/sdk_notice_verify_result.out"
1765f9996aaSopenharmony_ci
1775f9996aaSopenharmony_ci    outputs = [ _verify_result ]
1785f9996aaSopenharmony_ci
1795f9996aaSopenharmony_ci    args = [
1805f9996aaSopenharmony_ci      rebase_path(sdk_notice_txt, root_build_dir),
1815f9996aaSopenharmony_ci      rebase_path(_verify_result, root_build_dir),
1825f9996aaSopenharmony_ci      rebase_path("${product_output_dir}/${product_name}", root_build_dir),
1835f9996aaSopenharmony_ci    ]
1845f9996aaSopenharmony_ci  }
1855f9996aaSopenharmony_ci
1865f9996aaSopenharmony_ci  group("ohos_sdk_pre") {
1875f9996aaSopenharmony_ci    deps = []
1885f9996aaSopenharmony_ci    if (enable_process_notice) {
1895f9996aaSopenharmony_ci      deps += [
1905f9996aaSopenharmony_ci        ":generate_sdk_notice",
1915f9996aaSopenharmony_ci        ":verify_sdk_notice_file",
1925f9996aaSopenharmony_ci      ]
1935f9996aaSopenharmony_ci    }
1945f9996aaSopenharmony_ci    deps += [ "${generated_files_dir}:generated_ohos_sdk" ]
1955f9996aaSopenharmony_ci  }
1965f9996aaSopenharmony_ci
1975f9996aaSopenharmony_ci  sdk_delivery_list = "//build/ohos/sdk/sdk_delivery_list.json"
1985f9996aaSopenharmony_ci  action("check_sdk_completeness") {
1995f9996aaSopenharmony_ci    deps = [
2005f9996aaSopenharmony_ci      ":ohos_sdk",
2015f9996aaSopenharmony_ci      "//build/ohos/ndk:ohos_ndk",
2025f9996aaSopenharmony_ci    ]
2035f9996aaSopenharmony_ci    if (host_os == "mac" && enable_sign) {
2045f9996aaSopenharmony_ci      deps += [ ":sign_sdk" ]
2055f9996aaSopenharmony_ci    }
2065f9996aaSopenharmony_ci
2075f9996aaSopenharmony_ci    script = "//build/ohos/sdk/check_sdk_completeness.py"
2085f9996aaSopenharmony_ci    _verify_result = "${target_out_dir}/check_sdk_completeness.txt"
2095f9996aaSopenharmony_ci
2105f9996aaSopenharmony_ci    outputs = [ _verify_result ]
2115f9996aaSopenharmony_ci
2125f9996aaSopenharmony_ci    args = [
2135f9996aaSopenharmony_ci      "--sdk-delivery-list",
2145f9996aaSopenharmony_ci      rebase_path(sdk_delivery_list, root_build_dir),
2155f9996aaSopenharmony_ci      root_build_dir,
2165f9996aaSopenharmony_ci      "--sdk-archive-dir",
2175f9996aaSopenharmony_ci      rebase_path("${product_output_dir}/${product_name}", root_build_dir),
2185f9996aaSopenharmony_ci      product_name,
2195f9996aaSopenharmony_ci      sdk_version,
2205f9996aaSopenharmony_ci      "--sdk-platform",
2215f9996aaSopenharmony_ci      sdk_platform,
2225f9996aaSopenharmony_ci    ]
2235f9996aaSopenharmony_ci  }
2245f9996aaSopenharmony_ci
2255f9996aaSopenharmony_ci  action_with_pydeps("add_notice_file") {
2265f9996aaSopenharmony_ci    deps = [
2275f9996aaSopenharmony_ci      ":generate_sdk_notice",
2285f9996aaSopenharmony_ci      ":ohos_sdk_pre",
2295f9996aaSopenharmony_ci    ]
2305f9996aaSopenharmony_ci    script = "//build/ohos/sdk/add_notice_file.py"
2315f9996aaSopenharmony_ci    _output = target_gen_dir + "/$target_name.stamp"
2325f9996aaSopenharmony_ci    depfile = "$target_gen_dir/$target_name.d"
2335f9996aaSopenharmony_ci    args = [
2345f9996aaSopenharmony_ci      "--sdk-notice-file",
2355f9996aaSopenharmony_ci      rebase_path(sdk_notice_txt, root_build_dir),
2365f9996aaSopenharmony_ci      "--sdk-archive-dir",
2375f9996aaSopenharmony_ci      rebase_path("${product_output_dir}/${product_name}", root_build_dir),
2385f9996aaSopenharmony_ci      "--output",
2395f9996aaSopenharmony_ci      rebase_path(_output, root_build_dir),
2405f9996aaSopenharmony_ci      "--depfile",
2415f9996aaSopenharmony_ci      rebase_path(depfile, root_build_dir),
2425f9996aaSopenharmony_ci      "--skip-pattern",
2435f9996aaSopenharmony_ci      "native",
2445f9996aaSopenharmony_ci    ]
2455f9996aaSopenharmony_ci
2465f9996aaSopenharmony_ci    inputs = [ sdk_notice_txt ]
2475f9996aaSopenharmony_ci    outputs = [ _output ]
2485f9996aaSopenharmony_ci  }
2495f9996aaSopenharmony_ci
2505f9996aaSopenharmony_ci  action("sign_sdk") {
2515f9996aaSopenharmony_ci    deps = [
2525f9996aaSopenharmony_ci      ":ohos_sdk",
2535f9996aaSopenharmony_ci      "//build/ohos/ndk:ohos_ndk",
2545f9996aaSopenharmony_ci    ]
2555f9996aaSopenharmony_ci    script = "//build/scripts/sign_sdk.py"
2565f9996aaSopenharmony_ci    args = [
2575f9996aaSopenharmony_ci      "--sdk-out-dir",
2585f9996aaSopenharmony_ci      rebase_path(ohos_sdk_out_dir, root_build_dir),
2595f9996aaSopenharmony_ci    ]
2605f9996aaSopenharmony_ci    outputs = [ "$target_out_dir/$target_name.stamp" ]
2615f9996aaSopenharmony_ci  }
2625f9996aaSopenharmony_ci
2635f9996aaSopenharmony_ci  group("ohos_sdk") {
2645f9996aaSopenharmony_ci    deps = []
2655f9996aaSopenharmony_ci    if (enable_process_notice) {
2665f9996aaSopenharmony_ci      deps += [ ":add_notice_file" ]
2675f9996aaSopenharmony_ci    }
2685f9996aaSopenharmony_ci    deps += [ ":ohos_sdk_pre" ]
2695f9996aaSopenharmony_ci  }
2705f9996aaSopenharmony_ci
2715f9996aaSopenharmony_ci  group("ohos_sdk_verify") {
2725f9996aaSopenharmony_ci    deps = []
2735f9996aaSopenharmony_ci
2745f9996aaSopenharmony_ci    if (sdk_check_flag) {
2755f9996aaSopenharmony_ci      deps += [ ":check_sdk_completeness" ]
2765f9996aaSopenharmony_ci    }
2775f9996aaSopenharmony_ci  }
2785f9996aaSopenharmony_ci}
279