1# Copyright (c) 2021 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14import("//build/ohos/build_var.gni") 15import("//build/ohos/sdk/sdk.gni") 16import("//build/ohos_var.gni") 17import("${build_configs_path}/platforms_list.gni") 18 19if (!use_current_sdk) { 20 parse_script = "//build/ohos/sdk/parse_sdk_description.py" 21 ohos_sdk_description_file = "//build/ohos/sdk/ohos_sdk_description_std.json" 22 if (defined(ext_sdk_config_file) && ext_sdk_config_file != "") { 23 ohos_sdk_description_file = ext_sdk_config_file 24 } 25 if (sdk_for_hap_build) { 26 hap_build_sdk_config_parser = 27 "//build/ohos/sdk/generate_hap_build_sdk_config.py" 28 hap_build_sdk_description_file = "//out/sdk/ohos_sdk_description_hap.json" 29 hap_build_sdk_args = [ 30 "--sdk-description-file", 31 rebase_path(ohos_sdk_description_file, root_build_dir), 32 "--output-hap-build-sdk-desc-file", 33 rebase_path(hap_build_sdk_description_file, root_build_dir), 34 ] 35 exec_script(hap_build_sdk_config_parser, hap_build_sdk_args) 36 ohos_sdk_description_file = hap_build_sdk_description_file 37 } 38 39 if (sdk_build_public) { 40 public_sdk_config_parser = "//build/ohos/sdk/parse_public_sdk.py" 41 ohos_sdk_pub_description_file = 42 "//out/sdk-public/ohos_sdk_pub_description_std.json" 43 public_sdk_args = [ 44 "--sdk-description-file", 45 rebase_path(ohos_sdk_description_file, root_build_dir), 46 "--root-build-dir", 47 rebase_path("//", root_build_dir), 48 "--node-js", 49 rebase_path(nodejs, root_build_dir), 50 "--output-pub-sdk-desc-file", 51 rebase_path(ohos_sdk_pub_description_file, root_build_dir), 52 ] 53 exec_script(public_sdk_config_parser, public_sdk_args) 54 ohos_sdk_description_file = ohos_sdk_pub_description_file 55 } 56 57 arkts_sdk_config_parser = "//build/ohos/sdk/parse_interface_sdk.py" 58 ohos_sdk_arkts_description_file = 59 "${interface_sdk_path}/ohos_sdk_pub_description_std.json" 60 61 arkts_sdk_args = [ 62 "--sdk-description-file", 63 rebase_path(ohos_sdk_description_file, root_build_dir), 64 "--root-build-dir", 65 rebase_path("//", root_build_dir), 66 "--node-js", 67 rebase_path(nodejs, root_build_dir), 68 "--output-arkts-sdk-desc-file", 69 rebase_path(ohos_sdk_arkts_description_file, root_build_dir), 70 "--sdk-build-public", 71 "${sdk_build_public}", 72 "--sdk-build-arkts", 73 "${sdk_build_arkts}", 74 "--npm-path", 75 rebase_path(npm, root_build_dir), 76 "--output-interface-sdk", 77 rebase_path(interface_sdk_path, root_build_dir), 78 ] 79 exec_script(arkts_sdk_config_parser, arkts_sdk_args) 80 ohos_sdk_description_file = ohos_sdk_arkts_description_file 81 82 generated_sdk_modules_gni = "${generated_files_dir}/ohos_sdk_modules.gni" 83 generated_sdk_types_file = "${generated_files_dir}/generated_sdk_types.txt" 84 85 parse_args = [ 86 "--sdk-description-file", 87 rebase_path(ohos_sdk_description_file, root_build_dir), 88 "--sdk-modules-gni", 89 rebase_path(generated_sdk_modules_gni, root_build_dir), 90 "--sdk-install-info-file", 91 rebase_path(generated_sdk_module_install_paths, root_build_dir), 92 "--sdk-types-file", 93 rebase_path(generated_sdk_types_file, root_build_dir), 94 "--base-platform", 95 "phone", 96 "--variant-to-product", 97 rebase_path("./variant_to_product.json", root_build_dir), 98 "--source-root-dir", 99 rebase_path("//", root_build_dir), 100 "--node-js", 101 rebase_path(nodejs, root_build_dir), 102 ] 103 foreach(p, target_platform_list) { 104 parse_args += [ 105 "--platforms", 106 p, 107 ] 108 } 109 110 exec_script(parse_script, parse_args) 111 112 sdk_types = read_file(generated_sdk_types_file, "list lines") 113 114 import("${generated_sdk_modules_gni}") 115 116 generate_all_types_sdk_script = "//build/ohos/sdk/generate_all_types_sdk.py" 117 generated_build_gn = "$generated_files_dir/BUILD.gn" 118 generate_args = [ 119 "--sdk-modules", 120 "ohos_sdk_modules", 121 "--output", 122 rebase_path(generated_build_gn, root_build_dir), 123 "--current-dir", 124 get_path_info(sdk_base_build_gn, "dir"), 125 "--generated-sdk-modules-gni", 126 generated_sdk_modules_gni, 127 "--type2displayname", 128 rebase_path("./type_to_display_name.json", root_build_dir), 129 "--api-version", 130 api_version, 131 "--release-type", 132 release_type, 133 "--meta-version", 134 meta_version, 135 ] 136 137 foreach(os, sdk_systems) { 138 generate_args += [ 139 "--sdk-systems", 140 os, 141 ] 142 } 143 144 foreach(sdk_type, sdk_types) { 145 generate_args += [ 146 "--sdk-types", 147 sdk_type, 148 ] 149 } 150 151 exec_script(generate_all_types_sdk_script, generate_args) 152 153 action_with_pydeps("generate_sdk_notice") { 154 deps = [ "${generated_files_dir}:generated_ohos_sdk" ] 155 inputs = [] 156 157 script = "//build/ohos/notice/merge_notice_files.py" 158 depfile = "$target_gen_dir/$target_name.d" 159 _install_path = "${target_out_dir}/SDK_NOTICE_FILES/" 160 161 outputs = [ 162 sdk_notice_txt, 163 sdk_notice_gz, 164 ] 165 args = [ 166 "--image-name", 167 "sdk", 168 "--notice-root-dir", 169 rebase_path(sdk_notice_dir, root_build_dir), 170 "--output-notice-txt", 171 rebase_path(sdk_notice_txt, root_build_dir), 172 "--output-notice-gz", 173 rebase_path(sdk_notice_gz, root_build_dir), 174 "--notice-title", 175 "Notices for files contained in SDK in this directory:", 176 "--static-library-notice-dir", 177 rebase_path(static_libraries_notice_dir, root_build_dir), 178 "--target-cpu", 179 target_cpu, 180 "--depfile", 181 rebase_path(depfile, root_build_dir), 182 ] 183 184 foreach(type, sdk_types) { 185 foreach(os, sdk_systems) { 186 args += [ 187 "--collected-notice-zipfile", 188 rebase_path("${sdk_notice_archive_dir}/${os}-${type}.zip", 189 root_build_dir), 190 ] 191 inputs += [ "${sdk_notice_archive_dir}/${os}-${type}.zip" ] 192 } 193 } 194 } 195 196 action("verify_sdk_notice_file") { 197 deps = [ ":generate_sdk_notice" ] 198 199 script = "//build/core/build_scripts/verify_notice.sh" 200 _verify_result = "${target_out_dir}/sdk_notice_verify_result.out" 201 202 outputs = [ _verify_result ] 203 204 args = [ 205 rebase_path(sdk_notice_txt, root_build_dir), 206 rebase_path(_verify_result, root_build_dir), 207 rebase_path("${product_output_dir}/${product_name}", root_build_dir), 208 ] 209 } 210 211 group("ohos_sdk_pre") { 212 deps = [] 213 if (enable_process_notice) { 214 deps += [ 215 ":generate_sdk_notice", 216 ":verify_sdk_notice_file", 217 ] 218 } 219 deps += [ "${generated_files_dir}:generated_ohos_sdk" ] 220 } 221 222 sdk_delivery_list = "//build/ohos/sdk/sdk_delivery_list.json" 223 action("check_sdk_completeness") { 224 deps = [ 225 ":ohos_sdk", 226 "//build/ohos/ndk:ohos_ndk", 227 ] 228 if (host_os == "mac" && enable_sign) { 229 deps += [ ":sign_sdk" ] 230 } 231 232 script = "//build/ohos/sdk/check_sdk_completeness.py" 233 _verify_result = "${target_out_dir}/check_sdk_completeness.txt" 234 235 outputs = [ _verify_result ] 236 237 args = [ 238 "--sdk-delivery-list", 239 rebase_path(sdk_delivery_list, root_build_dir), 240 root_build_dir, 241 "--sdk-archive-dir", 242 rebase_path("${product_output_dir}/${product_name}", root_build_dir), 243 product_name, 244 sdk_version, 245 "--sdk-platform", 246 sdk_platform, 247 ] 248 } 249 250 action_with_pydeps("add_notice_file") { 251 deps = [ 252 ":generate_sdk_notice", 253 ":ohos_sdk_pre", 254 ] 255 script = "//build/ohos/sdk/add_notice_file.py" 256 _output = target_gen_dir + "/$target_name.stamp" 257 depfile = "$target_gen_dir/$target_name.d" 258 args = [ 259 "--sdk-notice-file", 260 rebase_path(sdk_notice_txt, root_build_dir), 261 "--sdk-archive-dir", 262 rebase_path("${product_output_dir}/${product_name}", root_build_dir), 263 "--output", 264 rebase_path(_output, root_build_dir), 265 "--depfile", 266 rebase_path(depfile, root_build_dir), 267 "--skip-pattern", 268 "native", 269 ] 270 271 inputs = [ sdk_notice_txt ] 272 outputs = [ _output ] 273 } 274 275 action("sign_sdk") { 276 deps = [ 277 ":ohos_sdk", 278 "//build/ohos/ndk:ohos_ndk", 279 ] 280 script = "//build/scripts/sign_sdk.py" 281 args = [ 282 "--sdk-out-dir", 283 rebase_path(ohos_sdk_out_dir, root_build_dir), 284 ] 285 outputs = [ "$target_out_dir/$target_name.stamp" ] 286 } 287 288 group("ohos_sdk") { 289 deps = [] 290 if (enable_process_notice) { 291 deps += [ ":add_notice_file" ] 292 } 293 deps += [ ":ohos_sdk_pre" ] 294 } 295 296 group("ohos_sdk_verify") { 297 deps = [] 298 299 if (sdk_check_flag) { 300 deps += [ ":check_sdk_completeness" ] 301 } 302 } 303} 304