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.
13import("//build/test.gni")
14import("//developtools/hdc/hdc.gni")
15hdc_path = "//developtools/hdc/"
16module_output_path = "developtools/hdc/"
17declare_args() {
18  hdc_unit_test = true
19  hdc_fuzz_test = true
20}
21
22hdc_common_sources = [
23  "${hdc_path}/src/common/async_cmd.cpp",
24  "${hdc_path}/src/common/auth.cpp",
25  "${hdc_path}/src/common/base.cpp",
26  "${hdc_path}/src/common/channel.cpp",
27  "${hdc_path}/src/common/circle_buffer.cpp",
28  "${hdc_path}/src/common/debug.cpp",
29  "${hdc_path}/src/common/file.cpp",
30  "${hdc_path}/src/common/file_descriptor.cpp",
31  "${hdc_path}/src/common/forward.cpp",
32  "${hdc_path}/src/common/session.cpp",
33  "${hdc_path}/src/common/task.cpp",
34  "${hdc_path}/src/common/tcp.cpp",
35  "${hdc_path}/src/common/transfer.cpp",
36  "${hdc_path}/src/common/usb.cpp",
37]
38
39hdc_daemon_sources = [
40  "${hdc_path}/src/daemon/daemon.cpp",
41  "${hdc_path}/src/daemon/daemon_app.cpp",
42  "${hdc_path}/src/daemon/daemon_forward.cpp",
43  "${hdc_path}/src/daemon/daemon_tcp.cpp",
44  "${hdc_path}/src/daemon/daemon_unity.cpp",
45  "${hdc_path}/src/daemon/daemon_usb.cpp",
46  "${hdc_path}/src/daemon/jdwp.cpp",
47  "${hdc_path}/src/daemon/shell.cpp",
48  "${hdc_path}/src/daemon/system_depend.cpp",
49]
50
51hdc_host_sources = [
52  "${hdc_path}/src/host/client.cpp",
53  "${hdc_path}/src/host/host_app.cpp",
54  "${hdc_path}/src/host/host_forward.cpp",
55  "${hdc_path}/src/host/host_tcp.cpp",
56  "${hdc_path}/src/host/host_unity.cpp",
57  "${hdc_path}/src/host/host_updater.cpp",
58  "${hdc_path}/src/host/host_usb.cpp",
59  "${hdc_path}/src/host/server.cpp",
60  "${hdc_path}/src/host/server_for_client.cpp",
61  "${hdc_path}/src/host/translate.cpp",
62]
63
64common_external_deps = [
65  "bounds_checking_function:libsec_static",
66  "libuv:uv",
67  "lz4:liblz4_static",
68  "openssl:libcrypto_static",
69]
70
71config("hdc_ut_code_flag") {
72  cflags = code_check_flag
73}
74
75config("hdc_ut_config") {
76  defines = [
77    "TEST_HASH",
78    "HDC_MSG_HASH=\"TEST\"",
79  ]
80  include_dirs = [ "${hdc_path}/src/common" ]
81
82  cflags = [
83    "-std=c++17",
84    "-fno-access-control",
85    "-g",
86  ]
87  ldflags = []
88
89  if (hdc_test_coverage && is_ohos) {
90    cflags += [
91      "-fprofile-arcs",
92      "-ftest-coverage",
93    ]
94    ldflags += [ "--coverage" ]
95  }
96}
97
98config("hdc_common_config") {
99  defines = []
100  include_dirs = [
101    "${hdc_path}/src/common",
102    "${hdc_path}/src/daemon",
103    "${hdc_path}/src/host",
104    "${hdc_path}/test/unittest/common/include",
105  ]
106
107  if (hdc_support_uart) {
108    defines += [ "HDC_SUPPORT_UART" ]
109  }
110
111  defines += [ "HDC_UT" ]
112}
113
114config("hdc_host_common_config") {
115  defines = [ "HDC_HOST" ]
116
117  # both linux and ohos is same linux syscall
118  defines += [ "HOST_LINUX" ]
119  defines += [ "HARMONY_PROJECT" ]
120}
121
122ohos_source_set("hdc_common") {
123  use_exceptions = true
124  testonly = true
125  sources = hdc_common_sources
126  if (hdc_support_uart) {
127    sources += [ "${hdc_path}/src/common/uart.cpp" ]
128  }
129  public_external_deps = common_external_deps
130  external_deps = [ "init:libbegetutil" ]
131  public_configs = [
132    ":hdc_common_config",
133    ":hdc_ut_config",
134  ]
135  defines = [ "OPENSSL_SUPPRESS_DEPRECATED" ]
136  if (hdc_fuzz_test) {
137    defines += [
138      "FUZZ_TEST",
139      "HDC_HILOG",
140    ]
141    external_deps += [ "hilog:libhilog" ]
142  }
143}
144
145ohos_source_set("hdc_daemon") {
146  use_exceptions = true
147  sources = hdc_common_sources
148  sources += hdc_daemon_sources
149  if (hdc_support_uart) {
150    sources += [ "${hdc_path}/src/common/uart.cpp" ]
151    sources += [ "${hdc_path}/src/daemon/daemon_uart.cpp" ]
152  }
153  public_external_deps = common_external_deps
154  external_deps = [ "init:libbegetutil" ]
155  public_configs = [
156    ":hdc_common_config",
157    ":hdc_ut_config",
158  ]
159  defines = [ "OPENSSL_SUPPRESS_DEPRECATED" ]
160}
161
162ohos_source_set("hdc_host") {
163  use_exceptions = true
164  sources = hdc_common_sources
165  sources += hdc_host_sources
166  if (hdc_support_uart) {
167    sources += [ "${hdc_path}/src/common/uart.cpp" ]
168    sources += [ "${hdc_path}/src/host/host_uart.cpp" ]
169  }
170  public_external_deps = common_external_deps
171  public_external_deps += [ "libusb:libusb" ]
172  public_configs = [
173    ":hdc_common_config",
174    ":hdc_host_common_config",
175    ":hdc_ut_config",
176  ]
177  defines = [ "OPENSSL_SUPPRESS_DEPRECATED" ]
178}
179
180ohos_source_set("hdc_daemon_platform") {
181  testonly = true
182  public_configs = [ ":hdc_ut_config" ]
183
184  #defines = [ "HARMONY_PROJECT" ]
185  defines = []
186  if (hdc_test_coverage && is_ohos) {
187    defines += [ "TEST_COVERAGE" ]
188  }
189
190  if (hdc_unit_test) {
191    defines += [ "HDC_UNIT_TEST" ]
192  }
193  if (js_jdwp_connect) {
194    defines += [ "JS_JDWP_CONNECT" ]
195  }
196
197  sources = [
198    "${hdc_path}/src/daemon/daemon_unity.cpp",
199    "${hdc_path}/src/daemon/jdwp.cpp",
200  ]
201
202  public_external_deps = [
203    "bounds_checking_function:libsec_static",
204    "googletest:gtest",
205    "libuv:uv",
206    "openssl:libcrypto_static",
207  ]
208
209  external_deps = [ "init:libbegetutil" ]
210
211  include_dirs = [ "${hdc_path}/daemon" ]
212}
213
214ohos_unittest("hdc_jdwp_unittest") {
215  module_out_path = module_output_path
216  public_configs = [ ":hdc_ut_config" ]
217  defines = [ "HARMONY_PROJECT" ]
218  if (hdc_test_coverage && is_ohos) {
219    defines += [ "TEST_COVERAGE" ]
220  }
221  if (hdc_unit_test) {
222    defines += [ "HDC_UNIT_TEST" ]
223  }
224  if (js_jdwp_connect) {
225    defines += [ "JS_JDWP_CONNECT" ]
226  }
227  public_deps = [ ":hdc_daemon_platform" ]
228
229  sources = [ "unittest/common/HdcJdwpTest.cpp" ]
230  deps = [ ":hdc_common" ]
231
232  include_dirs = [
233    "${hdc_path}/test/unittest/common/include",
234    "${hdc_path}/src/daemon",
235    "${hdc_path}/src/common",
236  ]
237  external_deps = [ "googletest:gmock_main" ]
238
239  if (is_linux) {
240    static_link = false
241  }
242  subsystem_name = "developtools"
243  defines += [ "OPENSSL_SUPPRESS_DEPRECATED" ]
244  external_deps += [
245    "bounds_checking_function:libsec_static",
246    "libuv:uv",
247  ]
248}
249
250ohos_unittest("hdc_uart_unittest") {
251  use_exceptions = true
252  module_out_path = module_output_path
253  resource_config_file = "unittest/resource/ohos_test.xml"
254  sources = [
255    "unittest/common/daemon_uart_test.cpp",
256    "unittest/common/uart_test.cpp",
257  ]
258
259  configs = [ ":hdc_common_config" ]
260  configs += [ ":hdc_ut_code_flag" ]
261  deps = [ ":hdc_daemon" ]
262  defines = [ "OPENSSL_SUPPRESS_DEPRECATED" ]
263
264  external_deps = [ "googletest:gmock_main" ]
265}
266
267ohos_unittest("hdc_host_uart_unittest") {
268  use_exceptions = true
269  module_out_path = module_output_path
270  resource_config_file = "unittest/resource/ohos_test.xml"
271  sources = [
272    "unittest/common/host_uart_test.cpp",
273    "unittest/common/uart_test.cpp",
274  ]
275
276  configs = [
277    ":hdc_common_config",
278    ":hdc_host_common_config",
279    ":hdc_ut_code_flag",
280  ]
281
282  deps = [ ":hdc_host" ]
283
284  defines = [ "OPENSSL_SUPPRESS_DEPRECATED" ]
285
286  external_deps = [ "googletest:gmock_main" ]
287}
288
289group("HdcJdwpTest") {
290  testonly = true
291  deps = [ ":hdc_jdwp_unittest" ]
292}
293
294group("hdc_unittest") {
295  testonly = true
296  deps = [
297    ":hdc_host_uart_unittest",
298    ":hdc_host_uart_unittest(${host_toolchain})",
299    ":hdc_jdwp_unittest",
300    ":hdc_register_unittest",
301    ":hdc_uart_unittest",
302    ":hdc_uart_unittest(${host_toolchain})",
303  ]
304}
305
306config("hdc_test_config") {
307  cflags = code_check_flag
308  ldflags = []
309  defines = [ "HARMONY_PROJECT" ]
310
311  if (hdc_test_coverage && is_ohos) {
312    defines += [ "TEST_COVERAGE" ]
313    cflags += [
314      "-fprofile-arcs",
315      "-ftest-coverage",
316    ]
317    ldflags += [ "--coverage" ]
318  }
319  if (js_jdwp_connect) {
320    defines += [ "JS_JDWP_CONNECT" ]
321  }
322  include_dirs = [
323    "${hdc_path}/test/fuzztest/jdwpreadstream_fuzzer",
324    "${hdc_path}/test/fuzztest/forwardreadstream_fuzzer",
325    "${hdc_path}/src/daemon",
326    "${hdc_path}/src/common",
327  ]
328}
329
330config("hdc_register_config") {
331  cflags = code_check_flag
332  ldflags = []
333  defines = [ "HDC_HILOG" ]
334
335  if (hdc_test_coverage && is_ohos) {
336    defines += [ "TEST_COVERAGE" ]
337    cflags += [
338      "-fprofile-arcs",
339      "-ftest-coverage",
340    ]
341    ldflags += [ "--coverage" ]
342  }
343  if (js_jdwp_connect) {
344    defines += [ "JS_JDWP_CONNECT" ]
345  }
346}
347
348fuzz_cflags = [
349  "-O0",
350  "-Wno-unused-variable",
351  "-fno-omit-frame-pointer",
352]
353
354ohos_fuzztest("JdwpReadStreamFuzzTest") {
355  module_out_path = FUZZ_OUTPUT_PATH
356  fuzz_config_file = "${hdc_path}/test/fuzztest/jdwpreadstream_fuzzer"
357  configs = [ ":hdc_test_config" ]
358  cflags = fuzz_cflags
359  sources = [
360    "${hdc_path}/src/daemon/jdwp.cpp",
361    "${hdc_path}/src/daemon/system_depend.cpp",
362    "fuzztest/jdwpreadstream_fuzzer/JdwpReadStream_fuzzer.cpp",
363  ]
364  deps = [ ":hdc_common" ]
365  external_deps = [
366    "hilog:libhilog",
367    "init:libbeget_proxy",
368    "init:libbegetutil",
369  ]
370  public_external_deps = [
371    "bounds_checking_function:libsec_static",
372    "libuv:uv",
373  ]
374}
375
376ohos_fuzztest("ForwardReadStreamFuzzTest") {
377  module_out_path = FUZZ_OUTPUT_PATH
378  fuzz_config_file = "${hdc_path}/test/fuzztest/forwardreadstream_fuzzer"
379  configs = [ ":hdc_test_config" ]
380  cflags = fuzz_cflags
381  sources = [ "fuzztest/forwardreadstream_fuzzer/ForwardReadStream_fuzzer.cpp" ]
382  deps = [ ":hdc_common" ]
383  subsystem_name = "developtools"
384  part_name = "hdc"
385  external_deps = [
386    "hilog:libhilog",
387    "libuv:uv",
388  ]
389  public_external_deps = [
390    "bounds_checking_function:libsec_static",
391    "libuv:uv",
392  ]
393}
394
395ohos_fuzztest("DaemonUsbReadFuzzTest") {
396  module_out_path = FUZZ_OUTPUT_PATH
397  fuzz_config_file = "${hdc_path}/test/fuzztest/daemonusbread_fuzzer"
398  configs = [ ":hdc_test_config" ]
399  cflags = fuzz_cflags
400  sources = [
401    "${hdc_path}/src/daemon/daemon_usb.cpp",
402    "${hdc_path}/src/daemon/system_depend.cpp",
403    "fuzztest/daemonusbread_fuzzer/DaemonUsbRead_fuzzer.cpp",
404  ]
405  deps = [ ":hdc_common" ]
406  external_deps = [
407    "init:libbeget_proxy",
408    "init:libbegetutil",
409  ]
410  public_external_deps = [
411    "bounds_checking_function:libsec_static",
412    "libuv:uv",
413  ]
414}
415
416group("hdc_fuzztest") {
417  testonly = true
418  deps = [
419    ":DaemonUsbReadFuzzTest",
420    ":ForwardReadStreamFuzzTest",
421    ":JdwpReadStreamFuzzTest",
422  ]
423}
424
425ohos_unittest("hdc_register_unittest") {
426  module_out_path = module_output_path
427  resource_config_file = "unittest/resource/ohos_test.xml"
428
429  sources = [
430    "${hdc_path}/src/register/hdc_connect.cpp",
431    "${hdc_path}/src/register/hdc_jdwp.cpp",
432    "unittest/register/register_test.cpp",
433  ]
434
435  include_dirs = [ "${hdc_path}/src/register/" ]
436
437  configs = [ ":hdc_register_config" ]
438
439  external_deps = [
440    "c_utils:utils",
441    "googletest:gmock_main",
442    "hilog:libhilog",
443    "init:libbeget_proxy",
444    "init:libbegetutil",
445    "libuv:uv",
446  ]
447
448  subsystem_name = "developtools"
449  part_name = "hdc"
450}
451