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