• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
13
14if (defined(ohos_lite)) {
15  import("//build/lite/config/component/lite_component.gni")
16} else {
17  import("//build/ohos.gni")
18}
19libunwind_code_dir = "${target_gen_dir}/libunwind-1.6.2"
20common_source = [
21  "$libunwind_code_dir/src/dwarf/Gexpr.c",
22  "$libunwind_code_dir/src/dwarf/Gfde.c",
23  "$libunwind_code_dir/src/dwarf/Gfind_proc_info-lsb.c",
24  "$libunwind_code_dir/src/dwarf/Gfind_unwind_table.c",
25  "$libunwind_code_dir/src/dwarf/global.c",
26  "$libunwind_code_dir/src/dwarf/Gparser.c",
27  "$libunwind_code_dir/src/dwarf/Gpe.c",
28  "$libunwind_code_dir/src/dwarf/Lexpr.c",
29  "$libunwind_code_dir/src/dwarf/Lfde.c",
30  "$libunwind_code_dir/src/dwarf/Lfind_proc_info-lsb.c",
31  "$libunwind_code_dir/src/dwarf/Lfind_unwind_table.c",
32  "$libunwind_code_dir/src/dwarf/Lparser.c",
33  "$libunwind_code_dir/src/dwarf/Lpe.c",
34  "$libunwind_code_dir/src/mi/backtrace.c",
35  "$libunwind_code_dir/src/mi/dyn-cancel.c",
36  "$libunwind_code_dir/src/mi/dyn-info-list.c",
37  "$libunwind_code_dir/src/mi/dyn-register.c",
38  "$libunwind_code_dir/src/mi/flush_cache.c",
39  "$libunwind_code_dir/src/mi/Gdestroy_addr_space.c",
40  "$libunwind_code_dir/src/mi/Gdyn-extract.c",
41  "$libunwind_code_dir/src/mi/Gdyn-remote.c",
42  "$libunwind_code_dir/src/mi/Gfind_dynamic_proc_info.c",
43  "$libunwind_code_dir/src/mi/Gget_accessors.c",
44  "$libunwind_code_dir/src/mi/Gget_fpreg.c",
45  "$libunwind_code_dir/src/mi/Gget_proc_info_by_ip.c",
46  "$libunwind_code_dir/src/mi/Gget_proc_name.c",
47  "$libunwind_code_dir/src/mi/Gget_reg.c",
48  "$libunwind_code_dir/src/mi/Gput_dynamic_unwind_info.c",
49  "$libunwind_code_dir/src/mi/Gset_cache_size.c",
50  "$libunwind_code_dir/src/mi/Gset_caching_policy.c",
51  "$libunwind_code_dir/src/mi/Gset_fpreg.c",
52  "$libunwind_code_dir/src/mi/Gset_reg.c",
53  "$libunwind_code_dir/src/mi/init.c",
54  "$libunwind_code_dir/src/mi/Ldestroy_addr_space.c",
55  "$libunwind_code_dir/src/mi/Ldyn-extract.c",
56  "$libunwind_code_dir/src/mi/Lfind_dynamic_proc_info.c",
57  "$libunwind_code_dir/src/mi/Lget_fpreg.c",
58  "$libunwind_code_dir/src/mi/Lget_proc_info_by_ip.c",
59  "$libunwind_code_dir/src/mi/Lget_proc_name.c",
60  "$libunwind_code_dir/src/mi/Lget_reg.c",
61  "$libunwind_code_dir/src/mi/Lput_dynamic_unwind_info.c",
62  "$libunwind_code_dir/src/mi/Lset_cache_size.c",
63  "$libunwind_code_dir/src/mi/Lset_caching_policy.c",
64  "$libunwind_code_dir/src/mi/Lset_fpreg.c",
65  "$libunwind_code_dir/src/mi/Lset_reg.c",
66  "$libunwind_code_dir/src/mi/mempool.c",
67  "$libunwind_code_dir/src/mi/strerror.c",
68  "$libunwind_code_dir/src/os-linux.c",
69  "$libunwind_code_dir/src/ptrace/_UPT_access_fpreg.c",
70  "$libunwind_code_dir/src/ptrace/_UPT_access_mem.c",
71  "$libunwind_code_dir/src/ptrace/_UPT_access_reg.c",
72  "$libunwind_code_dir/src/ptrace/_UPT_accessors.c",
73  "$libunwind_code_dir/src/ptrace/_UPT_create.c",
74  "$libunwind_code_dir/src/ptrace/_UPT_destroy.c",
75  "$libunwind_code_dir/src/ptrace/_UPT_find_proc_info.c",
76  "$libunwind_code_dir/src/ptrace/_UPT_get_dyn_info_list_addr.c",
77  "$libunwind_code_dir/src/ptrace/_UPT_get_proc_name.c",
78  "$libunwind_code_dir/src/ptrace/_UPT_put_unwind_info.c",
79  "$libunwind_code_dir/src/ptrace/_UPT_reg_offset.c",
80  "$libunwind_code_dir/src/ptrace/_UPT_resume.c",
81]
82
83# as libc++ is static linked with libunwind.a
84# we remove the Gstep.c for duplicated symbol violation
85arm_source = [
86  "$libunwind_code_dir/src/arm/Gapply_reg_state.c",
87  "$libunwind_code_dir/src/arm/Gcreate_addr_space.c",
88  "$libunwind_code_dir/src/arm/Gex_tables.c",
89  "$libunwind_code_dir/src/arm/Gget_proc_info.c",
90  "$libunwind_code_dir/src/arm/Gget_save_loc.c",
91  "$libunwind_code_dir/src/arm/Gglobal.c",
92  "$libunwind_code_dir/src/arm/Ginit.c",
93  "$libunwind_code_dir/src/arm/Ginit_local.c",
94  "$libunwind_code_dir/src/arm/Ginit_remote.c",
95  "$libunwind_code_dir/src/arm/Gos-linux.c",
96  "$libunwind_code_dir/src/arm/Greg_states_iterate.c",
97  "$libunwind_code_dir/src/arm/Gregs.c",
98  "$libunwind_code_dir/src/arm/Gresume.c",
99  "$libunwind_code_dir/src/arm/Gstash_frame.c",
100  "$libunwind_code_dir/src/arm/Gstep.c",
101  "$libunwind_code_dir/src/arm/Gtrace.c",
102  "$libunwind_code_dir/src/arm/Lcreate_addr_space.c",
103  "$libunwind_code_dir/src/arm/Lex_tables.c",
104  "$libunwind_code_dir/src/arm/Lget_proc_info.c",
105  "$libunwind_code_dir/src/arm/Lget_save_loc.c",
106  "$libunwind_code_dir/src/arm/Lglobal.c",
107  "$libunwind_code_dir/src/arm/Linit.c",
108  "$libunwind_code_dir/src/arm/Linit_local.c",
109  "$libunwind_code_dir/src/arm/Linit_remote.c",
110  "$libunwind_code_dir/src/arm/Los-linux.c",
111  "$libunwind_code_dir/src/arm/Lregs.c",
112  "$libunwind_code_dir/src/arm/Lresume.c",
113  "$libunwind_code_dir/src/arm/Lstash_frame.c",
114  "$libunwind_code_dir/src/arm/Lstep.c",
115  "$libunwind_code_dir/src/arm/Ltrace.c",
116  "$libunwind_code_dir/src/arm/getcontext.S",
117  "$libunwind_code_dir/src/arm/is_fpreg.c",
118  "$libunwind_code_dir/src/arm/regname.c",
119  "$libunwind_code_dir/src/arm/siglongjmp.S",
120  "$libunwind_code_dir/src/elf32.c",
121]
122
123arm64_source = [
124  "$libunwind_code_dir/src/aarch64/Gcreate_addr_space.c",
125  "$libunwind_code_dir/src/aarch64/Gget_proc_info.c",
126  "$libunwind_code_dir/src/aarch64/Gget_save_loc.c",
127  "$libunwind_code_dir/src/aarch64/Gglobal.c",
128  "$libunwind_code_dir/src/aarch64/Ginit.c",
129  "$libunwind_code_dir/src/aarch64/Ginit_local.c",
130  "$libunwind_code_dir/src/aarch64/Ginit_remote.c",
131  "$libunwind_code_dir/src/aarch64/Gis_signal_frame.c",
132  "$libunwind_code_dir/src/aarch64/Gregs.c",
133  "$libunwind_code_dir/src/aarch64/Gresume.c",
134  "$libunwind_code_dir/src/aarch64/Gstash_frame.c",
135  "$libunwind_code_dir/src/aarch64/Gstep.c",
136  "$libunwind_code_dir/src/aarch64/Gtrace.c",
137  "$libunwind_code_dir/src/aarch64/Lcreate_addr_space.c",
138  "$libunwind_code_dir/src/aarch64/Lget_proc_info.c",
139  "$libunwind_code_dir/src/aarch64/Lget_save_loc.c",
140  "$libunwind_code_dir/src/aarch64/Lglobal.c",
141  "$libunwind_code_dir/src/aarch64/Linit.c",
142  "$libunwind_code_dir/src/aarch64/Linit_local.c",
143  "$libunwind_code_dir/src/aarch64/Linit_remote.c",
144  "$libunwind_code_dir/src/aarch64/Lis_signal_frame.c",
145  "$libunwind_code_dir/src/aarch64/Lregs.c",
146  "$libunwind_code_dir/src/aarch64/Lresume.c",
147  "$libunwind_code_dir/src/aarch64/Lstash_frame.c",
148  "$libunwind_code_dir/src/aarch64/Lstep.c",
149  "$libunwind_code_dir/src/aarch64/Ltrace.c",
150  "$libunwind_code_dir/src/aarch64/getcontext.S",
151  "$libunwind_code_dir/src/aarch64/is_fpreg.c",
152  "$libunwind_code_dir/src/aarch64/regname.c",
153  "$libunwind_code_dir/src/elf64.c",
154]
155
156x64_source = [
157  "$libunwind_code_dir/src/elf64.c",
158  "$libunwind_code_dir/src/x86_64/Gcreate_addr_space.c",
159  "$libunwind_code_dir/src/x86_64/Gget_proc_info.c",
160  "$libunwind_code_dir/src/x86_64/Gget_save_loc.c",
161  "$libunwind_code_dir/src/x86_64/Gglobal.c",
162  "$libunwind_code_dir/src/x86_64/Ginit.c",
163  "$libunwind_code_dir/src/x86_64/Ginit_local.c",
164  "$libunwind_code_dir/src/x86_64/Ginit_remote.c",
165  "$libunwind_code_dir/src/x86_64/Gos-linux.c",
166  "$libunwind_code_dir/src/x86_64/Gregs.c",
167  "$libunwind_code_dir/src/x86_64/Gresume.c",
168  "$libunwind_code_dir/src/x86_64/Gstash_frame.c",
169  "$libunwind_code_dir/src/x86_64/Gstep.c",
170  "$libunwind_code_dir/src/x86_64/Gtrace.c",
171  "$libunwind_code_dir/src/x86_64/Lcreate_addr_space.c",
172  "$libunwind_code_dir/src/x86_64/Lget_proc_info.c",
173  "$libunwind_code_dir/src/x86_64/Lget_save_loc.c",
174  "$libunwind_code_dir/src/x86_64/Lglobal.c",
175  "$libunwind_code_dir/src/x86_64/Linit.c",
176  "$libunwind_code_dir/src/x86_64/Linit_local.c",
177  "$libunwind_code_dir/src/x86_64/Linit_remote.c",
178  "$libunwind_code_dir/src/x86_64/Los-linux.c",
179  "$libunwind_code_dir/src/x86_64/Lregs.c",
180  "$libunwind_code_dir/src/x86_64/Lresume.c",
181  "$libunwind_code_dir/src/x86_64/Lstash_frame.c",
182  "$libunwind_code_dir/src/x86_64/Lstep.c",
183  "$libunwind_code_dir/src/x86_64/Ltrace.c",
184  "$libunwind_code_dir/src/x86_64/getcontext.S",
185  "$libunwind_code_dir/src/x86_64/is_fpreg.c",
186  "$libunwind_code_dir/src/x86_64/regname.c",
187  "$libunwind_code_dir/src/x86_64/setcontext.S",
188]
189
190riscv64_source = [
191  "$libunwind_code_dir/src/elf64.c",
192  "$libunwind_code_dir/src/riscv/Gapply_reg_state.c",
193  "$libunwind_code_dir/src/riscv/Gcreate_addr_space.c",
194  "$libunwind_code_dir/src/riscv/getcontext.S",
195  "$libunwind_code_dir/src/riscv/Gget_proc_info.c",
196  "$libunwind_code_dir/src/riscv/Gget_save_loc.c",
197  "$libunwind_code_dir/src/riscv/Gglobal.c",
198  "$libunwind_code_dir/src/riscv/Ginit.c",
199  "$libunwind_code_dir/src/riscv/Ginit_local.c",
200  "$libunwind_code_dir/src/riscv/Ginit_remote.c",
201  "$libunwind_code_dir/src/riscv/Gis_signal_frame.c",
202  "$libunwind_code_dir/src/riscv/Gregs.c",
203  "$libunwind_code_dir/src/riscv/Greg_states_iterate.c",
204  "$libunwind_code_dir/src/riscv/Gresume.c",
205  "$libunwind_code_dir/src/riscv/Gstep.c",
206  "$libunwind_code_dir/src/riscv/is_fpreg.c",
207  "$libunwind_code_dir/src/riscv/Lcreate_addr_space.c",
208  "$libunwind_code_dir/src/riscv/Lget_proc_info.c",
209  "$libunwind_code_dir/src/riscv/Lget_save_loc.c",
210  "$libunwind_code_dir/src/riscv/Lglobal.c",
211  "$libunwind_code_dir/src/riscv/Linit.c",
212  "$libunwind_code_dir/src/riscv/Linit_local.c",
213  "$libunwind_code_dir/src/riscv/Linit_remote.c",
214  "$libunwind_code_dir/src/riscv/Lis_signal_frame.c",
215  "$libunwind_code_dir/src/riscv/Lregs.c",
216  "$libunwind_code_dir/src/riscv/Lreg_states_iterate.c",
217  "$libunwind_code_dir/src/riscv/Lresume.c",
218  "$libunwind_code_dir/src/riscv/Lstep.c",
219  "$libunwind_code_dir/src/riscv/offsets.h",
220  "$libunwind_code_dir/src/riscv/regname.c",
221  "$libunwind_code_dir/src/riscv/setcontext.S",
222  "$libunwind_code_dir/src/riscv/siglongjmp.S",
223]
224
225action("libunwind_action") {
226  print("libunwind_action is exec")
227  script = "//third_party/libunwind/install.py"
228  outputs = [
229    "$libunwind_code_dir/src/dwarf/Gexpr.c",
230    "$libunwind_code_dir/src/dwarf/Gfde.c",
231    "$libunwind_code_dir/src/dwarf/Gfind_proc_info-lsb.c",
232    "$libunwind_code_dir/src/dwarf/Gfind_unwind_table.c",
233    "$libunwind_code_dir/src/dwarf/global.c",
234    "$libunwind_code_dir/src/dwarf/Gparser.c",
235    "$libunwind_code_dir/src/dwarf/Gpe.c",
236    "$libunwind_code_dir/src/dwarf/Lexpr.c",
237    "$libunwind_code_dir/src/dwarf/Lfde.c",
238    "$libunwind_code_dir/src/dwarf/Lfind_proc_info-lsb.c",
239    "$libunwind_code_dir/src/dwarf/Lfind_unwind_table.c",
240    "$libunwind_code_dir/src/dwarf/Lparser.c",
241    "$libunwind_code_dir/src/dwarf/Lpe.c",
242    "$libunwind_code_dir/src/mi/backtrace.c",
243    "$libunwind_code_dir/src/mi/dyn-cancel.c",
244    "$libunwind_code_dir/src/mi/dyn-info-list.c",
245    "$libunwind_code_dir/src/mi/dyn-register.c",
246    "$libunwind_code_dir/src/mi/flush_cache.c",
247    "$libunwind_code_dir/src/mi/Gdestroy_addr_space.c",
248    "$libunwind_code_dir/src/mi/Gdyn-extract.c",
249    "$libunwind_code_dir/src/mi/Gdyn-remote.c",
250    "$libunwind_code_dir/src/mi/Gfind_dynamic_proc_info.c",
251    "$libunwind_code_dir/src/mi/Gget_accessors.c",
252    "$libunwind_code_dir/src/mi/Gget_fpreg.c",
253    "$libunwind_code_dir/src/mi/Gget_proc_info_by_ip.c",
254    "$libunwind_code_dir/src/mi/Gget_proc_name.c",
255    "$libunwind_code_dir/src/mi/Gget_reg.c",
256    "$libunwind_code_dir/src/mi/Gput_dynamic_unwind_info.c",
257    "$libunwind_code_dir/src/mi/Gset_cache_size.c",
258    "$libunwind_code_dir/src/mi/Gset_caching_policy.c",
259    "$libunwind_code_dir/src/mi/Gset_fpreg.c",
260    "$libunwind_code_dir/src/mi/Gset_reg.c",
261    "$libunwind_code_dir/src/mi/init.c",
262    "$libunwind_code_dir/src/mi/Ldestroy_addr_space.c",
263    "$libunwind_code_dir/src/mi/Ldyn-extract.c",
264    "$libunwind_code_dir/src/mi/Lfind_dynamic_proc_info.c",
265    "$libunwind_code_dir/src/mi/Lget_fpreg.c",
266    "$libunwind_code_dir/src/mi/Lget_proc_info_by_ip.c",
267    "$libunwind_code_dir/src/mi/Lget_proc_name.c",
268    "$libunwind_code_dir/src/mi/Lget_reg.c",
269    "$libunwind_code_dir/src/mi/Lput_dynamic_unwind_info.c",
270    "$libunwind_code_dir/src/mi/Lset_cache_size.c",
271    "$libunwind_code_dir/src/mi/Lset_caching_policy.c",
272    "$libunwind_code_dir/src/mi/Lset_fpreg.c",
273    "$libunwind_code_dir/src/mi/Lset_reg.c",
274    "$libunwind_code_dir/src/mi/mempool.c",
275    "$libunwind_code_dir/src/mi/strerror.c",
276    "$libunwind_code_dir/src/os-linux.c",
277    "$libunwind_code_dir/src/ptrace/_UPT_access_fpreg.c",
278    "$libunwind_code_dir/src/ptrace/_UPT_access_mem.c",
279    "$libunwind_code_dir/src/ptrace/_UPT_access_reg.c",
280    "$libunwind_code_dir/src/ptrace/_UPT_accessors.c",
281    "$libunwind_code_dir/src/ptrace/_UPT_create.c",
282    "$libunwind_code_dir/src/ptrace/_UPT_destroy.c",
283    "$libunwind_code_dir/src/ptrace/_UPT_find_proc_info.c",
284    "$libunwind_code_dir/src/ptrace/_UPT_get_dyn_info_list_addr.c",
285    "$libunwind_code_dir/src/ptrace/_UPT_get_proc_name.c",
286    "$libunwind_code_dir/src/ptrace/_UPT_put_unwind_info.c",
287    "$libunwind_code_dir/src/ptrace/_UPT_reg_offset.c",
288    "$libunwind_code_dir/src/ptrace/_UPT_resume.c",
289    "$libunwind_code_dir/src/arm/Gapply_reg_state.c",
290    "$libunwind_code_dir/src/arm/Gcreate_addr_space.c",
291    "$libunwind_code_dir/src/arm/Gex_tables.c",
292    "$libunwind_code_dir/src/arm/Gget_proc_info.c",
293    "$libunwind_code_dir/src/arm/Gget_save_loc.c",
294    "$libunwind_code_dir/src/arm/Gglobal.c",
295    "$libunwind_code_dir/src/arm/Ginit.c",
296    "$libunwind_code_dir/src/arm/Ginit_local.c",
297    "$libunwind_code_dir/src/arm/Ginit_remote.c",
298    "$libunwind_code_dir/src/arm/Gos-linux.c",
299    "$libunwind_code_dir/src/arm/Greg_states_iterate.c",
300    "$libunwind_code_dir/src/arm/Gregs.c",
301    "$libunwind_code_dir/src/arm/Gresume.c",
302    "$libunwind_code_dir/src/arm/Gstash_frame.c",
303    "$libunwind_code_dir/src/arm/Gstep.c",
304    "$libunwind_code_dir/src/arm/Gtrace.c",
305    "$libunwind_code_dir/src/arm/Lcreate_addr_space.c",
306    "$libunwind_code_dir/src/arm/Lex_tables.c",
307    "$libunwind_code_dir/src/arm/Lget_proc_info.c",
308    "$libunwind_code_dir/src/arm/Lget_save_loc.c",
309    "$libunwind_code_dir/src/arm/Lglobal.c",
310    "$libunwind_code_dir/src/arm/Linit.c",
311    "$libunwind_code_dir/src/arm/Linit_local.c",
312    "$libunwind_code_dir/src/arm/Linit_remote.c",
313    "$libunwind_code_dir/src/arm/Los-linux.c",
314    "$libunwind_code_dir/src/arm/Lregs.c",
315    "$libunwind_code_dir/src/arm/Lresume.c",
316    "$libunwind_code_dir/src/arm/Lstash_frame.c",
317    "$libunwind_code_dir/src/arm/Lstep.c",
318    "$libunwind_code_dir/src/arm/Ltrace.c",
319    "$libunwind_code_dir/src/arm/getcontext.S",
320    "$libunwind_code_dir/src/arm/is_fpreg.c",
321    "$libunwind_code_dir/src/arm/regname.c",
322    "$libunwind_code_dir/src/arm/siglongjmp.S",
323    "$libunwind_code_dir/src/elf32.c",
324    "$libunwind_code_dir/src/aarch64/Gcreate_addr_space.c",
325    "$libunwind_code_dir/src/aarch64/Gget_proc_info.c",
326    "$libunwind_code_dir/src/aarch64/Gget_save_loc.c",
327    "$libunwind_code_dir/src/aarch64/Gglobal.c",
328    "$libunwind_code_dir/src/aarch64/Ginit.c",
329    "$libunwind_code_dir/src/aarch64/Ginit_local.c",
330    "$libunwind_code_dir/src/aarch64/Ginit_remote.c",
331    "$libunwind_code_dir/src/aarch64/Gis_signal_frame.c",
332    "$libunwind_code_dir/src/aarch64/Gregs.c",
333    "$libunwind_code_dir/src/aarch64/Gresume.c",
334    "$libunwind_code_dir/src/aarch64/Gstash_frame.c",
335    "$libunwind_code_dir/src/aarch64/Gstep.c",
336    "$libunwind_code_dir/src/aarch64/Gtrace.c",
337    "$libunwind_code_dir/src/aarch64/Lcreate_addr_space.c",
338    "$libunwind_code_dir/src/aarch64/Lget_proc_info.c",
339    "$libunwind_code_dir/src/aarch64/Lget_save_loc.c",
340    "$libunwind_code_dir/src/aarch64/Lglobal.c",
341    "$libunwind_code_dir/src/aarch64/Linit.c",
342    "$libunwind_code_dir/src/aarch64/Linit_local.c",
343    "$libunwind_code_dir/src/aarch64/Linit_remote.c",
344    "$libunwind_code_dir/src/aarch64/Lis_signal_frame.c",
345    "$libunwind_code_dir/src/aarch64/Lregs.c",
346    "$libunwind_code_dir/src/aarch64/Lresume.c",
347    "$libunwind_code_dir/src/aarch64/Lstash_frame.c",
348    "$libunwind_code_dir/src/aarch64/Lstep.c",
349    "$libunwind_code_dir/src/aarch64/Ltrace.c",
350    "$libunwind_code_dir/src/aarch64/getcontext.S",
351    "$libunwind_code_dir/src/aarch64/is_fpreg.c",
352    "$libunwind_code_dir/src/aarch64/regname.c",
353    "$libunwind_code_dir/src/elf64.c",
354    "$libunwind_code_dir/src/x86_64/Gcreate_addr_space.c",
355    "$libunwind_code_dir/src/x86_64/Gget_proc_info.c",
356    "$libunwind_code_dir/src/x86_64/Gget_save_loc.c",
357    "$libunwind_code_dir/src/x86_64/Gglobal.c",
358    "$libunwind_code_dir/src/x86_64/Ginit.c",
359    "$libunwind_code_dir/src/x86_64/Ginit_local.c",
360    "$libunwind_code_dir/src/x86_64/Ginit_remote.c",
361    "$libunwind_code_dir/src/x86_64/Gos-linux.c",
362    "$libunwind_code_dir/src/x86_64/Gregs.c",
363    "$libunwind_code_dir/src/x86_64/Gresume.c",
364    "$libunwind_code_dir/src/x86_64/Gstash_frame.c",
365    "$libunwind_code_dir/src/x86_64/Gstep.c",
366    "$libunwind_code_dir/src/x86_64/Gtrace.c",
367    "$libunwind_code_dir/src/x86_64/Lcreate_addr_space.c",
368    "$libunwind_code_dir/src/x86_64/Lget_proc_info.c",
369    "$libunwind_code_dir/src/x86_64/Lget_save_loc.c",
370    "$libunwind_code_dir/src/x86_64/Lglobal.c",
371    "$libunwind_code_dir/src/x86_64/Linit.c",
372    "$libunwind_code_dir/src/x86_64/Linit_local.c",
373    "$libunwind_code_dir/src/x86_64/Linit_remote.c",
374    "$libunwind_code_dir/src/x86_64/Los-linux.c",
375    "$libunwind_code_dir/src/x86_64/Lregs.c",
376    "$libunwind_code_dir/src/x86_64/Lresume.c",
377    "$libunwind_code_dir/src/x86_64/Lstash_frame.c",
378    "$libunwind_code_dir/src/x86_64/Lstep.c",
379    "$libunwind_code_dir/src/x86_64/Ltrace.c",
380    "$libunwind_code_dir/src/x86_64/getcontext.S",
381    "$libunwind_code_dir/src/x86_64/is_fpreg.c",
382    "$libunwind_code_dir/src/x86_64/regname.c",
383    "$libunwind_code_dir/src/x86_64/setcontext.S",
384    "$libunwind_code_dir/src/riscv/Gapply_reg_state.c",
385    "$libunwind_code_dir/src/riscv/Gcreate_addr_space.c",
386    "$libunwind_code_dir/src/riscv/getcontext.S",
387    "$libunwind_code_dir/src/riscv/Gget_proc_info.c",
388    "$libunwind_code_dir/src/riscv/Gget_save_loc.c",
389    "$libunwind_code_dir/src/riscv/Gglobal.c",
390    "$libunwind_code_dir/src/riscv/Ginit.c",
391    "$libunwind_code_dir/src/riscv/Ginit_local.c",
392    "$libunwind_code_dir/src/riscv/Ginit_remote.c",
393    "$libunwind_code_dir/src/riscv/Gis_signal_frame.c",
394    "$libunwind_code_dir/src/riscv/Gregs.c",
395    "$libunwind_code_dir/src/riscv/Greg_states_iterate.c",
396    "$libunwind_code_dir/src/riscv/Gresume.c",
397    "$libunwind_code_dir/src/riscv/Gstep.c",
398    "$libunwind_code_dir/src/riscv/is_fpreg.c",
399    "$libunwind_code_dir/src/riscv/Lcreate_addr_space.c",
400    "$libunwind_code_dir/src/riscv/Lget_proc_info.c",
401    "$libunwind_code_dir/src/riscv/Lget_save_loc.c",
402    "$libunwind_code_dir/src/riscv/Lglobal.c",
403    "$libunwind_code_dir/src/riscv/Linit.c",
404    "$libunwind_code_dir/src/riscv/Linit_local.c",
405    "$libunwind_code_dir/src/riscv/Linit_remote.c",
406    "$libunwind_code_dir/src/riscv/Lis_signal_frame.c",
407    "$libunwind_code_dir/src/riscv/Lregs.c",
408    "$libunwind_code_dir/src/riscv/Lreg_states_iterate.c",
409    "$libunwind_code_dir/src/riscv/Lresume.c",
410    "$libunwind_code_dir/src/riscv/Lstep.c",
411    "$libunwind_code_dir/src/riscv/offsets.h",
412    "$libunwind_code_dir/src/riscv/regname.c",
413    "$libunwind_code_dir/src/riscv/setcontext.S",
414    "$libunwind_code_dir/src/riscv/siglongjmp.S",
415  ]
416
417  inputs = [ "//third_party/libunwind/libunwind-1.6.2.tar.gz" ]
418  libunwind_path = rebase_path("${target_gen_dir}", root_build_dir)
419  libunwind_source_path = rebase_path("//third_party/libunwind", root_build_dir)
420  args = [
421    "--gen-dir",
422    "$libunwind_path",
423    "--source-dir",
424    "$libunwind_source_path",
425  ]
426}
427
428if ("${target_cpu}" == "arm") {
429  arm_source_local = [
430    "$libunwind_code_dir/src/arm/Lcreate_addr_space.c",
431    "$libunwind_code_dir/src/arm/Lex_tables.c",
432    "$libunwind_code_dir/src/arm/Lget_proc_info.c",
433    "$libunwind_code_dir/src/arm/Lget_save_loc.c",
434    "$libunwind_code_dir/src/arm/Lglobal.c",
435    "$libunwind_code_dir/src/arm/Linit.c",
436    "$libunwind_code_dir/src/arm/Linit_local.c",
437    "$libunwind_code_dir/src/arm/Linit_remote.c",
438    "$libunwind_code_dir/src/arm/Los-linux.c",
439    "$libunwind_code_dir/src/arm/Lregs.c",
440    "$libunwind_code_dir/src/arm/Lresume.c",
441    "$libunwind_code_dir/src/arm/Lstash_frame.c",
442    "$libunwind_code_dir/src/arm/Lstep.c",
443    "$libunwind_code_dir/src/arm/Ltrace.c",
444  ]
445} else if ("${target_cpu}" == "arm64") {
446  arm64_source_local = [
447    "$libunwind_code_dir/src/aarch64/Lcreate_addr_space.c",
448    "$libunwind_code_dir/src/aarch64/Lget_proc_info.c",
449    "$libunwind_code_dir/src/aarch64/Lget_save_loc.c",
450    "$libunwind_code_dir/src/aarch64/Lglobal.c",
451    "$libunwind_code_dir/src/aarch64/Linit.c",
452    "$libunwind_code_dir/src/aarch64/Linit_local.c",
453    "$libunwind_code_dir/src/aarch64/Linit_remote.c",
454    "$libunwind_code_dir/src/aarch64/Lis_signal_frame.c",
455    "$libunwind_code_dir/src/aarch64/Lregs.c",
456    "$libunwind_code_dir/src/aarch64/Lresume.c",
457    "$libunwind_code_dir/src/aarch64/Lstash_frame.c",
458    "$libunwind_code_dir/src/aarch64/Lstep.c",
459    "$libunwind_code_dir/src/aarch64/Ltrace.c",
460  ]
461} else if ("${target_cpu}" == "riscv64") {
462  riscv64_source_local = [
463    "$libunwind_code_dir/src/riscv/Lcreate_addr_space.c",
464    "$libunwind_code_dir/src/riscv/Lget_proc_info.c",
465    "$libunwind_code_dir/src/riscv/Lget_save_loc.c",
466    "$libunwind_code_dir/src/riscv/Lglobal.c",
467    "$libunwind_code_dir/src/riscv/Linit.c",
468    "$libunwind_code_dir/src/riscv/Linit_local.c",
469    "$libunwind_code_dir/src/riscv/Linit_remote.c",
470    "$libunwind_code_dir/src/riscv/Lis_signal_frame.c",
471    "$libunwind_code_dir/src/riscv/Lreg_states_iterate.c",
472    "$libunwind_code_dir/src/riscv/Lregs.c",
473    "$libunwind_code_dir/src/riscv/Lresume.c",
474    "$libunwind_code_dir/src/riscv/Lstep.c",
475  ]
476} else if ("${target_cpu}" == "x64" || "${target_cpu}" == "x86_64") {
477  x64_source_local = [
478    "$libunwind_code_dir/src/x86_64/Lcreate_addr_space.c",
479    "$libunwind_code_dir/src/x86_64/Lget_proc_info.c",
480    "$libunwind_code_dir/src/x86_64/Lget_save_loc.c",
481    "$libunwind_code_dir/src/x86_64/Lglobal.c",
482    "$libunwind_code_dir/src/x86_64/Linit.c",
483    "$libunwind_code_dir/src/x86_64/Linit_local.c",
484    "$libunwind_code_dir/src/x86_64/Linit_remote.c",
485    "$libunwind_code_dir/src/x86_64/Los-linux.c",
486    "$libunwind_code_dir/src/x86_64/Lregs.c",
487    "$libunwind_code_dir/src/x86_64/Lresume.c",
488    "$libunwind_code_dir/src/x86_64/Lstash_frame.c",
489    "$libunwind_code_dir/src/x86_64/Lstep.c",
490    "$libunwind_code_dir/src/x86_64/Ltrace.c",
491  ]
492}
493
494libunwind_la_SOURCES_local = [
495  "$libunwind_code_dir/src/mi/Ldyn-extract.c",
496  "$libunwind_code_dir/src/mi/Lfind_dynamic_proc_info.c",
497  "$libunwind_code_dir/src/mi/Lget_proc_info_by_ip.c",
498  "$libunwind_code_dir/src/mi/Lget_proc_name.c",
499  "$libunwind_code_dir/src/mi/Lput_dynamic_unwind_info.c",
500  "$libunwind_code_dir/src/mi/Ldestroy_addr_space.c",
501  "$libunwind_code_dir/src/mi/Lget_reg.c",
502  "$libunwind_code_dir/src/mi/Lset_reg.c",
503  "$libunwind_code_dir/src/mi/Lget_fpreg.c",
504  "$libunwind_code_dir/src/mi/Lset_fpreg.c",
505  "$libunwind_code_dir/src/mi/Lset_caching_policy.c",
506  "$libunwind_code_dir/src/mi/Lset_cache_size.c",
507]
508
509remove_sources = []
510
511ptrace_sources = [
512  "$libunwind_code_dir/src/ptrace/_UPT_access_fpreg.c",
513  "$libunwind_code_dir/src/ptrace/_UPT_access_mem.c",
514  "$libunwind_code_dir/src/ptrace/_UPT_access_reg.c",
515  "$libunwind_code_dir/src/ptrace/_UPT_accessors.c",
516  "$libunwind_code_dir/src/ptrace/_UPT_create.c",
517  "$libunwind_code_dir/src/ptrace/_UPT_destroy.c",
518  "$libunwind_code_dir/src/ptrace/_UPT_find_proc_info.c",
519  "$libunwind_code_dir/src/ptrace/_UPT_get_dyn_info_list_addr.c",
520  "$libunwind_code_dir/src/ptrace/_UPT_get_proc_name.c",
521  "$libunwind_code_dir/src/ptrace/_UPT_put_unwind_info.c",
522  "$libunwind_code_dir/src/ptrace/_UPT_reg_offset.c",
523  "$libunwind_code_dir/src/ptrace/_UPT_resume.c",
524]
525
526libunwind_la_SOURCES_local_nounwind = [
527  "$libunwind_code_dir/src/mi/backtrace.c",
528  "$libunwind_code_dir/src/mi/dyn-cancel.c",
529  "$libunwind_code_dir/src/mi/dyn-info-list.c",
530  "$libunwind_code_dir/src/mi/dyn-register.c",
531  "$libunwind_code_dir/src/mi/Ldyn-extract.c",
532  "$libunwind_code_dir/src/mi/Lfind_dynamic_proc_info.c",
533
534  # "$libunwind_code_dir/src/mi/Lget_accessors.c", # miss
535  "$libunwind_code_dir/src/mi/Lget_proc_info_by_ip.c",
536  "$libunwind_code_dir/src/mi/Lget_proc_name.c",
537  "$libunwind_code_dir/src/mi/Lput_dynamic_unwind_info.c",
538  "$libunwind_code_dir/src/mi/Ldestroy_addr_space.c",
539  "$libunwind_code_dir/src/mi/Lget_reg.c",
540  "$libunwind_code_dir/src/mi/Lset_reg.c",
541  "$libunwind_code_dir/src/mi/Lget_fpreg.c",
542  "$libunwind_code_dir/src/mi/Lset_fpreg.c",
543  "$libunwind_code_dir/src/mi/Lset_caching_policy.c",
544  "$libunwind_code_dir/src/mi/Lset_cache_size.c",
545]
546
547libunwind_dwarf_local_la_SOURCES = [
548  "$libunwind_code_dir/src/dwarf/Lexpr.c",
549  "$libunwind_code_dir/src/dwarf/Lfde.c",
550  "$libunwind_code_dir/src/dwarf/Lparser.c",
551  "$libunwind_code_dir/src/dwarf/Lpe.c",
552  "$libunwind_code_dir/src/dwarf/Lfind_proc_info-lsb.c",
553  "$libunwind_code_dir/src/dwarf/Lfind_unwind_table.c",
554]
555
556# remove local file
557remove_sources += libunwind_la_SOURCES_local_nounwind
558remove_sources += libunwind_dwarf_local_la_SOURCES
559remove_sources += ptrace_sources
560
561config("unwind_config_public") {
562  include_dirs = [
563    "$libunwind_code_dir/src",
564    "$libunwind_code_dir/include",
565    get_label_info(":libunwind_action", "target_gen_dir") + "/libunwind-1.6.2",
566  ]
567
568  cflags = [
569    "-D_GNU_SOURCE",
570    "-DHAVE_CONFIG_H",
571    "-DNDEBUG",
572    "-DCC_IS_CLANG",
573    "-fcommon",
574    "-Wno-absolute-value",
575    "-Wno-header-guard",
576    "-Wno-unused-parameter",
577    "-Wno-unused-variable",
578    "-Wno-int-to-pointer-cast",
579    "-Wno-pointer-to-int-cast",
580    "-Wno-error",
581  ]
582
583  if (defined(ohos_lite)) {
584    cflags += [ "-fPIC" ]
585  }
586
587  if (target_cpu == "arm") {
588    include_dirs += [ "$libunwind_code_dir/include/tdep-arm" ]
589    cflags += [
590      "-Wno-inline-asm",
591      "-Wno-shift-count-overflow",
592      "-Wno-tautological-constant-out-of-range-compare",
593      "-Wno-unused-function",
594    ]
595  } else if (target_cpu == "riscv64") {
596    include_dirs += [ "$libunwind_code_dir/include/tdep-riscv" ]
597    cflags += [ "-Wno-implicit-function-declaration" ]
598  } else if (target_cpu == "arm64") {
599    include_dirs += [ "$libunwind_code_dir/include/tdep-aarch64" ]
600    cflags += [ "-Wno-incompatible-pointer-types" ]
601  } else if (target_cpu == "x64" || target_cpu == "x86_64") {
602    include_dirs += [ "$libunwind_code_dir/include/tdep-x86_64" ]
603  } else if (target_cpu == "mipsel") {
604    include_dirs += [ "$libunwind_code_dir/include/tdep-mips" ]
605  }
606}
607
608config("unwind_config_remote") {
609  cflags =
610      [ "-Wno-format" ]  # some debug feature will warning in host x64 build
611}
612
613config("unwind_config_local_only") {
614  defines = [ "UNW_LOCAL_ONLY" ]
615}
616
617config("unwind_config_remote_public") {
618  cflags = []
619  include_dirs = []
620  defines = []
621
622  # this is a host tools build
623  # what means host use remote mode to unwind
624  # with dwarf from stack or coredump or something not real target
625  # There is an exception, we can support local unwind for linux.
626  cflags += [ "-DUNW_REMOTE_ONLY" ]
627
628  cflags += [ "-DBUILD_REMOTE" ]
629
630  cflags += [ "-Wno-sometimes-uninitialized" ]  # some value not initialized in
631                                                # host x64 build
632  cflags += [ "-Wno-int-to-void-pointer-cast" ]
633
634  if (is_linux) {
635    cflags += [ "-g" ]  # we need debug info when it crash.
636  }
637
638  defines += [ "build_remote=1" ]
639  defines += [ "target_cpu=${target_cpu}" ]
640  defines += [ "host_toolchain=${host_toolchain}" ]
641  defines += [ "current_toolchain=${current_toolchain}" ]
642  defines += [ "default_toolchain=${default_toolchain}" ]
643}
644
645config("unwind_config_arm") {
646  defines = [ "UNW_TARGET_ARM" ]
647}
648
649config("unwind_config_arm64") {
650  defines = [ "UNW_TARGET_ARM64" ]
651}
652
653config("unwind_config_arm64_opt") {
654  defines = [ "ONLY_RECOVER_GENERAL_REGS" ]
655}
656
657config("unwind_config_x64") {
658  defines = [ "UNW_TARGET_X86_64" ]
659  defines += [ "UNW_TARGET_X86_64_LINUX" ]
660}
661
662config("unwind_config_x86_64") {
663  defines = [ "UNW_TARGET_X86_64" ]
664  defines += [ "UNW_TARGET_X86_64_LINUX" ]
665}
666
667config("unwind_config_riscv64") {
668  defines = [ "UNW_TARGET_RISCV" ]
669}
670
671if (defined(ohos_lite)) {
672  source_set("unwind_source_arm") {
673    configs += [ ":unwind_config_remote" ]
674    public_configs = [
675      ":unwind_config_public",
676      ":unwind_config_remote_public",
677      ":unwind_config_arm",
678    ]
679    sources = common_source
680
681    # no jump lib
682    arm_source -= [
683      "$libunwind_code_dir/src/arm/getcontext.S",
684      "$libunwind_code_dir/src/arm/siglongjmp.S",
685    ]
686    sources += arm_source
687    sources -= remove_sources
688    deps = [ ":libunwind_action" ]
689  }
690
691  source_set("unwind_source_arm64") {
692    configs += [ ":unwind_config_remote" ]
693    public_configs = [
694      ":unwind_config_public",
695      ":unwind_config_remote_public",
696      ":unwind_config_arm64",
697    ]
698    sources = common_source
699
700    arm64_source -= [ "$libunwind_code_dir/src/aarch64/getcontext.S" ]
701
702    sources += arm64_source
703    sources -= remove_sources
704    deps = [ ":libunwind_action" ]
705  }
706
707  source_set("unwind_source_x64") {
708    configs += [ ":unwind_config_remote" ]
709    public_configs = [
710      ":unwind_config_public",
711      ":unwind_config_remote_public",
712      ":unwind_config_x64",
713    ]
714    sources = common_source
715
716    # no jump lib
717    x64_source -= [
718      "$libunwind_code_dir/src/x86_64/getcontext.S",
719      "$libunwind_code_dir/src/x86_64/setcontext.S",
720    ]
721    sources += x64_source
722    sources -= remove_sources
723    deps = [ ":libunwind_action" ]
724  }
725
726  source_set("unwind_source_riscv64") {
727    configs += [ ":unwind_config_remote" ]
728    public_configs = [
729      ":unwind_config_public",
730      ":unwind_config_remote_public",
731      ":unwind_config_riscv64",
732    ]
733    sources = common_source
734
735    # no jump lib
736    riscv64_source -= [
737      "$libunwind_code_dir/src/riscv/getcontext.S",
738      "$libunwind_code_dir/src/riscv/setcontext.S",
739    ]
740
741    sources += riscv64_source
742    sources -= remove_sources
743    deps = [ ":libunwind_action" ]
744  }
745
746  source_set("unwind_source") {
747    configs += [ ":unwind_config_public" ]
748    sources = common_source
749
750    if (target_cpu == "arm") {
751      # no jump lib
752      arm_source -= [
753        "$libunwind_code_dir/src/arm/getcontext.S",
754        "$libunwind_code_dir/src/arm/siglongjmp.S",
755      ]
756
757      # as libc++ is static linked with libunwind.a
758      # we remove the Gstep.c for duplicated symbol violation
759      sources += arm_source
760      public_configs = [ ":unwind_config_arm" ]
761    } else if (target_cpu == "arm64") {
762      sources += arm64_source
763      public_configs = [ ":unwind_config_arm64" ]
764    } else if (target_cpu == "riscv64") {
765      sources += riscv64_source
766      public_configs = [ ":unwind_config_riscv64" ]
767    } else if (target_cpu == "x64") {
768      sources += x64_source
769      public_configs = [ ":unwind_config_x64" ]
770    } else if (target_cpu == "x86_64") {
771      sources += x64_source
772      public_configs = [ ":unwind_config_x86_64" ]
773    }
774    deps = [ ":libunwind_action" ]
775  }
776
777  shared_library("libunwind") {
778    deps = [
779      ":libunwind_action",
780      ":unwind_source",
781    ]
782    public_configs = [ ":unwind_config_public" ]
783  }
784
785  static_library("libunwind_local") {
786    sources = common_source
787    public_configs = [ ":unwind_config_public" ]
788    public_configs += [ ":unwind_config_local_only" ]
789
790    if (target_cpu == "arm") {
791      sources += arm_source
792      sources -= arm_source_local
793      public_configs += [ ":unwind_config_arm" ]
794    } else if (target_cpu == "arm64") {
795      sources += arm64_source
796      sources -= arm64_source_local
797      public_configs += [ ":unwind_config_arm64" ]
798    } else if (target_cpu == "riscv64") {
799      sources += riscv64_source
800      sources -= riscv64_source_local
801      public_configs += [ ":unwind_config_riscv64" ]
802    } else if (target_cpu == "x64") {
803      sources += x64_source
804      sources -= x64_source_local
805      public_configs += [ ":unwind_config_x64" ]
806    } else if (target_cpu == "x86_64") {
807      sources += x64_source
808      sources -= x64_source_local
809      public_configs += [ ":unwind_config_x86_64" ]
810    }
811
812    sources -= libunwind_dwarf_local_la_SOURCES
813    sources -= libunwind_la_SOURCES_local
814    sources -= ptrace_sources
815    cflags = [
816      "-DHAS_ARK_FRAME",
817      "-DPARSE_BUILD_ID",
818      "-DUNW_LOCAL_ONLY",
819      "-DNO_RESERVE_CACHE",
820    ]
821    deps = [ ":libunwind_action" ]
822  }
823} else {
824  ohos_source_set("unwind_source_arm") {
825    configs = [ ":unwind_config_remote" ]
826    public_configs = [
827      ":unwind_config_public",
828      ":unwind_config_remote_public",
829      ":unwind_config_arm",
830    ]
831    sources = common_source
832
833    # no jump lib
834    arm_source -= [
835      "$libunwind_code_dir/src/arm/getcontext.S",
836      "$libunwind_code_dir/src/arm/siglongjmp.S",
837    ]
838    sources += arm_source
839    sources -= remove_sources
840    deps = [ ":libunwind_action" ]
841  }
842
843  ohos_source_set("unwind_source_arm64") {
844    configs = [ ":unwind_config_remote" ]
845    public_configs = [
846      ":unwind_config_public",
847      ":unwind_config_remote_public",
848      ":unwind_config_arm64",
849    ]
850    sources = common_source
851
852    arm64_source -= [ "$libunwind_code_dir/src/aarch64/getcontext.S" ]
853
854    sources += arm64_source
855    sources -= remove_sources
856    deps = [ ":libunwind_action" ]
857  }
858
859  ohos_source_set("unwind_source_arm64_opt") {
860    configs = [ ":unwind_config_remote" ]
861    public_configs = [
862      ":unwind_config_public",
863      ":unwind_config_remote_public",
864      ":unwind_config_arm64",
865      ":unwind_config_arm64_opt",
866    ]
867    sources = common_source
868
869    arm64_source -= [ "$libunwind_code_dir/src/aarch64/getcontext.S" ]
870
871    sources += arm64_source
872    sources -= remove_sources
873    deps = [ ":libunwind_action" ]
874  }
875
876  ohos_source_set("unwind_source_x64") {
877    configs = [ ":unwind_config_remote" ]
878    public_configs = [
879      ":unwind_config_public",
880      ":unwind_config_remote_public",
881      ":unwind_config_x64",
882    ]
883    sources = common_source
884
885    # no jump lib
886    x64_source -= [
887      "$libunwind_code_dir/src/x86_64/getcontext.S",
888      "$libunwind_code_dir/src/x86_64/setcontext.S",
889    ]
890    sources += x64_source
891    sources -= remove_sources
892    deps = [ ":libunwind_action" ]
893  }
894
895  ohos_source_set("unwind_source_x86_64") {
896    configs = [ ":unwind_config_remote" ]
897    public_configs = [
898      ":unwind_config_public",
899      ":unwind_config_remote_public",
900      ":unwind_config_x86_64",
901    ]
902    sources = common_source
903
904    # no jump lib
905    x64_source -= [
906      "$libunwind_code_dir/src/x86_64/getcontext.S",
907      "$libunwind_code_dir/src/x86_64/setcontext.S",
908    ]
909    sources += x64_source
910    sources -= remove_sources
911    deps = [ ":libunwind_action" ]
912  }
913
914  ohos_source_set("unwind_source_riscv64") {
915    configs = [ ":unwind_config_remote" ]
916    public_configs = [
917      ":unwind_config_public",
918      ":unwind_config_remote_public",
919      ":unwind_config_riscv64",
920    ]
921    sources = common_source
922
923    # no jump lib
924    riscv64_source -= [
925      "$libunwind_code_dir/src/riscv/getcontext.S",
926      "$libunwind_code_dir/src/riscv/setcontext.S",
927    ]
928
929    sources += riscv64_source
930    sources -= remove_sources
931    deps = [ ":libunwind_action" ]
932  }
933
934  ohos_source_set("unwind_source") {
935    configs = [ ":unwind_config_public" ]
936    sources = common_source
937
938    if (target_cpu == "riscv64") {
939      # as libc++ is static linked with libunwind.a
940      # we remove the Gstep.c for duplicated symbol violation
941      sources += riscv64_source
942      public_configs = [ ":unwind_config_riscv64" ]
943    } else if (target_cpu == "arm") {
944      sources += arm_source
945      public_configs = [ ":unwind_config_arm" ]
946    } else if (target_cpu == "arm64") {
947      sources += arm64_source
948      public_configs = [ ":unwind_config_arm64" ]
949    } else if (target_cpu == "x64") {
950      sources += x64_source
951      public_configs = [ ":unwind_config_x64" ]
952    } else if (target_cpu == "x86_64") {
953      sources += x64_source
954      public_configs = [ ":unwind_config_x86_64" ]
955    }
956
957    cflags = [
958      "-DHAS_ARK_FRAME",
959      "-DPARSE_BUILD_ID",
960      "-DPARSE_ELF_IN_HAP",
961    ]
962    deps = [ ":libunwind_action" ]
963    subsystem_name = "thirdparty"
964    part_name = "libunwind"
965  }
966
967  ohos_shared_library("libunwind") {
968    deps = [
969      ":libunwind_action",
970      ":unwind_source",
971    ]
972    install_images = [
973      "system",
974      "updater",
975    ]
976    public_configs = [ ":unwind_config_public" ]
977    innerapi_tags = [
978      "platformsdk",
979      "chipsetsdk",
980    ]
981    subsystem_name = "thirdparty"
982    part_name = "libunwind"
983  }
984
985  # for internal use only, the interfaces may have compatible issue
986  ohos_static_library("libunwind_local") {
987    sources = common_source
988    public_configs = [ ":unwind_config_public" ]
989    public_configs += [ ":unwind_config_local_only" ]
990
991    if (target_cpu == "arm") {
992      sources += arm_source
993      sources -= arm_source_local
994      public_configs += [ ":unwind_config_arm" ]
995    } else if (target_cpu == "arm64") {
996      sources += arm64_source
997      sources -= arm64_source_local
998      public_configs += [ ":unwind_config_arm64" ]
999    } else if (target_cpu == "riscv64") {
1000      sources += riscv64_source
1001      sources -= riscv64_source_local
1002      public_configs += [ ":unwind_config_riscv64" ]
1003    } else if (target_cpu == "x64") {
1004      sources += x64_source
1005      sources -= x64_source_local
1006      public_configs += [ ":unwind_config_x64" ]
1007    } else if (target_cpu == "x86_64") {
1008      sources += x64_source
1009      sources -= x64_source_local
1010      public_configs += [ ":unwind_config_x86_64" ]
1011    }
1012
1013    sources -= libunwind_dwarf_local_la_SOURCES
1014    sources -= libunwind_la_SOURCES_local
1015    sources -= ptrace_sources
1016    deps = [ ":libunwind_action" ]
1017    cflags = [
1018      "-DHAS_ARK_FRAME",
1019      "-DPARSE_BUILD_ID",
1020      "-DUNW_LOCAL_ONLY",
1021      "-DNO_RESERVE_CACHE",
1022      "-DHAVE_PIPE2",
1023    ]
1024
1025    subsystem_name = "thirdparty"
1026    part_name = "libunwind"
1027  }
1028}
1029