• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
2
3import("//build/ohos.gni")
4
5libffi_dir = "${target_gen_dir}/libffi-3.4.2"
6action("libffi_action") {
7  print("libffi_action is exec")
8  script = "//third_party/libffi/install.py"
9  outputs = [
10    "$libffi_dir/src/raw_api.c",
11    "$libffi_dir/src/tramp.c",
12    "$libffi_dir/src/closures.c",
13    "$libffi_dir/src/debug.c",
14    "$libffi_dir/src/types.c",
15    "$libffi_dir/src/java_raw_api.c",
16    "$libffi_dir/src/dlmalloc.c",
17    "$libffi_dir/src/prep_cif.c",
18    "$libffi_dir/src/cris/sysv.S",
19    "$libffi_dir/src/cris/ffi.c",
20    "$libffi_dir/src/arc/ffi.c",
21    "$libffi_dir/src/arc/arcompact.S",
22    "$libffi_dir/src/s390/sysv.S",
23    "$libffi_dir/src/s390/ffi.c",
24    "$libffi_dir/src/or1k/sysv.S",
25    "$libffi_dir/src/or1k/ffi.c",
26    "$libffi_dir/src/avr32/sysv.S",
27    "$libffi_dir/src/avr32/ffi.c",
28    "$libffi_dir/src/tile/ffi.c",
29    "$libffi_dir/src/tile/tile.S",
30    "$libffi_dir/src/pa/linux.S",
31    "$libffi_dir/src/pa/ffi.c",
32    "$libffi_dir/src/pa/hpux32.S",
33    "$libffi_dir/src/x86/win64_intel.S",
34    "$libffi_dir/src/x86/sysv.S",
35    "$libffi_dir/src/x86/ffi.c",
36    "$libffi_dir/src/x86/sysv_intel.S",
37    "$libffi_dir/src/x86/ffi64.c",
38    "$libffi_dir/src/x86/ffiw64.c",
39    "$libffi_dir/src/x86/win64.S",
40    "$libffi_dir/src/x86/unix64.S",
41    "$libffi_dir/src/alpha/ffi.c",
42    "$libffi_dir/src/alpha/osf.S",
43    "$libffi_dir/src/csky/sysv.S",
44    "$libffi_dir/src/csky/ffi.c",
45    "$libffi_dir/src/bfin/sysv.S",
46    "$libffi_dir/src/bfin/ffi.c",
47    "$libffi_dir/src/sh/sysv.S",
48    "$libffi_dir/src/sh/ffi.c",
49    "$libffi_dir/src/arm/sysv.S",
50    "$libffi_dir/src/arm/ffi.c",
51    "$libffi_dir/src/arm/sysv_msvc_arm32.S",
52    "$libffi_dir/src/sparc/v9.S",
53    "$libffi_dir/src/sparc/ffi.c",
54    "$libffi_dir/src/sparc/ffi64.c",
55    "$libffi_dir/src/sparc/v8.S",
56    "$libffi_dir/src/xtensa/sysv.S",
57    "$libffi_dir/src/xtensa/ffi.c",
58    "$libffi_dir/src/moxie/ffi.c",
59    "$libffi_dir/src/moxie/eabi.S",
60    "$libffi_dir/src/frv/ffi.c",
61    "$libffi_dir/src/frv/eabi.S",
62    "$libffi_dir/src/m88k/ffi.c",
63    "$libffi_dir/src/m88k/obsd.S",
64    "$libffi_dir/src/ia64/ffi.c",
65    "$libffi_dir/src/ia64/unix.S",
66    "$libffi_dir/src/nios2/sysv.S",
67    "$libffi_dir/src/nios2/ffi.c",
68    "$libffi_dir/src/riscv/sysv.S",
69    "$libffi_dir/src/riscv/ffi.c",
70    "$libffi_dir/src/m68k/sysv.S",
71    "$libffi_dir/src/m68k/ffi.c",
72    "$libffi_dir/src/sh64/sysv.S",
73    "$libffi_dir/src/sh64/ffi.c",
74    "$libffi_dir/src/powerpc/ffi_linux64.c",
75    "$libffi_dir/src/powerpc/darwin.S",
76    "$libffi_dir/src/powerpc/darwin_closure.S",
77    "$libffi_dir/src/powerpc/sysv.S",
78    "$libffi_dir/src/powerpc/ffi_sysv.c",
79    "$libffi_dir/src/powerpc/ffi.c",
80    "$libffi_dir/src/powerpc/aix_closure.S",
81    "$libffi_dir/src/powerpc/linux64_closure.S",
82    "$libffi_dir/src/powerpc/linux64.S",
83    "$libffi_dir/src/powerpc/ffi_darwin.c",
84    "$libffi_dir/src/powerpc/aix.S",
85    "$libffi_dir/src/powerpc/ppc_closure.S",
86    "$libffi_dir/src/aarch64/sysv.S",
87    "$libffi_dir/src/aarch64/ffi.c",
88    "$libffi_dir/src/aarch64/win64_armasm.S",
89    "$libffi_dir/src/microblaze/sysv.S",
90    "$libffi_dir/src/microblaze/ffi.c",
91    "$libffi_dir/src/metag/sysv.S",
92    "$libffi_dir/src/metag/ffi.c",
93    "$libffi_dir/src/mips/o32.S",
94    "$libffi_dir/src/mips/n32.S",
95    "$libffi_dir/src/mips/ffi.c",
96    "$libffi_dir/src/sw_64/ffi.c",
97    "$libffi_dir/src/sw_64/osf.S",
98    "$libffi_dir/src/m32r/sysv.S",
99    "$libffi_dir/src/m32r/ffi.c",
100    "$libffi_dir/src/kvx/sysv.S",
101    "$libffi_dir/src/kvx/ffi.c",
102    "$libffi_dir/src/vax/elfbsd.S",
103    "$libffi_dir/src/vax/ffi.c",
104  ]
105
106  inputs = [ "//third_party/libffi/libffi-3.4.2.tar.gz" ]
107  libffi_path = rebase_path("${target_gen_dir}", root_build_dir)
108  libffi_source_path = rebase_path("//third_party/libffi", root_build_dir)
109  args = [
110    "--gen-dir",
111    "$libffi_path",
112    "--source-dir",
113    "$libffi_source_path",
114  ]
115}
116
117config("ffi_public_config") {
118  if (target_cpu == "arm") {
119    include_dirs = [
120      "$libffi_dir/include",
121      "$libffi_dir/src/arm",
122    ]
123  } else if (target_cpu == "x86_64") {
124    include_dirs = [
125      "$libffi_dir/include",
126      "$libffi_dir/src/x86",
127    ]
128  } else {
129    include_dirs = [
130      "$libffi_dir/include",
131      "$libffi_dir/src/aarch64",
132    ]
133  }
134}
135
136ohos_shared_library("ffi") {
137  if (target_cpu == "arm") {
138    include_dirs = [
139      "$libffi_dir",
140      "$libffi_dir/include",
141      "$libffi_dir/src/arm",
142    ]
143
144    cflags = [
145      "-DTARGET=ARM",
146      "-Wno-sign-compare",
147      "-Wno-implicit-function-declaration",
148      "-Wno-extern-initializer",
149    ]
150
151    sources = [
152      "$libffi_dir/src/arm/ffi.c",
153      "$libffi_dir/src/arm/sysv.S",
154      "$libffi_dir/src/closures.c",
155      "$libffi_dir/src/java_raw_api.c",
156      "$libffi_dir/src/prep_cif.c",
157      "$libffi_dir/src/raw_api.c",
158      "$libffi_dir/src/tramp.c",
159      "$libffi_dir/src/types.c",
160    ]
161  } else if (target_cpu == "x86_64") {
162    include_dirs = [
163      "$libffi_dir",
164      "$libffi_dir/include",
165      "$libffi_dir/src/x86",
166    ]
167
168    cflags = [
169      "-DTARGET=X86_64",
170      "-Wno-sign-compare",
171      "-Wno-implicit-function-declaration",
172      "-Wno-extern-initializer",
173    ]
174
175    sources = [
176      "$libffi_dir/src/closures.c",
177      "$libffi_dir/src/java_raw_api.c",
178      "$libffi_dir/src/prep_cif.c",
179      "$libffi_dir/src/raw_api.c",
180      "$libffi_dir/src/tramp.c",
181      "$libffi_dir/src/types.c",
182      "$libffi_dir/src/x86/ffi64.c",
183      "$libffi_dir/src/x86/ffiw64.c",
184      "$libffi_dir/src/x86/unix64.S",
185      "$libffi_dir/src/x86/win64.S",
186    ]
187  } else {
188    include_dirs = [
189      "$libffi_dir",
190      "$libffi_dir/include",
191      "$libffi_dir/src/aarch64",
192    ]
193
194    cflags = [
195      "-DTARGET=AARCH64",
196      "-Wno-sign-compare",
197      "-Wno-implicit-function-declaration",
198      "-Wno-extern-initializer",
199    ]
200
201    sources = [
202      "$libffi_dir/src/aarch64/ffi.c",
203      "$libffi_dir/src/aarch64/sysv.S",
204      "$libffi_dir/src/closures.c",
205      "$libffi_dir/src/java_raw_api.c",
206      "$libffi_dir/src/prep_cif.c",
207      "$libffi_dir/src/raw_api.c",
208      "$libffi_dir/src/tramp.c",
209      "$libffi_dir/src/types.c",
210    ]
211  }
212
213  deps = [ ":libffi_action" ]
214  public_configs = [ ":ffi_public_config" ]
215
216  part_name = "libffi"
217  subsystem_name = "thirdparty"
218}
219