1# Copyright (C) 2021-2022 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.
13
14if (defined(ohos_lite)) {
15  import("//build/lite/config/component/lite_component.gni")
16  import("//foundation/communication/dhcp/dhcp_lite.gni")
17} else {
18  import("//build/ohos.gni")
19  import("//foundation/communication/dhcp/dhcp.gni")
20}
21
22################################################################################
23local_base_include_dirs = [
24  "$DHCP_ROOT_DIR/interfaces",
25  "$DHCP_ROOT_DIR/interfaces/kits/c",
26  "$DHCP_ROOT_DIR/interfaces/inner_api",
27  "$DHCP_ROOT_DIR/interfaces/inner_api/include",
28  "$DHCP_ROOT_DIR/frameworks/native/include",
29  "$DHCP_ROOT_DIR/frameworks/native/interfaces",
30  "$DHCP_ROOT_DIR/frameworks/native/src",
31  "$DHCP_ROOT_DIR/services",
32  "$DHCP_ROOT_DIR/services/dhcp_client/include",
33  "$DHCP_ROOT_DIR/services/utils/include",
34  "$DHCP_ROOT_DIR/frameworks/native/c_adapter/inc",
35]
36if (defined(ohos_lite)) {
37  shared_library("dhcp_client") {
38    sources = [
39      "src/dhcp_client_callback_proxy_lite.cpp",
40      "src/dhcp_client_service_impl.cpp",
41      "src/dhcp_client_state_machine.cpp",
42      "src/dhcp_client_stub_lite.cpp",
43      "src/dhcp_function.cpp",
44      "src/dhcp_ipv6_client.cpp",
45      "src/dhcp_ipv6_event.cpp",
46      "src/dhcp_options.cpp",
47      "src/dhcp_result.cpp",
48      "src/dhcp_socket.cpp",
49    ]
50
51    include_dirs = local_base_include_dirs
52    include_dirs += [
53      "//base/hiviewdfx/hilog_lite/interfaces/native/innerkits",
54      "//third_party/bounds_checking_function/include",
55      "//foundation/systemabilitymgr/samgr_lite/interfaces/innerkits/registry",
56      "//foundation/systemabilitymgr/samgr_lite/interfaces/innerkits/samgr",
57    ]
58
59    deps = [
60      "//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_shared",
61      "//foundation/systemabilitymgr/samgr_lite/samgr:samgr",
62    ]
63    external_deps = [ "bounds_checking_function:libsec_shared" ]
64    defines = [
65      "_GNU_SOURCE",
66      "OHOS_ARCH_LITE",
67      "VENDOR_NAME_PREFIX=\"$VENDOR_NAME\"",
68      "DEFAULT_IPV4_DNS_PRI=\"$IPV4_DNS_PRI\"",
69      "DEFAULT_IPV4_DNS_SEC=\"$IPV4_DNS_SEC\"",
70    ]
71    configs -= [ "//build/lite/config:language_cpp" ]
72    cflags = [
73      "-std=c++17",
74      "-fno-rtti",
75    ]
76  }
77} else {
78  local_base_sources = [
79    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_callback_proxy.cpp",
80    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_death_recipient.cpp",
81    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_service_impl.cpp",
82    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_state_machine.cpp",
83    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_stub.cpp",
84    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_function.cpp",
85    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_ipv6_client.cpp",
86    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_ipv6_event.cpp",
87    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_options.cpp",
88    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_result.cpp",
89    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_result_store_manager.cpp",
90    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_socket.cpp",
91    "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_thread.cpp",
92  ]
93  config("dhcp_manager_service_header") {
94    visibility = [ ":*" ]
95    include_dirs = local_base_include_dirs
96  }
97  ohos_shared_library("dhcp_client") {
98    branch_protector_ret = "pac_ret"
99    sanitize = {
100      cfi = true  # Enable/disable control flow integrity detection
101      boundary_sanitize = true  # Enable boundary san detection
102      cfi_cross_dso = true  # Cross-SO CFI Checks
103      integer_overflow = true  # Enable integer overflow detection
104      ubsan = true  # Enable some Ubsan options
105      debug = false
106    }
107    install_enable = true
108    sources = local_base_sources
109    include_dirs = local_base_include_dirs
110    defines = [
111      "VENDOR_NAME_PREFIX=\"$VENDOR_NAME\"",
112      "DEFAULT_IPV4_DNS_PRI=\"$IPV4_DNS_PRI\"",
113      "DEFAULT_IPV4_DNS_SEC=\"$IPV4_DNS_SEC\"",
114    ]
115    if (is_asan) {
116      defines += [ "DTFUZZ_TEST" ]
117    }
118
119    deps = [ "$DHCP_ROOT_DIR/services/utils:dhcp_utils" ]
120
121    external_deps = [
122      "ability_runtime:wantagent_innerkits",
123      "access_token:libaccesstoken_sdk",
124      "access_token:libtokenid_sdk",
125      "c_utils:utils",
126      "hilog:libhilog",
127      "ipc:ipc_single",
128      "netmanager_base:net_native_manager_if",
129      "netmanager_base:netsys_controller",
130      "safwk:system_ability_fwk",
131      "samgr:samgr_proxy",
132      "time_service:time_client",
133    ]
134
135    if (defined(global_parts_info) &&
136        defined(global_parts_info.resourceschedule_ffrt)) {
137      external_deps += [ "ffrt:libffrt" ]
138      defines += [ "DHCP_FFRT_ENABLE" ]
139    }
140
141    if (defined(global_parts_info) && defined(global_parts_info.startup_init)) {
142      external_deps += [ "init:libbegetutil" ]
143      defines += [ "INIT_LIB_ENABLE" ]
144    }
145    cflags = [
146      "-std=c++17",
147      "-fno-rtti",
148    ]
149    ldflags = [
150      "-fPIC",
151      "-Wl,-E",
152    ]
153    shlib_type = "sa"
154    version_script = "libdhcp_client.map"
155    public_configs = [ ":dhcp_manager_service_header" ]
156    part_name = "dhcp"
157    subsystem_name = "communication"
158    innerapi_tags = [ "platformsdk" ]
159  }
160
161  ohos_shared_library("dhcp_updater_client") {
162    branch_protector_ret = "pac_ret"
163    sanitize = {
164      cfi = true  # Enable/disable control flow integrity detection
165      boundary_sanitize = true  # Enable boundary san detection
166      cfi_cross_dso = true  # Cross-SO CFI Checks
167      integer_overflow = true  # Enable integer overflow detection
168      ubsan = true  # Enable some Ubsan options
169      debug = false
170    }
171    install_enable = true
172    sources = [
173      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_service_impl.cpp",
174      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_state_machine.cpp",
175      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_client_stub_lite.cpp",
176      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_function.cpp",
177      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_ipv6_client.cpp",
178      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_ipv6_event.cpp",
179      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_options.cpp",
180      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_result.cpp",
181      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_result_store_manager.cpp",
182      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_socket.cpp",
183      "$DHCP_ROOT_DIR/services/dhcp_client/src/dhcp_thread.cpp",
184      "$DHCP_ROOT_DIR/services/utils/src/dhcp_arp_checker.cpp",
185      "$DHCP_ROOT_DIR/services/utils/src/dhcp_common_utils.cpp",
186      "$DHCP_ROOT_DIR/services/utils/src/dhcp_permission_utils.cpp",
187    ]
188    include_dirs = local_base_include_dirs
189
190    cflags_cc = [
191      "-std=c++17",
192      "-Wall",
193    ]
194
195    defines = [
196      "OHOS_ARCH_LITE",
197      "OHOS_EUPDATER",
198      "VENDOR_NAME_PREFIX=\"$VENDOR_NAME\"",
199      "DEFAULT_IPV4_DNS_PRI=\"$IPV4_DNS_PRI\"",
200      "DEFAULT_IPV4_DNS_SEC=\"$IPV4_DNS_SEC\"",
201    ]
202
203    deps = []
204
205    external_deps = [
206      "bounds_checking_function:libsec_shared",
207      "c_utils:utils",
208      "hilog:libhilog",
209      "netmanager_base:net_native_manager_if",
210      "netmanager_base:netsys_controller",
211    ]
212
213    if (defined(global_parts_info) &&
214        defined(global_parts_info.resourceschedule_ffrt)) {
215      external_deps += [ "ffrt:libffrt" ]
216      defines += [ "DHCP_FFRT_ENABLE" ]
217    }
218
219    if (defined(global_parts_info) && defined(global_parts_info.startup_init)) {
220      external_deps += [ "init:libbegetutil" ]
221      defines += [ "INIT_LIB_ENABLE" ]
222    }
223    ldflags = [
224      "-fPIC",
225      "-Wl,-E",
226    ]
227    install_images = [ "updater" ]
228    part_name = "dhcp"
229    subsystem_name = "communication"
230  }
231}
232