1e509ee18Sopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd.
2e509ee18Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3e509ee18Sopenharmony_ci# you may not use this file except in compliance with the License.
4e509ee18Sopenharmony_ci# You may obtain a copy of the License at
5e509ee18Sopenharmony_ci#
6e509ee18Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0
7e509ee18Sopenharmony_ci#
8e509ee18Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9e509ee18Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10e509ee18Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11e509ee18Sopenharmony_ci# See the License for the specific language governing permissions and
12e509ee18Sopenharmony_ci# limitations under the License.
13e509ee18Sopenharmony_ci
14e509ee18Sopenharmony_ciimport("$build_root/ark_var.gni")
15e509ee18Sopenharmony_ci
16e509ee18Sopenharmony_citemplate("ohos_executable") {
17e509ee18Sopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
18e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
19e509ee18Sopenharmony_ci    part_name = invoker.part_name
20e509ee18Sopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
21e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
22e509ee18Sopenharmony_ci    part_name = subsystem_name
23e509ee18Sopenharmony_ci  } else {
24e509ee18Sopenharmony_ci    subsystem_name = "arkcompiler"
25e509ee18Sopenharmony_ci    part_name = "common"
26e509ee18Sopenharmony_ci  }
27e509ee18Sopenharmony_ci  assert(part_name != "")
28e509ee18Sopenharmony_ci  assert(subsystem_name != "")
29e509ee18Sopenharmony_ci
30e509ee18Sopenharmony_ci  if (defined(invoker.unit_test) && invoker.unit_test) {
31e509ee18Sopenharmony_ci    output_dir = invoker.test_output_dir
32e509ee18Sopenharmony_ci  } else {
33e509ee18Sopenharmony_ci    output_dir = "${root_out_dir}/${subsystem_name}/${part_name}"
34e509ee18Sopenharmony_ci  }
35e509ee18Sopenharmony_ci
36e509ee18Sopenharmony_ci  executable(target_name) {
37e509ee18Sopenharmony_ci    forward_variables_from(invoker,
38e509ee18Sopenharmony_ci                           "*",
39e509ee18Sopenharmony_ci                           [
40e509ee18Sopenharmony_ci                             "configs",
41e509ee18Sopenharmony_ci                             "remove_configs",
42e509ee18Sopenharmony_ci                             "subsystem_name",
43e509ee18Sopenharmony_ci                             "install_enable",
44e509ee18Sopenharmony_ci                             "part_name",
45e509ee18Sopenharmony_ci                             "use_exceptions",
46e509ee18Sopenharmony_ci                             "static_link",
47e509ee18Sopenharmony_ci                             "output_dir",
48e509ee18Sopenharmony_ci                             "unit_test",
49e509ee18Sopenharmony_ci                             "external_deps",
50e509ee18Sopenharmony_ci                             "stack_protector_ret",
51e509ee18Sopenharmony_ci                             "use_rtti",
52e509ee18Sopenharmony_ci                           ])
53e509ee18Sopenharmony_ci    output_dir = output_dir
54e509ee18Sopenharmony_ci    if (defined(invoker.configs)) {
55e509ee18Sopenharmony_ci      configs += invoker.configs
56e509ee18Sopenharmony_ci    }
57e509ee18Sopenharmony_ci
58e509ee18Sopenharmony_ci    if (defined(invoker.remove_configs)) {
59e509ee18Sopenharmony_ci      configs -= invoker.remove_configs
60e509ee18Sopenharmony_ci    }
61e509ee18Sopenharmony_ci
62e509ee18Sopenharmony_ci    if (defined(invoker.use_exceptions) && invoker.use_exceptions) {
63e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:exceptions" ]
64e509ee18Sopenharmony_ci      ldflags = []
65e509ee18Sopenharmony_ci    }
66e509ee18Sopenharmony_ci    if (defined(invoker.use_rtti) && invoker.use_rtti) {
67e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:rtti" ]
68e509ee18Sopenharmony_ci    }
69e509ee18Sopenharmony_ci    if (!defined(libs)) {
70e509ee18Sopenharmony_ci      libs = []
71e509ee18Sopenharmony_ci    }
72e509ee18Sopenharmony_ci    if (!defined(ldflags)) {
73e509ee18Sopenharmony_ci      ldflags = []
74e509ee18Sopenharmony_ci    }
75e509ee18Sopenharmony_ci    if (!defined(inputs)) {
76e509ee18Sopenharmony_ci      inputs = []
77e509ee18Sopenharmony_ci    }
78e509ee18Sopenharmony_ci
79e509ee18Sopenharmony_ci    if (defined(version_script)) {
80e509ee18Sopenharmony_ci      _version_script = rebase_path(version_script, root_build_dir)
81e509ee18Sopenharmony_ci      inputs += [ version_script ]
82e509ee18Sopenharmony_ci      ldflags += [ "-Wl,--version-script=${_version_script}" ]
83e509ee18Sopenharmony_ci    }
84e509ee18Sopenharmony_ci
85e509ee18Sopenharmony_ci    if (defined(invoker.static_link) && invoker.static_link) {
86e509ee18Sopenharmony_ci      no_default_deps = true
87e509ee18Sopenharmony_ci      ldflags += [ "-static" ]
88e509ee18Sopenharmony_ci      configs -= [ "$build_root/config:executable_config" ]
89e509ee18Sopenharmony_ci      if (is_ohos) {
90e509ee18Sopenharmony_ci        import("$build_root/config/ohos/musl.gni")
91e509ee18Sopenharmony_ci        deps += [ "$build_root/third_party_gn/musl:soft_static_libs" ]
92e509ee18Sopenharmony_ci      }
93e509ee18Sopenharmony_ci    } else if (is_ohos) {
94e509ee18Sopenharmony_ci      if (current_cpu == "arm" || current_cpu == "arm64") {
95e509ee18Sopenharmony_ci        libs += [ "unwind" ]
96e509ee18Sopenharmony_ci      }
97e509ee18Sopenharmony_ci      libs += [ "c++" ]
98e509ee18Sopenharmony_ci    }
99e509ee18Sopenharmony_ci
100e509ee18Sopenharmony_ci    if (defined(invoker.external_deps) && invoker.external_deps != []) {
101e509ee18Sopenharmony_ci      if (!defined(deps)) {
102e509ee18Sopenharmony_ci        deps = []
103e509ee18Sopenharmony_ci      }
104e509ee18Sopenharmony_ci
105e509ee18Sopenharmony_ci      external_deps_temp_file =
106e509ee18Sopenharmony_ci          "$target_gen_dir/${part_name}__${target_name}_external_deps_temp.json"
107e509ee18Sopenharmony_ci      arguments = [
108e509ee18Sopenharmony_ci        "--root-src-dir",
109e509ee18Sopenharmony_ci        rebase_path("//", root_build_dir),
110e509ee18Sopenharmony_ci        "--external-deps-temp-file",
111e509ee18Sopenharmony_ci        rebase_path(external_deps_temp_file, root_build_dir),
112e509ee18Sopenharmony_ci        "--external-deps",
113e509ee18Sopenharmony_ci      ]
114e509ee18Sopenharmony_ci      arguments += invoker.external_deps
115e509ee18Sopenharmony_ci      exec_script("$build_root/templates/cxx/external_deps_handler.py",
116e509ee18Sopenharmony_ci                  arguments,
117e509ee18Sopenharmony_ci                  "string")
118e509ee18Sopenharmony_ci      external_deps_info = read_file(external_deps_temp_file, "json")
119e509ee18Sopenharmony_ci      if (defined(external_deps_info.deps)) {
120e509ee18Sopenharmony_ci        deps += external_deps_info.deps
121e509ee18Sopenharmony_ci      }
122e509ee18Sopenharmony_ci    }
123e509ee18Sopenharmony_ci  }
124e509ee18Sopenharmony_ci}
125e509ee18Sopenharmony_ci
126e509ee18Sopenharmony_citemplate("ohos_static_library") {
127e509ee18Sopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
128e509ee18Sopenharmony_ci    part_name = invoker.part_name
129e509ee18Sopenharmony_ci  } else if (defined(invoker.part_name)) {
130e509ee18Sopenharmony_ci    part_name = invoker.part_name
131e509ee18Sopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
132e509ee18Sopenharmony_ci    part_name = invoker.subsystem_name
133e509ee18Sopenharmony_ci  } else {
134e509ee18Sopenharmony_ci    part_name = "common"
135e509ee18Sopenharmony_ci  }
136e509ee18Sopenharmony_ci  assert(part_name != "")
137e509ee18Sopenharmony_ci
138e509ee18Sopenharmony_ci  static_library(target_name) {
139e509ee18Sopenharmony_ci    forward_variables_from(invoker,
140e509ee18Sopenharmony_ci                           "*",
141e509ee18Sopenharmony_ci                           [
142e509ee18Sopenharmony_ci                             "configs",
143e509ee18Sopenharmony_ci                             "remove_configs",
144e509ee18Sopenharmony_ci                             "subsystem_name",
145e509ee18Sopenharmony_ci                             "part_name",
146e509ee18Sopenharmony_ci                             "use_exceptions",
147e509ee18Sopenharmony_ci                             "external_deps",
148e509ee18Sopenharmony_ci                             "stack_protector_ret",
149e509ee18Sopenharmony_ci                             "use_rtti",
150e509ee18Sopenharmony_ci                           ])
151e509ee18Sopenharmony_ci    if (defined(invoker.configs)) {
152e509ee18Sopenharmony_ci      configs += invoker.configs
153e509ee18Sopenharmony_ci    }
154e509ee18Sopenharmony_ci
155e509ee18Sopenharmony_ci    if (defined(invoker.remove_configs)) {
156e509ee18Sopenharmony_ci      configs -= invoker.remove_configs
157e509ee18Sopenharmony_ci    }
158e509ee18Sopenharmony_ci
159e509ee18Sopenharmony_ci    if (defined(invoker.use_exceptions) && invoker.use_exceptions) {
160e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:exceptions" ]
161e509ee18Sopenharmony_ci      ldflags = []
162e509ee18Sopenharmony_ci    }
163e509ee18Sopenharmony_ci
164e509ee18Sopenharmony_ci    if (defined(invoker.use_rtti) && invoker.use_rtti) {
165e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:rtti" ]
166e509ee18Sopenharmony_ci    }
167e509ee18Sopenharmony_ci    if (!defined(libs)) {
168e509ee18Sopenharmony_ci      libs = []
169e509ee18Sopenharmony_ci    }
170e509ee18Sopenharmony_ci    if (!defined(include_dirs)) {
171e509ee18Sopenharmony_ci      include_dirs = []
172e509ee18Sopenharmony_ci    }
173e509ee18Sopenharmony_ci
174e509ee18Sopenharmony_ci    if (defined(invoker.external_deps) && invoker.external_deps != []) {
175e509ee18Sopenharmony_ci      if (!defined(deps)) {
176e509ee18Sopenharmony_ci        deps = []
177e509ee18Sopenharmony_ci      }
178e509ee18Sopenharmony_ci
179e509ee18Sopenharmony_ci      external_deps_temp_file =
180e509ee18Sopenharmony_ci          "$target_gen_dir/${part_name}__${target_name}_external_deps_temp.json"
181e509ee18Sopenharmony_ci      arguments = [
182e509ee18Sopenharmony_ci        "--root-src-dir",
183e509ee18Sopenharmony_ci        rebase_path("//", root_build_dir),
184e509ee18Sopenharmony_ci        "--external-deps-temp-file",
185e509ee18Sopenharmony_ci        rebase_path(external_deps_temp_file, root_build_dir),
186e509ee18Sopenharmony_ci        "--external-deps",
187e509ee18Sopenharmony_ci      ]
188e509ee18Sopenharmony_ci      arguments += invoker.external_deps
189e509ee18Sopenharmony_ci      exec_script("$build_root/templates/cxx/external_deps_handler.py",
190e509ee18Sopenharmony_ci                  arguments,
191e509ee18Sopenharmony_ci                  "string")
192e509ee18Sopenharmony_ci      external_deps_info = read_file(external_deps_temp_file, "json")
193e509ee18Sopenharmony_ci      if (defined(external_deps_info.deps)) {
194e509ee18Sopenharmony_ci        deps += external_deps_info.deps
195e509ee18Sopenharmony_ci      }
196e509ee18Sopenharmony_ci    }
197e509ee18Sopenharmony_ci  }
198e509ee18Sopenharmony_ci}
199e509ee18Sopenharmony_ci
200e509ee18Sopenharmony_citemplate("ohos_shared_library") {
201e509ee18Sopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
202e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
203e509ee18Sopenharmony_ci    part_name = invoker.part_name
204e509ee18Sopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
205e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
206e509ee18Sopenharmony_ci    part_name = subsystem_name
207e509ee18Sopenharmony_ci  } else {
208e509ee18Sopenharmony_ci    subsystem_name = "arkcompiler"
209e509ee18Sopenharmony_ci    part_name = "common"
210e509ee18Sopenharmony_ci  }
211e509ee18Sopenharmony_ci  output_dir = "${root_out_dir}/${subsystem_name}/${part_name}"
212e509ee18Sopenharmony_ci  shared_library(target_name) {
213e509ee18Sopenharmony_ci    forward_variables_from(invoker,
214e509ee18Sopenharmony_ci                           "*",
215e509ee18Sopenharmony_ci                           [
216e509ee18Sopenharmony_ci                             "relative_install_dir",
217e509ee18Sopenharmony_ci                             "configs",
218e509ee18Sopenharmony_ci                             "subsystem_name",
219e509ee18Sopenharmony_ci                             "install_enable",
220e509ee18Sopenharmony_ci                             "part_name",
221e509ee18Sopenharmony_ci                             "output_dir",
222e509ee18Sopenharmony_ci                             "install_images",
223e509ee18Sopenharmony_ci                             "use_exceptions",
224e509ee18Sopenharmony_ci                             "external_deps",
225e509ee18Sopenharmony_ci                             "stack_protector_ret",
226e509ee18Sopenharmony_ci                             "innerapi_tags",
227e509ee18Sopenharmony_ci                             "use_rtti",
228e509ee18Sopenharmony_ci                           ])
229e509ee18Sopenharmony_ci    output_dir = output_dir
230e509ee18Sopenharmony_ci    if (defined(invoker.configs)) {
231e509ee18Sopenharmony_ci      configs += invoker.configs
232e509ee18Sopenharmony_ci    }
233e509ee18Sopenharmony_ci    if (defined(invoker.remove_configs)) {
234e509ee18Sopenharmony_ci      configs -= invoker.remove_configs
235e509ee18Sopenharmony_ci    }
236e509ee18Sopenharmony_ci
237e509ee18Sopenharmony_ci    if (!defined(libs)) {
238e509ee18Sopenharmony_ci      libs = []
239e509ee18Sopenharmony_ci    }
240e509ee18Sopenharmony_ci    if (!defined(ldflags)) {
241e509ee18Sopenharmony_ci      ldflags = []
242e509ee18Sopenharmony_ci    }
243e509ee18Sopenharmony_ci    if (!defined(inputs)) {
244e509ee18Sopenharmony_ci      inputs = []
245e509ee18Sopenharmony_ci    }
246e509ee18Sopenharmony_ci    if (defined(invoker.use_rtti) && invoker.use_rtti) {
247e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:rtti" ]
248e509ee18Sopenharmony_ci    }
249e509ee18Sopenharmony_ci
250e509ee18Sopenharmony_ci    if (defined(version_script)) {
251e509ee18Sopenharmony_ci      _version_script = rebase_path(version_script, root_build_dir)
252e509ee18Sopenharmony_ci      inputs += [ version_script ]
253e509ee18Sopenharmony_ci      ldflags += [ "-Wl,--version-script=${_version_script}" ]
254e509ee18Sopenharmony_ci    }
255e509ee18Sopenharmony_ci
256e509ee18Sopenharmony_ci    if (is_ohos) {
257e509ee18Sopenharmony_ci      if (defined(invoker.stl)) {
258e509ee18Sopenharmony_ci        cflags_cc += [
259e509ee18Sopenharmony_ci          "-nostdinc++",
260e509ee18Sopenharmony_ci          "-I" + rebase_path(
261e509ee18Sopenharmony_ci                  "//prebuilts/clang/ohos/${host_platform_dir}/llvm_ndk/include/c++/v1",
262e509ee18Sopenharmony_ci                  root_build_dir),
263e509ee18Sopenharmony_ci        ]
264e509ee18Sopenharmony_ci        ldflags += [
265e509ee18Sopenharmony_ci          "-nostdlib++",
266e509ee18Sopenharmony_ci          "-L" + rebase_path("${clang_stl_path}/${abi_target}/c++",
267e509ee18Sopenharmony_ci                             root_build_dir),
268e509ee18Sopenharmony_ci        ]
269e509ee18Sopenharmony_ci        libs += [ invoker.stl ]
270e509ee18Sopenharmony_ci      } else {
271e509ee18Sopenharmony_ci        if (current_cpu == "arm" || current_cpu == "arm64") {
272e509ee18Sopenharmony_ci          libs += [ "unwind" ]
273e509ee18Sopenharmony_ci        }
274e509ee18Sopenharmony_ci        libs += [ "c++" ]
275e509ee18Sopenharmony_ci      }
276e509ee18Sopenharmony_ci    }
277e509ee18Sopenharmony_ci
278e509ee18Sopenharmony_ci    if (defined(invoker.external_deps) && invoker.external_deps != []) {
279e509ee18Sopenharmony_ci      if (!defined(deps)) {
280e509ee18Sopenharmony_ci        deps = []
281e509ee18Sopenharmony_ci      }
282e509ee18Sopenharmony_ci
283e509ee18Sopenharmony_ci      external_deps_temp_file =
284e509ee18Sopenharmony_ci          "$target_gen_dir/${part_name}__${target_name}_external_deps_temp.json"
285e509ee18Sopenharmony_ci      arguments = [
286e509ee18Sopenharmony_ci        "--root-src-dir",
287e509ee18Sopenharmony_ci        rebase_path("//", root_build_dir),
288e509ee18Sopenharmony_ci        "--external-deps-temp-file",
289e509ee18Sopenharmony_ci        rebase_path(external_deps_temp_file, root_build_dir),
290e509ee18Sopenharmony_ci        "--external-deps",
291e509ee18Sopenharmony_ci      ]
292e509ee18Sopenharmony_ci      arguments += invoker.external_deps
293e509ee18Sopenharmony_ci      exec_script("$build_root/templates/cxx/external_deps_handler.py",
294e509ee18Sopenharmony_ci                  arguments,
295e509ee18Sopenharmony_ci                  "string")
296e509ee18Sopenharmony_ci      external_deps_info = read_file(external_deps_temp_file, "json")
297e509ee18Sopenharmony_ci      if (defined(external_deps_info.deps)) {
298e509ee18Sopenharmony_ci        deps += external_deps_info.deps
299e509ee18Sopenharmony_ci      }
300e509ee18Sopenharmony_ci    }
301e509ee18Sopenharmony_ci  }
302e509ee18Sopenharmony_ci}
303e509ee18Sopenharmony_ci
304e509ee18Sopenharmony_citemplate("ohos_source_set") {
305e509ee18Sopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
306e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
307e509ee18Sopenharmony_ci    part_name = invoker.part_name
308e509ee18Sopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
309e509ee18Sopenharmony_ci    subsystem_name = invoker.subsystem_name
310e509ee18Sopenharmony_ci    part_name = subsystem_name
311e509ee18Sopenharmony_ci  } else {
312e509ee18Sopenharmony_ci    subsystem_name = "arkcompiler"
313e509ee18Sopenharmony_ci    part_name = "common"
314e509ee18Sopenharmony_ci  }
315e509ee18Sopenharmony_ci  assert(subsystem_name != "")
316e509ee18Sopenharmony_ci  assert(part_name != "")
317e509ee18Sopenharmony_ci
318e509ee18Sopenharmony_ci  source_set(target_name) {
319e509ee18Sopenharmony_ci    forward_variables_from(invoker,
320e509ee18Sopenharmony_ci                           "*",
321e509ee18Sopenharmony_ci                           [
322e509ee18Sopenharmony_ci                             "configs",
323e509ee18Sopenharmony_ci                             "remove_configs",
324e509ee18Sopenharmony_ci                             "no_default_deps",
325e509ee18Sopenharmony_ci                             "external_deps",
326e509ee18Sopenharmony_ci                             "license_file",
327e509ee18Sopenharmony_ci                             "license_as_sources",
328e509ee18Sopenharmony_ci                             "use_exceptions",
329e509ee18Sopenharmony_ci                             "subsystem_name",
330e509ee18Sopenharmony_ci                             "part_name",
331e509ee18Sopenharmony_ci                             "stack_protector_ret",
332e509ee18Sopenharmony_ci                             "use_rtti",
333e509ee18Sopenharmony_ci                           ])
334e509ee18Sopenharmony_ci    if (defined(invoker.configs)) {
335e509ee18Sopenharmony_ci      configs += invoker.configs
336e509ee18Sopenharmony_ci    }
337e509ee18Sopenharmony_ci    if (defined(invoker.use_rtti) && invoker.use_rtti) {
338e509ee18Sopenharmony_ci      configs += [ "//arkcompiler/toolchain/build/config/compiler:rtti" ]
339e509ee18Sopenharmony_ci    }
340e509ee18Sopenharmony_ci    if (defined(invoker.remove_configs)) {
341e509ee18Sopenharmony_ci      configs -= invoker.remove_configs
342e509ee18Sopenharmony_ci    }
343e509ee18Sopenharmony_ci    if (defined(invoker.external_deps) && invoker.external_deps != []) {
344e509ee18Sopenharmony_ci      if (!defined(deps)) {
345e509ee18Sopenharmony_ci        deps = []
346e509ee18Sopenharmony_ci      }
347e509ee18Sopenharmony_ci      external_deps_temp_file =
348e509ee18Sopenharmony_ci          "$target_gen_dir/${part_name}__${target_name}_external_deps_temp.json"
349e509ee18Sopenharmony_ci      arguments = [
350e509ee18Sopenharmony_ci        "--root-src-dir",
351e509ee18Sopenharmony_ci        rebase_path("//", root_build_dir),
352e509ee18Sopenharmony_ci        "--external-deps-temp-file",
353e509ee18Sopenharmony_ci        rebase_path(external_deps_temp_file, root_build_dir),
354e509ee18Sopenharmony_ci        "--external-deps",
355e509ee18Sopenharmony_ci      ]
356e509ee18Sopenharmony_ci      arguments += invoker.external_deps
357e509ee18Sopenharmony_ci      exec_script("$build_root/templates/cxx/external_deps_handler.py",
358e509ee18Sopenharmony_ci                  arguments,
359e509ee18Sopenharmony_ci                  "string")
360e509ee18Sopenharmony_ci      external_deps_info = read_file(external_deps_temp_file, "json")
361e509ee18Sopenharmony_ci      if (defined(external_deps_info.deps)) {
362e509ee18Sopenharmony_ci        deps += external_deps_info.deps
363e509ee18Sopenharmony_ci      }
364e509ee18Sopenharmony_ci    }
365e509ee18Sopenharmony_ci  }
366e509ee18Sopenharmony_ci}
367e509ee18Sopenharmony_ci
368e509ee18Sopenharmony_citemplate("ohos_copy") {
369e509ee18Sopenharmony_ci  assert(defined(invoker.sources),
370e509ee18Sopenharmony_ci         "sources must be defined for ${target_name}.")
371e509ee18Sopenharmony_ci  assert(defined(invoker.outputs),
372e509ee18Sopenharmony_ci         "outputs must be defined for ${target_name}.")
373e509ee18Sopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
374e509ee18Sopenharmony_ci    copy_subsystem_name = invoker.subsystem_name
375e509ee18Sopenharmony_ci    copy_part_name = invoker.part_name
376e509ee18Sopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
377e509ee18Sopenharmony_ci    copy_subsystem_name = invoker.subsystem_name
378e509ee18Sopenharmony_ci    copy_part_name = copy_subsystem_name
379e509ee18Sopenharmony_ci  } else {
380e509ee18Sopenharmony_ci    copy_subsystem_name = "common"
381e509ee18Sopenharmony_ci    copy_part_name = copy_subsystem_name
382e509ee18Sopenharmony_ci  }
383e509ee18Sopenharmony_ci  assert(copy_subsystem_name != "")
384e509ee18Sopenharmony_ci  assert(copy_part_name != "")
385e509ee18Sopenharmony_ci
386e509ee18Sopenharmony_ci  copy(target_name) {
387e509ee18Sopenharmony_ci    forward_variables_from(invoker,
388e509ee18Sopenharmony_ci                           "*",
389e509ee18Sopenharmony_ci                           [
390e509ee18Sopenharmony_ci                             "relative_install_dir",
391e509ee18Sopenharmony_ci                             "module_source_dir",
392e509ee18Sopenharmony_ci                             "module_install_name",
393e509ee18Sopenharmony_ci                             "license_file",
394e509ee18Sopenharmony_ci                             "install_enable",
395e509ee18Sopenharmony_ci                             "module_type",
396e509ee18Sopenharmony_ci                           ])
397e509ee18Sopenharmony_ci  }
398e509ee18Sopenharmony_ci}
399