1bae44755Sopenharmony_ci# Copyright (C) 2022 Huawei Device Co., Ltd.
2bae44755Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3bae44755Sopenharmony_ci# you may not use this file except in compliance with the License.
4bae44755Sopenharmony_ci# You may obtain a copy of the License at
5bae44755Sopenharmony_ci#
6bae44755Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0
7bae44755Sopenharmony_ci#
8bae44755Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9bae44755Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10bae44755Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11bae44755Sopenharmony_ci# See the License for the specific language governing permissions and
12bae44755Sopenharmony_ci# limitations under the License.
13bae44755Sopenharmony_ci
14bae44755Sopenharmony_ciimport("//build/lite/config/component/lite_component.gni")
15bae44755Sopenharmony_ciimport("//build/ohos.gni")
16bae44755Sopenharmony_ciimport("config.gni")
17bae44755Sopenharmony_ci
18bae44755Sopenharmony_ciconfig("internal") {
19bae44755Sopenharmony_ci  include_dirs = [ "include" ]
20bae44755Sopenharmony_ci  include_dirs += [ syscap_codec_config_path ]
21bae44755Sopenharmony_ci  if (syscap_codec_config_extern_path != "") {
22bae44755Sopenharmony_ci    include_dirs += [ "${root_build_dir}" ]
23bae44755Sopenharmony_ci    cflags = [ "-DSYSCAP_DEFINE_EXTERN_ENABLE" ]
24bae44755Sopenharmony_ci  }
25bae44755Sopenharmony_ci}
26bae44755Sopenharmony_ci
27bae44755Sopenharmony_cisources_platform_common = [
28bae44755Sopenharmony_ci  "./src/syscap_tool.c",
29bae44755Sopenharmony_ci  "./src/create_pcid.c",
30bae44755Sopenharmony_ci  "./src/endian_internal.c",
31bae44755Sopenharmony_ci  "./src/context_tool.c",
32bae44755Sopenharmony_ci  "./src/common_method.c",
33bae44755Sopenharmony_ci]
34bae44755Sopenharmony_ci
35bae44755Sopenharmony_ciohos_executable("syscap_tool_bin") {
36bae44755Sopenharmony_ci  deps = []
37bae44755Sopenharmony_ci  if (syscap_codec_config_extern_path != "") {
38bae44755Sopenharmony_ci    deps += [ ":gen_syscap_define_custom" ]
39bae44755Sopenharmony_ci    inputs = [ "${root_build_dir}/syscap_define_custom.h" ]
40bae44755Sopenharmony_ci  }
41bae44755Sopenharmony_ci  output_name = "syscap_tool"
42bae44755Sopenharmony_ci  install_enable = true
43bae44755Sopenharmony_ci  include_dirs = [ "src" ]
44bae44755Sopenharmony_ci  configs = [ ":internal" ]
45bae44755Sopenharmony_ci  defines = []
46bae44755Sopenharmony_ci
47bae44755Sopenharmony_ci  if (is_mingw) {
48bae44755Sopenharmony_ci    defines += [ "_POSIX_" ]
49bae44755Sopenharmony_ci  }
50bae44755Sopenharmony_ci  if (defined(ohos_lite) && ohos_kernel_type == "liteos_m") {
51bae44755Sopenharmony_ci    cflags = [ "-DPATH_MAX=1024" ]
52bae44755Sopenharmony_ci    cflags += [ "-Wno-int-conversion" ]
53bae44755Sopenharmony_ci  }
54bae44755Sopenharmony_ci  sources = [ "./src/main.c" ]
55bae44755Sopenharmony_ci  sources += sources_platform_common
56bae44755Sopenharmony_ci
57bae44755Sopenharmony_ci  external_deps = [ "bounds_checking_function:libsec_static" ]
58bae44755Sopenharmony_ci
59bae44755Sopenharmony_ci  if (defined(ohos_lite)) {
60bae44755Sopenharmony_ci    deps += [ "//build/lite/config/component/cJSON:cjson_static" ]
61bae44755Sopenharmony_ci  } else {
62bae44755Sopenharmony_ci    external_deps += [ "cJSON:cjson_static" ]
63bae44755Sopenharmony_ci  }
64bae44755Sopenharmony_ci
65bae44755Sopenharmony_ci  subsystem_name = "developtools"
66bae44755Sopenharmony_ci  part_name = "syscap_codec"
67bae44755Sopenharmony_ci}
68bae44755Sopenharmony_ci
69bae44755Sopenharmony_ciconfig("syscap_interface_public_config") {
70bae44755Sopenharmony_ci  include_dirs = [ "./interfaces/inner_api/" ]
71bae44755Sopenharmony_ci}
72bae44755Sopenharmony_ci
73bae44755Sopenharmony_ciif (defined(ohos_lite)) {
74bae44755Sopenharmony_ci  if (ohos_kernel_type == "liteos_m") {
75bae44755Sopenharmony_ci    group("syscap_interface_shared") {
76bae44755Sopenharmony_ci    }
77bae44755Sopenharmony_ci  } else {
78bae44755Sopenharmony_ci    shared_library("syscap_interface_shared") {
79bae44755Sopenharmony_ci      deps = []
80bae44755Sopenharmony_ci      if (syscap_codec_config_extern_path != "") {
81bae44755Sopenharmony_ci        deps += [ ":gen_syscap_define_custom" ]
82bae44755Sopenharmony_ci        inputs = [ "${root_build_dir}/syscap_define_custom.h" ]
83bae44755Sopenharmony_ci      }
84bae44755Sopenharmony_ci      _version_script = rebase_path("libsyscap_interface_shared.versionscript")
85bae44755Sopenharmony_ci      if (!defined(ldflags)) {
86bae44755Sopenharmony_ci        ldflags = []
87bae44755Sopenharmony_ci      }
88bae44755Sopenharmony_ci      ldflags += [
89bae44755Sopenharmony_ci        "-rdynamic",
90bae44755Sopenharmony_ci        "-Wl,--version-script=${_version_script}",
91bae44755Sopenharmony_ci      ]
92bae44755Sopenharmony_ci
93bae44755Sopenharmony_ci      include_dirs = [ "src" ]
94bae44755Sopenharmony_ci      configs += [ ":internal" ]
95bae44755Sopenharmony_ci      public_configs = [ ":syscap_interface_public_config" ]
96bae44755Sopenharmony_ci      sources = [
97bae44755Sopenharmony_ci        "./interfaces/inner_api/syscap_interface.c",
98bae44755Sopenharmony_ci        "./src/context_tool.c",
99bae44755Sopenharmony_ci        "./src/endian_internal.c",
100bae44755Sopenharmony_ci        "./src/syscap_tool.c",
101bae44755Sopenharmony_ci        "./src/common_method.c",
102bae44755Sopenharmony_ci      ]
103bae44755Sopenharmony_ci
104bae44755Sopenharmony_ci      deps += [
105bae44755Sopenharmony_ci        "//build/lite/config/component/cJSON:cjson_static",
106bae44755Sopenharmony_ci        "//third_party/bounds_checking_function:libsec_static",
107bae44755Sopenharmony_ci      ]
108bae44755Sopenharmony_ci    }
109bae44755Sopenharmony_ci  }
110bae44755Sopenharmony_ci} else {
111bae44755Sopenharmony_ci  ohos_shared_library("syscap_interface_shared") {
112bae44755Sopenharmony_ci    branch_protector_ret = "pac_ret"
113bae44755Sopenharmony_ci    deps = []
114bae44755Sopenharmony_ci    if (syscap_codec_config_extern_path != "") {
115bae44755Sopenharmony_ci      deps += [ ":gen_syscap_define_custom" ]
116bae44755Sopenharmony_ci      inputs = [ "${root_build_dir}/syscap_define_custom.h" ]
117bae44755Sopenharmony_ci    }
118bae44755Sopenharmony_ci    version_script = "libsyscap_interface_shared.versionscript"
119bae44755Sopenharmony_ci    include_dirs = [ "src" ]
120bae44755Sopenharmony_ci    configs = [ ":internal" ]
121bae44755Sopenharmony_ci    public_configs = [ ":syscap_interface_public_config" ]
122bae44755Sopenharmony_ci    sources = [
123bae44755Sopenharmony_ci      "./interfaces/inner_api/syscap_interface.c",
124bae44755Sopenharmony_ci      "./src/context_tool.c",
125bae44755Sopenharmony_ci      "./src/endian_internal.c",
126bae44755Sopenharmony_ci      "./src/syscap_tool.c",
127bae44755Sopenharmony_ci      "./src/common_method.c",
128bae44755Sopenharmony_ci    ]
129bae44755Sopenharmony_ci    external_deps = [
130bae44755Sopenharmony_ci      "bounds_checking_function:libsec_static",
131bae44755Sopenharmony_ci      "cJSON:cjson_static",
132bae44755Sopenharmony_ci    ]
133bae44755Sopenharmony_ci
134bae44755Sopenharmony_ci    subsystem_name = "developtools"
135bae44755Sopenharmony_ci    part_name = "syscap_codec"
136bae44755Sopenharmony_ci  }
137bae44755Sopenharmony_ci}
138bae44755Sopenharmony_ci
139bae44755Sopenharmony_cigroup("syscap_tool_bin_linux") {
140bae44755Sopenharmony_ci  deps = [ ":syscap_tool_bin(//build/toolchain/linux:clang_${host_cpu})" ]
141bae44755Sopenharmony_ci}
142bae44755Sopenharmony_ci
143bae44755Sopenharmony_cibuild_ext_component("generate_pcid") {
144bae44755Sopenharmony_ci  outputs = [ "$root_out_dir/pcid.sc" ]
145bae44755Sopenharmony_ci  deps = [ ":syscap_tool_bin_linux" ]
146bae44755Sopenharmony_ci  exec_path = rebase_path(root_out_dir)
147bae44755Sopenharmony_ci  preload_path = rebase_path(preloader_output_dir)
148bae44755Sopenharmony_ci  if (defined(ohos_lite)) {
149bae44755Sopenharmony_ci    cmd = "${exec_path}/clang_${host_cpu}/syscap_tool"
150bae44755Sopenharmony_ci  } else {
151bae44755Sopenharmony_ci    cmd = "${exec_path}/clang_${host_cpu}/developtools/syscap_codec/syscap_tool"
152bae44755Sopenharmony_ci  }
153bae44755Sopenharmony_ci  command = "chmod 777 $cmd"
154bae44755Sopenharmony_ci  command +=
155bae44755Sopenharmony_ci      " && $cmd -P -e -i ${preload_path}/system/etc/SystemCapability.json"
156bae44755Sopenharmony_ci  if (defined(ohos_lite)) {
157bae44755Sopenharmony_ci    command += " && mkdir -p $exec_path/system/etc && cp $exec_path/pcid.sc $exec_path/system/etc/pcid.sc"
158bae44755Sopenharmony_ci  }
159bae44755Sopenharmony_ci}
160bae44755Sopenharmony_ci
161bae44755Sopenharmony_ciohos_prebuilt_etc("pcid.sc") {
162bae44755Sopenharmony_ci  deps = [ ":generate_pcid" ]
163bae44755Sopenharmony_ci  source = "$root_out_dir/pcid.sc"
164bae44755Sopenharmony_ci  subsystem_name = "developtools"
165bae44755Sopenharmony_ci  part_name = "syscap_codec"
166bae44755Sopenharmony_ci}
167bae44755Sopenharmony_ci
168bae44755Sopenharmony_ciif (syscap_codec_config_extern_path != "") {
169bae44755Sopenharmony_ci  # generate syscap_define_custom.h
170bae44755Sopenharmony_ci  action("gen_syscap_define_custom") {
171bae44755Sopenharmony_ci    script = "./tools/syscap_config_merge.py"
172bae44755Sopenharmony_ci    args = [
173bae44755Sopenharmony_ci      "--base",
174bae44755Sopenharmony_ci      rebase_path("include/codec_config/syscap_define.h"),
175bae44755Sopenharmony_ci      "--extern",
176bae44755Sopenharmony_ci      rebase_path(syscap_codec_config_extern_path),
177bae44755Sopenharmony_ci      "--output",
178bae44755Sopenharmony_ci      rebase_path("${root_build_dir}/syscap_define_custom.h"),
179bae44755Sopenharmony_ci    ]
180bae44755Sopenharmony_ci    inputs = [
181bae44755Sopenharmony_ci      "include/codec_config/syscap_define.h",
182bae44755Sopenharmony_ci      syscap_codec_config_extern_path,
183bae44755Sopenharmony_ci    ]
184bae44755Sopenharmony_ci    outputs = [ "${root_build_dir}/syscap_define_custom.h" ]
185bae44755Sopenharmony_ci  }
186bae44755Sopenharmony_ci}
187bae44755Sopenharmony_ci
188bae44755Sopenharmony_cigroup("pcid_sc") {
189bae44755Sopenharmony_ci  deps = [ ":pcid.sc" ]
190bae44755Sopenharmony_ci}
191bae44755Sopenharmony_ci
192bae44755Sopenharmony_cigroup("syscap_codec") {
193bae44755Sopenharmony_ci  deps = [
194bae44755Sopenharmony_ci    ":pcid_sc",
195bae44755Sopenharmony_ci    ":syscap_interface_shared",
196bae44755Sopenharmony_ci  ]
197bae44755Sopenharmony_ci  if (support_jsapi && is_standard_system) {
198bae44755Sopenharmony_ci    deps += [ "napi:systemcapability" ]
199bae44755Sopenharmony_ci  }
200bae44755Sopenharmony_ci}
201