15f9996aaSopenharmony_ci# Copyright (c) 2022 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/config/python.gni") 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_ci# Generate .ts or .cpp files from .idl files. 175f9996aaSopenharmony_ci# 185f9996aaSopenharmony_ci# Variables 195f9996aaSopenharmony_ci# sources: Paths to .idl file to compile, one idl target can only handle 205f9996aaSopenharmony_ci# one idl source file. 215f9996aaSopenharmony_ci# gen_type: Only support ts and cpp type currently 225f9996aaSopenharmony_ci# "ts": generate ts interface files 235f9996aaSopenharmony_ci# "cpp": generate cpp interface files 245f9996aaSopenharmony_ci# 255f9996aaSopenharmony_ci# Example 265f9996aaSopenharmony_ci# ohos_idl("foo_idl") { 275f9996aaSopenharmony_ci# gen_type = "cpp" 285f9996aaSopenharmony_ci# sources = [ 295f9996aaSopenharmony_ci# "cpp/bar/FooBarServiceCallback.idl", 305f9996aaSopenharmony_ci# ] 315f9996aaSopenharmony_ci# } 325f9996aaSopenharmony_citemplate("ohos_idl") { 335f9996aaSopenharmony_ci forward_variables_from(invoker, [ "testonly" ]) 345f9996aaSopenharmony_ci assert(defined(invoker.sources), "sources are necessary") 355f9996aaSopenharmony_ci _idl_target = "//foundation/ability/idl_tool:idl($host_toolchain)" 365f9996aaSopenharmony_ci _idl_module_info_target = 375f9996aaSopenharmony_ci get_label_info("$_idl_target", "label_no_toolchain") + 385f9996aaSopenharmony_ci "_info($host_toolchain)" 395f9996aaSopenharmony_ci _idl_module_info = 405f9996aaSopenharmony_ci get_label_info("$_idl_module_info_target", "target_out_dir") + "/" + 415f9996aaSopenharmony_ci get_label_info("$_idl_target", "name") + "_module_info.json" 425f9996aaSopenharmony_ci _rebased_idl_module_info = rebase_path("$_idl_module_info", root_build_dir) 435f9996aaSopenharmony_ci 445f9996aaSopenharmony_ci _libcxx_target = "//build/common/musl:musl-libcxx.so($host_toolchain)" 455f9996aaSopenharmony_ci _libcxx_module_info_target = 465f9996aaSopenharmony_ci get_label_info("$_libcxx_target", "label_no_toolchain") + 475f9996aaSopenharmony_ci "_info($host_toolchain)" 485f9996aaSopenharmony_ci _libcxx_module_info = 495f9996aaSopenharmony_ci get_label_info("$_libcxx_module_info_target", "target_out_dir") + "/" + 505f9996aaSopenharmony_ci get_label_info("$_libcxx_target", "name") + "_module_info.json" 515f9996aaSopenharmony_ci _rebased_libcxx_module_info = 525f9996aaSopenharmony_ci rebase_path("$_libcxx_module_info", root_build_dir) 535f9996aaSopenharmony_ci forward_variables_from(invoker, [ "gen_type" ]) 545f9996aaSopenharmony_ci assert(defined(gen_type), 555f9996aaSopenharmony_ci "need define gen_type to point which type files should be generated") 565f9996aaSopenharmony_ci 575f9996aaSopenharmony_ci if (gen_type == "cpp") { 585f9996aaSopenharmony_ci _idl_include_target_name = "${target_name}__inculde" 595f9996aaSopenharmony_ci config(_idl_include_target_name) { 605f9996aaSopenharmony_ci include_dirs = [ target_gen_dir ] 615f9996aaSopenharmony_ci } 625f9996aaSopenharmony_ci } 635f9996aaSopenharmony_ci 645f9996aaSopenharmony_ci action_with_pydeps(target_name) { 655f9996aaSopenharmony_ci script = "//build/scripts/idl.py" 665f9996aaSopenharmony_ci sources = invoker.sources 675f9996aaSopenharmony_ci args = [ 685f9996aaSopenharmony_ci "--idl-path", 695f9996aaSopenharmony_ci "@FileArg($_rebased_idl_module_info:source)", 705f9996aaSopenharmony_ci "--libcxx-path", 715f9996aaSopenharmony_ci "@FileArg($_rebased_libcxx_module_info:source)", 725f9996aaSopenharmony_ci ] 735f9996aaSopenharmony_ci deps = [ 745f9996aaSopenharmony_ci "${_idl_module_info_target}", 755f9996aaSopenharmony_ci "${_idl_target}", 765f9996aaSopenharmony_ci "${_libcxx_module_info_target}", 775f9996aaSopenharmony_ci "${_libcxx_target}", 785f9996aaSopenharmony_ci ] 795f9996aaSopenharmony_ci if (defined(invoker.deps)) { 805f9996aaSopenharmony_ci deps += invoker.deps 815f9996aaSopenharmony_ci } 825f9996aaSopenharmony_ci _output_archive = "${target_gen_dir}/${target_name}.zip" 835f9996aaSopenharmony_ci if (gen_type == "cpp") { 845f9996aaSopenharmony_ci public_configs = [ ":$_idl_include_target_name" ] 855f9996aaSopenharmony_ci } 865f9996aaSopenharmony_ci args += [ 875f9996aaSopenharmony_ci "--gen-type", 885f9996aaSopenharmony_ci gen_type, 895f9996aaSopenharmony_ci "--output-archive-path", 905f9996aaSopenharmony_ci rebase_path(_output_archive, root_build_dir), 915f9996aaSopenharmony_ci "--generated-src-directory", 925f9996aaSopenharmony_ci rebase_path(target_gen_dir + "/$target_name", root_build_dir), 935f9996aaSopenharmony_ci ] 945f9996aaSopenharmony_ci args += rebase_path(sources, root_build_dir) 955f9996aaSopenharmony_ci outputs = [ _output_archive ] 965f9996aaSopenharmony_ci } 975f9996aaSopenharmony_ci} 98