1fb726d48Sopenharmony_ci# Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
2fb726d48Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3fb726d48Sopenharmony_ci# you may not use this file except in compliance with the License.
4fb726d48Sopenharmony_ci# You may obtain a copy of the License at
5fb726d48Sopenharmony_ci#
6fb726d48Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
7fb726d48Sopenharmony_ci#
8fb726d48Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9fb726d48Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10fb726d48Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11fb726d48Sopenharmony_ci# See the License for the specific language governing permissions and
12fb726d48Sopenharmony_ci# limitations under the License.
13fb726d48Sopenharmony_ci
14fb726d48Sopenharmony_ciimport("//build/ohos.gni")
15fb726d48Sopenharmony_cicommon_source = [
16fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gexpr.c",
17fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gfde.c",
18fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gfind_proc_info-lsb.c",
19fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gfind_unwind_table.c",
20fb726d48Sopenharmony_ci  "libunwind/src/dwarf/global.c",
21fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gparser.c",
22fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Gpe.c",
23fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lexpr.c",
24fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfde.c",
25fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfind_proc_info-lsb.c",
26fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfind_unwind_table.c",
27fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lparser.c",
28fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lpe.c",
29fb726d48Sopenharmony_ci  "libunwind/src/mi/backtrace.c",
30fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-cancel.c",
31fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-info-list.c",
32fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-register.c",
33fb726d48Sopenharmony_ci  "libunwind/src/mi/flush_cache.c",
34fb726d48Sopenharmony_ci  "libunwind/src/mi/Gdestroy_addr_space.c",
35fb726d48Sopenharmony_ci  "libunwind/src/mi/Gdyn-extract.c",
36fb726d48Sopenharmony_ci  "libunwind/src/mi/Gdyn-remote.c",
37fb726d48Sopenharmony_ci  "libunwind/src/mi/Gfind_dynamic_proc_info.c",
38fb726d48Sopenharmony_ci  "libunwind/src/mi/Gget_accessors.c",
39fb726d48Sopenharmony_ci  "libunwind/src/mi/Gget_fpreg.c",
40fb726d48Sopenharmony_ci  "libunwind/src/mi/Gget_proc_info_by_ip.c",
41fb726d48Sopenharmony_ci  "libunwind/src/mi/Gget_proc_name.c",
42fb726d48Sopenharmony_ci  "libunwind/src/mi/Gget_reg.c",
43fb726d48Sopenharmony_ci  "libunwind/src/mi/Gput_dynamic_unwind_info.c",
44fb726d48Sopenharmony_ci  "libunwind/src/mi/Gset_cache_size.c",
45fb726d48Sopenharmony_ci  "libunwind/src/mi/Gset_caching_policy.c",
46fb726d48Sopenharmony_ci  "libunwind/src/mi/Gset_fpreg.c",
47fb726d48Sopenharmony_ci  "libunwind/src/mi/Gset_reg.c",
48fb726d48Sopenharmony_ci  "libunwind/src/mi/init.c",
49fb726d48Sopenharmony_ci  "libunwind/src/mi/Ldestroy_addr_space.c",
50fb726d48Sopenharmony_ci  "libunwind/src/mi/Ldyn-extract.c",
51fb726d48Sopenharmony_ci  "libunwind/src/mi/Lfind_dynamic_proc_info.c",
52fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_fpreg.c",
53fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_proc_info_by_ip.c",
54fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_proc_name.c",
55fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_reg.c",
56fb726d48Sopenharmony_ci  "libunwind/src/mi/Lput_dynamic_unwind_info.c",
57fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_cache_size.c",
58fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_caching_policy.c",
59fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_fpreg.c",
60fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_reg.c",
61fb726d48Sopenharmony_ci  "libunwind/src/mi/mempool.c",
62fb726d48Sopenharmony_ci  "libunwind/src/mi/strerror.c",
63fb726d48Sopenharmony_ci  "libunwind/src/os-linux.c",
64fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_fpreg.c",
65fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_mem.c",
66fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_reg.c",
67fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_accessors.c",
68fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_create.c",
69fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_destroy.c",
70fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_find_proc_info.c",
71fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_get_proc_name.c",
72fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_put_unwind_info.c",
73fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_reg_offset.c",
74fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_resume.c",
75fb726d48Sopenharmony_ci]
76fb726d48Sopenharmony_ci
77fb726d48Sopenharmony_ci# as libc++ is static linked with libunwind.a
78fb726d48Sopenharmony_ci# we remove the Gstep.c for duplicated symbol violation
79fb726d48Sopenharmony_ciif (target_cpu == "arm") {
80fb726d48Sopenharmony_ci  arm_source = [
81fb726d48Sopenharmony_ci    "libunwind/src/arm/Gapply_reg_state.c",
82fb726d48Sopenharmony_ci    "libunwind/src/arm/Gcreate_addr_space.c",
83fb726d48Sopenharmony_ci    "libunwind/src/arm/Gex_tables.c",
84fb726d48Sopenharmony_ci    "libunwind/src/arm/Gget_proc_info.c",
85fb726d48Sopenharmony_ci    "libunwind/src/arm/Gget_save_loc.c",
86fb726d48Sopenharmony_ci    "libunwind/src/arm/Gglobal.c",
87fb726d48Sopenharmony_ci    "libunwind/src/arm/Ginit.c",
88fb726d48Sopenharmony_ci    "libunwind/src/arm/Ginit_local.c",
89fb726d48Sopenharmony_ci    "libunwind/src/arm/Ginit_remote.c",
90fb726d48Sopenharmony_ci    "libunwind/src/arm/Gos-linux.c",
91fb726d48Sopenharmony_ci    "libunwind/src/arm/Greg_states_iterate.c",
92fb726d48Sopenharmony_ci    "libunwind/src/arm/Gregs.c",
93fb726d48Sopenharmony_ci    "libunwind/src/arm/Gresume.c",
94fb726d48Sopenharmony_ci    "libunwind/src/arm/Gstash_frame.c",
95fb726d48Sopenharmony_ci    "libunwind/src/arm/Gstep.c",
96fb726d48Sopenharmony_ci    "libunwind/src/arm/Gtrace.c",
97fb726d48Sopenharmony_ci    "libunwind/src/arm/Lcreate_addr_space.c",
98fb726d48Sopenharmony_ci    "libunwind/src/arm/Lex_tables.c",
99fb726d48Sopenharmony_ci    "libunwind/src/arm/Lget_proc_info.c",
100fb726d48Sopenharmony_ci    "libunwind/src/arm/Lget_save_loc.c",
101fb726d48Sopenharmony_ci    "libunwind/src/arm/Lglobal.c",
102fb726d48Sopenharmony_ci    "libunwind/src/arm/Linit.c",
103fb726d48Sopenharmony_ci    "libunwind/src/arm/Linit_local.c",
104fb726d48Sopenharmony_ci    "libunwind/src/arm/Linit_remote.c",
105fb726d48Sopenharmony_ci    "libunwind/src/arm/Los-linux.c",
106fb726d48Sopenharmony_ci    "libunwind/src/arm/Lregs.c",
107fb726d48Sopenharmony_ci    "libunwind/src/arm/Lresume.c",
108fb726d48Sopenharmony_ci    "libunwind/src/arm/Lstash_frame.c",
109fb726d48Sopenharmony_ci    "libunwind/src/arm/Lstep.c",
110fb726d48Sopenharmony_ci    "libunwind/src/arm/Ltrace.c",
111fb726d48Sopenharmony_ci    "libunwind/src/arm/getcontext.S",
112fb726d48Sopenharmony_ci    "libunwind/src/arm/is_fpreg.c",
113fb726d48Sopenharmony_ci    "libunwind/src/arm/regname.c",
114fb726d48Sopenharmony_ci    "libunwind/src/arm/siglongjmp.S",
115fb726d48Sopenharmony_ci    "libunwind/src/elf32.c",
116fb726d48Sopenharmony_ci  ]
117fb726d48Sopenharmony_ci}
118fb726d48Sopenharmony_ciif (target_cpu == "arm64") {
119fb726d48Sopenharmony_ci  arm64_source = [
120fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gcreate_addr_space.c",
121fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gget_proc_info.c",
122fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gget_save_loc.c",
123fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gglobal.c",
124fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Ginit.c",
125fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Ginit_local.c",
126fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Ginit_remote.c",
127fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gis_signal_frame.c",
128fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gregs.c",
129fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gresume.c",
130fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gstash_frame.c",
131fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gstep.c",
132fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Gtrace.c",
133fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lcreate_addr_space.c",
134fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lget_proc_info.c",
135fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lget_save_loc.c",
136fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lglobal.c",
137fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Linit.c",
138fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Linit_local.c",
139fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Linit_remote.c",
140fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lis_signal_frame.c",
141fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lregs.c",
142fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lresume.c",
143fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lstash_frame.c",
144fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Lstep.c",
145fb726d48Sopenharmony_ci    "libunwind/src/aarch64/Ltrace.c",
146fb726d48Sopenharmony_ci    "libunwind/src/aarch64/getcontext.S",
147fb726d48Sopenharmony_ci    "libunwind/src/aarch64/is_fpreg.c",
148fb726d48Sopenharmony_ci    "libunwind/src/aarch64/regname.c",
149fb726d48Sopenharmony_ci    "libunwind/src/elf64.c",
150fb726d48Sopenharmony_ci  ]
151fb726d48Sopenharmony_ci}
152fb726d48Sopenharmony_ci
153fb726d48Sopenharmony_ciif (target_cpu == "x64") {
154fb726d48Sopenharmony_ci  x64_source = [
155fb726d48Sopenharmony_ci    "libunwind/src/elf64.c",
156fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gcreate_addr_space.c",
157fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gget_proc_info.c",
158fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gget_save_loc.c",
159fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gglobal.c",
160fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Ginit.c",
161fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Ginit_local.c",
162fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Ginit_remote.c",
163fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gos-linux.c",
164fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gregs.c",
165fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gresume.c",
166fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gstash_frame.c",
167fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gstep.c",
168fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Gtrace.c",
169fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lcreate_addr_space.c",
170fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lget_proc_info.c",
171fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lget_save_loc.c",
172fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lglobal.c",
173fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Linit.c",
174fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Linit_local.c",
175fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Linit_remote.c",
176fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Los-linux.c",
177fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lregs.c",
178fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lresume.c",
179fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lstash_frame.c",
180fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Lstep.c",
181fb726d48Sopenharmony_ci    "libunwind/src/x86_64/Ltrace.c",
182fb726d48Sopenharmony_ci    "libunwind/src/x86_64/getcontext.S",
183fb726d48Sopenharmony_ci    "libunwind/src/x86_64/is_fpreg.c",
184fb726d48Sopenharmony_ci    "libunwind/src/x86_64/regname.c",
185fb726d48Sopenharmony_ci    "libunwind/src/x86_64/setcontext.S",
186fb726d48Sopenharmony_ci  ]
187fb726d48Sopenharmony_ci}
188fb726d48Sopenharmony_ciremove_sources = []
189fb726d48Sopenharmony_ci
190fb726d48Sopenharmony_ciptrace_sources = [
191fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_fpreg.c",
192fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_mem.c",
193fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_access_reg.c",
194fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_accessors.c",
195fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_create.c",
196fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_destroy.c",
197fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_find_proc_info.c",
198fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c",
199fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_get_proc_name.c",
200fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_put_unwind_info.c",
201fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_reg_offset.c",
202fb726d48Sopenharmony_ci  "libunwind/src/ptrace/_UPT_resume.c",
203fb726d48Sopenharmony_ci]
204fb726d48Sopenharmony_ci
205fb726d48Sopenharmony_cilibunwind_la_SOURCES_local_nounwind = [
206fb726d48Sopenharmony_ci  "libunwind/src/mi/backtrace.c",
207fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-cancel.c",
208fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-info-list.c",
209fb726d48Sopenharmony_ci  "libunwind/src/mi/dyn-register.c",
210fb726d48Sopenharmony_ci  "libunwind/src/mi/Ldyn-extract.c",
211fb726d48Sopenharmony_ci  "libunwind/src/mi/Lfind_dynamic_proc_info.c",
212fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_proc_info_by_ip.c",
213fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_proc_name.c",
214fb726d48Sopenharmony_ci  "libunwind/src/mi/Lput_dynamic_unwind_info.c",
215fb726d48Sopenharmony_ci  "libunwind/src/mi/Ldestroy_addr_space.c",
216fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_reg.c",
217fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_reg.c",
218fb726d48Sopenharmony_ci  "libunwind/src/mi/Lget_fpreg.c",
219fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_fpreg.c",
220fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_caching_policy.c",
221fb726d48Sopenharmony_ci  "libunwind/src/mi/Lset_cache_size.c",
222fb726d48Sopenharmony_ci]
223fb726d48Sopenharmony_ci
224fb726d48Sopenharmony_cilibunwind_dwarf_local_la_SOURCES = [
225fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lexpr.c",
226fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfde.c",
227fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lparser.c",
228fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lpe.c",
229fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfind_proc_info-lsb.c",
230fb726d48Sopenharmony_ci  "libunwind/src/dwarf/Lfind_unwind_table.c",
231fb726d48Sopenharmony_ci]
232fb726d48Sopenharmony_ci
233fb726d48Sopenharmony_ci# remove local file
234fb726d48Sopenharmony_ciremove_sources += libunwind_la_SOURCES_local_nounwind
235fb726d48Sopenharmony_ciremove_sources += libunwind_dwarf_local_la_SOURCES
236fb726d48Sopenharmony_ciremove_sources += ptrace_sources
237fb726d48Sopenharmony_ci
238fb726d48Sopenharmony_ciif (is_mingw) {
239fb726d48Sopenharmony_ci  common_source += [ "libunwind/src/mingw/pal-single-threaded.c" ]
240fb726d48Sopenharmony_ci}
241fb726d48Sopenharmony_ci
242fb726d48Sopenharmony_ciconfig("unwind_config_public") {
243fb726d48Sopenharmony_ci  include_dirs = [
244fb726d48Sopenharmony_ci    "libunwind/src",
245fb726d48Sopenharmony_ci    "libunwind/include",
246fb726d48Sopenharmony_ci  ]
247fb726d48Sopenharmony_ci
248fb726d48Sopenharmony_ci  cflags = [
249fb726d48Sopenharmony_ci    "-D_GNU_SOURCE",
250fb726d48Sopenharmony_ci    "-DHAVE_CONFIG_H",
251fb726d48Sopenharmony_ci    "-DCC_IS_CLANG",
252fb726d48Sopenharmony_ci    "-fcommon",
253fb726d48Sopenharmony_ci    "-Werror",
254fb726d48Sopenharmony_ci    "-Wno-absolute-value",
255fb726d48Sopenharmony_ci    "-Wno-header-guard",
256fb726d48Sopenharmony_ci    "-Wno-unused-parameter",
257fb726d48Sopenharmony_ci    "-Wno-unused-variable",
258fb726d48Sopenharmony_ci    "-Wno-unused-result",
259fb726d48Sopenharmony_ci    "-Wno-tautological-constant-out-of-range-compare",
260fb726d48Sopenharmony_ci    "-Wno-bitfield-constant-conversion",
261fb726d48Sopenharmony_ci  ]
262fb726d48Sopenharmony_ci  if (use_wasm) {
263fb726d48Sopenharmony_ci    cflags += [ "-Wno-incompatible-pointer-types" ]
264fb726d48Sopenharmony_ci  }
265fb726d48Sopenharmony_ci  if (is_mingw) {
266fb726d48Sopenharmony_ci    cflags += [
267fb726d48Sopenharmony_ci      "-Wno-attributes",
268fb726d48Sopenharmony_ci      "-Wno-pointer-to-int-cast",
269fb726d48Sopenharmony_ci      "-Wno-implicit-function-declaration",
270fb726d48Sopenharmony_ci    ]
271fb726d48Sopenharmony_ci  }
272fb726d48Sopenharmony_ci
273fb726d48Sopenharmony_ci  if (defined(ohos_lite)) {
274fb726d48Sopenharmony_ci    cflags += [ "-fPIC" ]
275fb726d48Sopenharmony_ci  }
276fb726d48Sopenharmony_ci
277fb726d48Sopenharmony_ci  if (target_cpu == "arm") {
278fb726d48Sopenharmony_ci    include_dirs += [ "libunwind/include/tdep-arm" ]
279fb726d48Sopenharmony_ci    cflags += [
280fb726d48Sopenharmony_ci      "-Wno-inline-asm",
281fb726d48Sopenharmony_ci      "-Wno-shift-count-overflow",
282fb726d48Sopenharmony_ci      "-Wno-tautological-constant-out-of-range-compare",
283fb726d48Sopenharmony_ci      "-Wno-unused-function",
284fb726d48Sopenharmony_ci    ]
285fb726d48Sopenharmony_ci  } else if (target_cpu == "arm64") {
286fb726d48Sopenharmony_ci    include_dirs += [ "libunwind/include/tdep-aarch64" ]
287fb726d48Sopenharmony_ci    cflags += [ "-Wno-incompatible-pointer-types" ]
288fb726d48Sopenharmony_ci  } else if (target_cpu == "x64") {
289fb726d48Sopenharmony_ci    include_dirs += [ "libunwind/include/tdep-x86_64" ]
290fb726d48Sopenharmony_ci  }
291fb726d48Sopenharmony_ci}
292fb726d48Sopenharmony_ciconfig("unwind_config_remote") {
293fb726d48Sopenharmony_ci  cflags =
294fb726d48Sopenharmony_ci      [ "-Wno-format" ]  # some debug feature will warning in host x64 build
295fb726d48Sopenharmony_ci}
296fb726d48Sopenharmony_ciconfig("unwind_config_remote_public") {
297fb726d48Sopenharmony_ci  cflags = []
298fb726d48Sopenharmony_ci  include_dirs = []
299fb726d48Sopenharmony_ci  defines = []
300fb726d48Sopenharmony_ci
301fb726d48Sopenharmony_ci  # this is a host tools build
302fb726d48Sopenharmony_ci  # what means host use remote mode to unwind
303fb726d48Sopenharmony_ci  # with dwarf from stack or coredump or something not real target
304fb726d48Sopenharmony_ci  # There is an exception, we can support local unwind for linux.
305fb726d48Sopenharmony_ci  cflags += [ "-DUNW_REMOTE_ONLY" ]
306fb726d48Sopenharmony_ci
307fb726d48Sopenharmony_ci  cflags += [ "-DBUILD_REMOTE" ]
308fb726d48Sopenharmony_ci
309fb726d48Sopenharmony_ci  cflags += [ "-Wno-sometimes-uninitialized" ]  # some value not initialized in
310fb726d48Sopenharmony_ci                                                # host x64 build
311fb726d48Sopenharmony_ci  cflags += [ "-Wno-int-to-void-pointer-cast" ]
312fb726d48Sopenharmony_ci
313fb726d48Sopenharmony_ci  if (is_mingw) {
314fb726d48Sopenharmony_ci    include_dirs += [ "include/mingw" ]
315fb726d48Sopenharmony_ci    cflags += [ "-DMINGW" ]
316fb726d48Sopenharmony_ci  } else if (is_linux) {
317fb726d48Sopenharmony_ci    cflags += [ "-g" ]  # we need debug info when it crash.
318fb726d48Sopenharmony_ci  }
319fb726d48Sopenharmony_ci
320fb726d48Sopenharmony_ci  defines += [ "build_remote=1" ]
321fb726d48Sopenharmony_ci  defines += [ "target_cpu=${target_cpu}" ]
322fb726d48Sopenharmony_ci}
323fb726d48Sopenharmony_ci
324fb726d48Sopenharmony_ciconfig("unwind_config_arm") {
325fb726d48Sopenharmony_ci  defines = [ "UNW_TARGET_ARM" ]
326fb726d48Sopenharmony_ci}
327fb726d48Sopenharmony_ci
328fb726d48Sopenharmony_ciconfig("unwind_config_arm64") {
329fb726d48Sopenharmony_ci  defines = [ "UNW_TARGET_ARM64" ]
330fb726d48Sopenharmony_ci}
331fb726d48Sopenharmony_ci
332fb726d48Sopenharmony_ciconfig("unwind_config_x64") {
333fb726d48Sopenharmony_ci  defines = [ "UNW_TARGET_X86_64" ]
334fb726d48Sopenharmony_ci  defines += [ "UNW_TARGET_X86_64_LINUX" ]
335fb726d48Sopenharmony_ci}
336fb726d48Sopenharmony_ciif (target_cpu == "arm") {
337fb726d48Sopenharmony_ci  ohos_source_set("unwind_source_arm") {
338fb726d48Sopenharmony_ci    subsystem_name = "developtools"
339fb726d48Sopenharmony_ci    part_name = "smartperf_host"
340fb726d48Sopenharmony_ci    configs += [ ":unwind_config_remote" ]
341fb726d48Sopenharmony_ci    public_configs = [
342fb726d48Sopenharmony_ci      ":unwind_config_public",
343fb726d48Sopenharmony_ci      ":unwind_config_remote_public",
344fb726d48Sopenharmony_ci      ":unwind_config_arm",
345fb726d48Sopenharmony_ci    ]
346fb726d48Sopenharmony_ci    sources = common_source
347fb726d48Sopenharmony_ci
348fb726d48Sopenharmony_ci    # there is a main function in this file
349fb726d48Sopenharmony_ci    # for a lib we dont need this
350fb726d48Sopenharmony_ci    arm_source -= [ "src/arm/gen-offsets.c" ]
351fb726d48Sopenharmony_ci
352fb726d48Sopenharmony_ci    # no jump lib
353fb726d48Sopenharmony_ci    arm_source -= [
354fb726d48Sopenharmony_ci      "libunwind/src/arm/getcontext.S",
355fb726d48Sopenharmony_ci      "libunwind/src/arm/siglongjmp.S",
356fb726d48Sopenharmony_ci    ]
357fb726d48Sopenharmony_ci    sources += arm_source
358fb726d48Sopenharmony_ci    sources -= remove_sources
359fb726d48Sopenharmony_ci  }
360fb726d48Sopenharmony_ci}
361fb726d48Sopenharmony_ciif (target_cpu == "arm64") {
362fb726d48Sopenharmony_ci  ohos_source_set("unwind_source_arm64") {
363fb726d48Sopenharmony_ci    subsystem_name = "developtools"
364fb726d48Sopenharmony_ci    part_name = "smartperf_host"
365fb726d48Sopenharmony_ci    configs += [ ":unwind_config_remote" ]
366fb726d48Sopenharmony_ci    public_configs = [
367fb726d48Sopenharmony_ci      ":unwind_config_public",
368fb726d48Sopenharmony_ci      ":unwind_config_remote_public",
369fb726d48Sopenharmony_ci      ":unwind_config_arm64",
370fb726d48Sopenharmony_ci    ]
371fb726d48Sopenharmony_ci    sources = common_source
372fb726d48Sopenharmony_ci    arm64_source -= [ "libunwind/src/aarch64/getcontext.S" ]
373fb726d48Sopenharmony_ci
374fb726d48Sopenharmony_ci    sources += arm64_source
375fb726d48Sopenharmony_ci    sources -= remove_sources
376fb726d48Sopenharmony_ci  }
377fb726d48Sopenharmony_ci}
378fb726d48Sopenharmony_ciif (target_cpu == "x86") {
379fb726d48Sopenharmony_ci  ohos_source_set("unwind_source_x64") {
380fb726d48Sopenharmony_ci    subsystem_name = "developtools"
381fb726d48Sopenharmony_ci    part_name = "smartperf_host"
382fb726d48Sopenharmony_ci    configs += [ ":unwind_config_remote" ]
383fb726d48Sopenharmony_ci    public_configs = [
384fb726d48Sopenharmony_ci      ":unwind_config_public",
385fb726d48Sopenharmony_ci      ":unwind_config_remote_public",
386fb726d48Sopenharmony_ci      ":unwind_config_x64",
387fb726d48Sopenharmony_ci    ]
388fb726d48Sopenharmony_ci    sources = common_source
389fb726d48Sopenharmony_ci
390fb726d48Sopenharmony_ci    # no jump lib
391fb726d48Sopenharmony_ci    x64_source -= [
392fb726d48Sopenharmony_ci      "libunwind/src/x86_64/getcontext.S",
393fb726d48Sopenharmony_ci      "libunwind/src/x86_64/setcontext.S",
394fb726d48Sopenharmony_ci    ]
395fb726d48Sopenharmony_ci    sources += x64_source
396fb726d48Sopenharmony_ci    sources -= remove_sources
397fb726d48Sopenharmony_ci  }
398fb726d48Sopenharmony_ci}
399fb726d48Sopenharmony_ciohos_source_set("unwind_source") {
400fb726d48Sopenharmony_ci  subsystem_name = "developtools"
401fb726d48Sopenharmony_ci  part_name = "smartperf_host"
402fb726d48Sopenharmony_ci  configs += [ ":unwind_config_public" ]
403fb726d48Sopenharmony_ci  sources = common_source
404fb726d48Sopenharmony_ci  if (target_cpu == "arm") {
405fb726d48Sopenharmony_ci    # as libc++ is static linked with libunwind.a
406fb726d48Sopenharmony_ci    # we remove the Gstep.c for duplicated symbol violation
407fb726d48Sopenharmony_ci    sources += arm_source
408fb726d48Sopenharmony_ci    public_configs = [ ":unwind_config_arm" ]
409fb726d48Sopenharmony_ci  } else if (target_cpu == "arm64") {
410fb726d48Sopenharmony_ci    sources += arm64_source
411fb726d48Sopenharmony_ci    public_configs = [ ":unwind_config_arm64" ]
412fb726d48Sopenharmony_ci  } else if (target_cpu == "x64") {
413fb726d48Sopenharmony_ci    sources += x64_source
414fb726d48Sopenharmony_ci    public_configs = [ ":unwind_config_x64" ]
415fb726d48Sopenharmony_ci  }
416fb726d48Sopenharmony_ci}
417fb726d48Sopenharmony_ci
418fb726d48Sopenharmony_cisource_set("libunwind") {
419fb726d48Sopenharmony_ci  deps = [ ":unwind_source" ]
420fb726d48Sopenharmony_ci  public_configs = [ ":unwind_config_public" ]
421fb726d48Sopenharmony_ci}
422