1c1d0c72aSopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 2c1d0c72aSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3c1d0c72aSopenharmony_ci# you may not use this file except in compliance with the License. 4c1d0c72aSopenharmony_ci# You may obtain a copy of the License at 5c1d0c72aSopenharmony_ci# 6c1d0c72aSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7c1d0c72aSopenharmony_ci# 8c1d0c72aSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9c1d0c72aSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10c1d0c72aSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11c1d0c72aSopenharmony_ci# See the License for the specific language governing permissions and 12c1d0c72aSopenharmony_ci# limitations under the License.. 13c1d0c72aSopenharmony_ci 14c1d0c72aSopenharmony_ciimport("//build/ohos.gni") 15c1d0c72aSopenharmony_ciimport("//drivers/hdf_core/adapter/uhdf/uhdf.gni") 16c1d0c72aSopenharmony_ci 17c1d0c72aSopenharmony_citemplate("hdi_small") { 18c1d0c72aSopenharmony_ci assert(defined(invoker.sources), "sources must be set") 19c1d0c72aSopenharmony_ci assert(defined(invoker.language), "language must be set") 20c1d0c72aSopenharmony_ci 21c1d0c72aSopenharmony_ci #system type, the default value is lite 22c1d0c72aSopenharmony_ci system = "lite" 23c1d0c72aSopenharmony_ci 24c1d0c72aSopenharmony_ci # generate mode, the default value is low 25c1d0c72aSopenharmony_ci mode = "passthrough" 26c1d0c72aSopenharmony_ci 27c1d0c72aSopenharmony_ci # generate language, the default value is c 28c1d0c72aSopenharmony_ci language = "c" 29c1d0c72aSopenharmony_ci if (defined(invoker.language)) { 30c1d0c72aSopenharmony_ci assert(invoker.language == "c" || invoker.language == "cpp", 31c1d0c72aSopenharmony_ci "the language must be set to 'c' or 'cpp'") 32c1d0c72aSopenharmony_ci language = invoker.language 33c1d0c72aSopenharmony_ci } 34c1d0c72aSopenharmony_ci 35c1d0c72aSopenharmony_ci # the path of root package 36c1d0c72aSopenharmony_ci root_package = "ohos.hdi" 37c1d0c72aSopenharmony_ci root_path = rebase_path("//drivers/interface") 38c1d0c72aSopenharmony_ci if (defined(invoker.root)) { 39c1d0c72aSopenharmony_ci package_path_map = string_split(invoker.root, ":") 40c1d0c72aSopenharmony_ci root_package = package_path_map[0] 41c1d0c72aSopenharmony_ci root_path = rebase_path(package_path_map[1]) 42c1d0c72aSopenharmony_ci } 43c1d0c72aSopenharmony_ci root_package_path = "${root_package}:${root_path}" 44c1d0c72aSopenharmony_ci 45c1d0c72aSopenharmony_ci # the path of generate code file 46c1d0c72aSopenharmony_ci sources_gen_dir = get_path_info("${root_path}/", "gen_dir") 47c1d0c72aSopenharmony_ci 48c1d0c72aSopenharmony_ci # analysis idl file 49c1d0c72aSopenharmony_ci get_build_info_args = [ 50c1d0c72aSopenharmony_ci "--system", 51c1d0c72aSopenharmony_ci system, 52c1d0c72aSopenharmony_ci "--mode", 53c1d0c72aSopenharmony_ci mode, 54c1d0c72aSopenharmony_ci "--language", 55c1d0c72aSopenharmony_ci language, 56c1d0c72aSopenharmony_ci "-o", 57c1d0c72aSopenharmony_ci sources_gen_dir, 58c1d0c72aSopenharmony_ci "-r", 59c1d0c72aSopenharmony_ci root_package_path, 60c1d0c72aSopenharmony_ci ] 61c1d0c72aSopenharmony_ci 62c1d0c72aSopenharmony_ci foreach(idl_file, invoker.sources) { 63c1d0c72aSopenharmony_ci get_build_info_args += [ "-f" ] 64c1d0c72aSopenharmony_ci get_build_info_args += [ rebase_path(idl_file) ] 65c1d0c72aSopenharmony_ci } 66c1d0c72aSopenharmony_ci 67c1d0c72aSopenharmony_ci hdi_build_info = 68c1d0c72aSopenharmony_ci exec_script("$hdf_framework_path/tools/hdi-gen/build_hdi_files_info.py", 69c1d0c72aSopenharmony_ci get_build_info_args, 70c1d0c72aSopenharmony_ci "json") 71c1d0c72aSopenharmony_ci 72c1d0c72aSopenharmony_ci assert(defined(hdi_build_info.include_dirs), "missing include_dirs") 73c1d0c72aSopenharmony_ci assert(defined(hdi_build_info.out_dir), "out_dir") 74c1d0c72aSopenharmony_ci assert(defined(hdi_build_info.version), "missing version") 75c1d0c72aSopenharmony_ci assert(defined(hdi_build_info.sources), "missing sources") 76c1d0c72aSopenharmony_ci 77c1d0c72aSopenharmony_ci idl_headers_config = "$target_name" + "_idl_headers_config" 78c1d0c72aSopenharmony_ci config("$idl_headers_config") { 79c1d0c72aSopenharmony_ci include_dirs = [ 80c1d0c72aSopenharmony_ci "//drivers/hdf_core/interfaces/inner_api/osal/shared", 81c1d0c72aSopenharmony_ci "//drivers/hdf_core/interfaces/inner_api/osal/uhdf", 82c1d0c72aSopenharmony_ci "//drivers/hdf_core/interfaces/inner_api/utils", 83c1d0c72aSopenharmony_ci ] 84c1d0c72aSopenharmony_ci include_dirs += hdi_build_info.include_dirs 85c1d0c72aSopenharmony_ci } 86c1d0c72aSopenharmony_ci 87c1d0c72aSopenharmony_ci action("hdi_gen") { 88c1d0c72aSopenharmony_ci deps = [ "$hdf_framework_path/tools/hdi-gen:build_hdi_gen" ] 89c1d0c72aSopenharmony_ci script = "/usr/bin/env" 90c1d0c72aSopenharmony_ci if (defined(ohos_lite)) { 91c1d0c72aSopenharmony_ci script = "//build/lite/run_shell_cmd.py" 92c1d0c72aSopenharmony_ci } 93c1d0c72aSopenharmony_ci 94c1d0c72aSopenharmony_ci idl_sources = invoker.sources 95c1d0c72aSopenharmony_ci inputs = invoker.sources 96c1d0c72aSopenharmony_ci outputs = hdi_build_info.sources 97c1d0c72aSopenharmony_ci 98c1d0c72aSopenharmony_ci args = [ 99c1d0c72aSopenharmony_ci rebase_path(get_path_info("$hdf_framework_path/tools/hdi-gen/", 100c1d0c72aSopenharmony_ci "out_dir") + "/hdi-gen"), 101c1d0c72aSopenharmony_ci "--system", 102c1d0c72aSopenharmony_ci system, 103c1d0c72aSopenharmony_ci "--mode", 104c1d0c72aSopenharmony_ci mode, 105c1d0c72aSopenharmony_ci "--language", 106c1d0c72aSopenharmony_ci language, 107c1d0c72aSopenharmony_ci "-d", 108c1d0c72aSopenharmony_ci rebase_path(hdi_build_info.out_dir), 109c1d0c72aSopenharmony_ci ] 110c1d0c72aSopenharmony_ci 111c1d0c72aSopenharmony_ci foreach(idl_file, idl_sources) { 112c1d0c72aSopenharmony_ci args += [ "-c" ] 113c1d0c72aSopenharmony_ci args += [ rebase_path(idl_file) ] 114c1d0c72aSopenharmony_ci } 115c1d0c72aSopenharmony_ci 116c1d0c72aSopenharmony_ci args += [ 117c1d0c72aSopenharmony_ci "-r", 118c1d0c72aSopenharmony_ci root_package_path, 119c1d0c72aSopenharmony_ci ] 120c1d0c72aSopenharmony_ci } 121c1d0c72aSopenharmony_ci 122c1d0c72aSopenharmony_ci lib_client = "lib" + target_name + "_proxy" + "_" + hdi_build_info.version 123c1d0c72aSopenharmony_ci ohos_shared_library(lib_client) { 124c1d0c72aSopenharmony_ci output_extension = "z.so" 125c1d0c72aSopenharmony_ci 126c1d0c72aSopenharmony_ci if (defined(invoker.sources)) { 127c1d0c72aSopenharmony_ci sources = hdi_build_info.proxy_sources 128c1d0c72aSopenharmony_ci public_configs = [ ":$idl_headers_config" ] 129c1d0c72aSopenharmony_ci deps = [ ":hdi_gen" ] 130c1d0c72aSopenharmony_ci 131c1d0c72aSopenharmony_ci public_deps = hdi_build_info.proxy_deps 132c1d0c72aSopenharmony_ci 133c1d0c72aSopenharmony_ci external_deps = [ 134c1d0c72aSopenharmony_ci "bounds_checking_function:libsec_shared", 135c1d0c72aSopenharmony_ci "hdf_core:libhdi", 136c1d0c72aSopenharmony_ci "hilog_lite:hilog_shared", 137c1d0c72aSopenharmony_ci ] 138c1d0c72aSopenharmony_ci 139c1d0c72aSopenharmony_ci if (invoker.language == "c") { 140c1d0c72aSopenharmony_ci external_deps += [ "hdf_core:libhdf_utils" ] 141c1d0c72aSopenharmony_ci } 142c1d0c72aSopenharmony_ci 143c1d0c72aSopenharmony_ci shlib_type = "hdi_proxy" 144c1d0c72aSopenharmony_ci subsystem_name = invoker.subsystem_name 145c1d0c72aSopenharmony_ci partname_list = string_split(invoker.part_name, "_") 146c1d0c72aSopenharmony_ci if (partname_list[0] == "drivers") { 147c1d0c72aSopenharmony_ci part_name = invoker.part_name 148c1d0c72aSopenharmony_ci } else { 149c1d0c72aSopenharmony_ci part_name = invoker.part_name + "_interface" 150c1d0c72aSopenharmony_ci } 151c1d0c72aSopenharmony_ci } 152c1d0c72aSopenharmony_ci } 153c1d0c72aSopenharmony_ci 154c1d0c72aSopenharmony_ci lib_server = "lib" + target_name + "_stub" + "_" + hdi_build_info.version 155c1d0c72aSopenharmony_ci group(lib_server) { 156c1d0c72aSopenharmony_ci public_configs = [ ":$idl_headers_config" ] 157c1d0c72aSopenharmony_ci deps = [ ":hdi_gen" ] 158c1d0c72aSopenharmony_ci } 159c1d0c72aSopenharmony_ci 160c1d0c72aSopenharmony_ci # generate code and shared library 161c1d0c72aSopenharmony_ci group("$target_name" + "_idl_target") { 162c1d0c72aSopenharmony_ci deps = [ ":$lib_client" ] 163c1d0c72aSopenharmony_ci } 164c1d0c72aSopenharmony_ci 165c1d0c72aSopenharmony_ci # only generate code and provide header file path 166c1d0c72aSopenharmony_ci group("$target_name" + "_idl_headers") { 167c1d0c72aSopenharmony_ci public_configs = [ ":$idl_headers_config" ] 168c1d0c72aSopenharmony_ci deps = [ ":hdi_gen" ] 169c1d0c72aSopenharmony_ci } 170c1d0c72aSopenharmony_ci} 171