• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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