# Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. import("//build/ohos.gni") libffi_dir = "${target_gen_dir}/libffi-3.4.2" action("libffi_action") { print("libffi_action is exec") script = "//third_party/libffi/install.py" outputs = [ "$libffi_dir/src/raw_api.c", "$libffi_dir/src/tramp.c", "$libffi_dir/src/closures.c", "$libffi_dir/src/debug.c", "$libffi_dir/src/types.c", "$libffi_dir/src/java_raw_api.c", "$libffi_dir/src/dlmalloc.c", "$libffi_dir/src/prep_cif.c", "$libffi_dir/src/cris/sysv.S", "$libffi_dir/src/cris/ffi.c", "$libffi_dir/src/arc/ffi.c", "$libffi_dir/src/arc/arcompact.S", "$libffi_dir/src/s390/sysv.S", "$libffi_dir/src/s390/ffi.c", "$libffi_dir/src/or1k/sysv.S", "$libffi_dir/src/or1k/ffi.c", "$libffi_dir/src/avr32/sysv.S", "$libffi_dir/src/avr32/ffi.c", "$libffi_dir/src/tile/ffi.c", "$libffi_dir/src/tile/tile.S", "$libffi_dir/src/pa/linux.S", "$libffi_dir/src/pa/ffi.c", "$libffi_dir/src/pa/hpux32.S", "$libffi_dir/src/x86/win64_intel.S", "$libffi_dir/src/x86/sysv.S", "$libffi_dir/src/x86/ffi.c", "$libffi_dir/src/x86/sysv_intel.S", "$libffi_dir/src/x86/ffi64.c", "$libffi_dir/src/x86/ffiw64.c", "$libffi_dir/src/x86/win64.S", "$libffi_dir/src/x86/unix64.S", "$libffi_dir/src/alpha/ffi.c", "$libffi_dir/src/alpha/osf.S", "$libffi_dir/src/csky/sysv.S", "$libffi_dir/src/csky/ffi.c", "$libffi_dir/src/bfin/sysv.S", "$libffi_dir/src/bfin/ffi.c", "$libffi_dir/src/sh/sysv.S", "$libffi_dir/src/sh/ffi.c", "$libffi_dir/src/arm/sysv.S", "$libffi_dir/src/arm/ffi.c", "$libffi_dir/src/arm/sysv_msvc_arm32.S", "$libffi_dir/src/sparc/v9.S", "$libffi_dir/src/sparc/ffi.c", "$libffi_dir/src/sparc/ffi64.c", "$libffi_dir/src/sparc/v8.S", "$libffi_dir/src/xtensa/sysv.S", "$libffi_dir/src/xtensa/ffi.c", "$libffi_dir/src/moxie/ffi.c", "$libffi_dir/src/moxie/eabi.S", "$libffi_dir/src/frv/ffi.c", "$libffi_dir/src/frv/eabi.S", "$libffi_dir/src/m88k/ffi.c", "$libffi_dir/src/m88k/obsd.S", "$libffi_dir/src/ia64/ffi.c", "$libffi_dir/src/ia64/unix.S", "$libffi_dir/src/nios2/sysv.S", "$libffi_dir/src/nios2/ffi.c", "$libffi_dir/src/riscv/sysv.S", "$libffi_dir/src/riscv/ffi.c", "$libffi_dir/src/m68k/sysv.S", "$libffi_dir/src/m68k/ffi.c", "$libffi_dir/src/sh64/sysv.S", "$libffi_dir/src/sh64/ffi.c", "$libffi_dir/src/powerpc/ffi_linux64.c", "$libffi_dir/src/powerpc/darwin.S", "$libffi_dir/src/powerpc/darwin_closure.S", "$libffi_dir/src/powerpc/sysv.S", "$libffi_dir/src/powerpc/ffi_sysv.c", "$libffi_dir/src/powerpc/ffi.c", "$libffi_dir/src/powerpc/aix_closure.S", "$libffi_dir/src/powerpc/linux64_closure.S", "$libffi_dir/src/powerpc/linux64.S", "$libffi_dir/src/powerpc/ffi_darwin.c", "$libffi_dir/src/powerpc/aix.S", "$libffi_dir/src/powerpc/ppc_closure.S", "$libffi_dir/src/aarch64/sysv.S", "$libffi_dir/src/aarch64/ffi.c", "$libffi_dir/src/aarch64/win64_armasm.S", "$libffi_dir/src/microblaze/sysv.S", "$libffi_dir/src/microblaze/ffi.c", "$libffi_dir/src/metag/sysv.S", "$libffi_dir/src/metag/ffi.c", "$libffi_dir/src/mips/o32.S", "$libffi_dir/src/mips/n32.S", "$libffi_dir/src/mips/ffi.c", "$libffi_dir/src/sw_64/ffi.c", "$libffi_dir/src/sw_64/osf.S", "$libffi_dir/src/m32r/sysv.S", "$libffi_dir/src/m32r/ffi.c", "$libffi_dir/src/kvx/sysv.S", "$libffi_dir/src/kvx/ffi.c", "$libffi_dir/src/vax/elfbsd.S", "$libffi_dir/src/vax/ffi.c", ] inputs = [ "//third_party/libffi/libffi-3.4.2.tar.gz" ] libffi_path = rebase_path("${target_gen_dir}", root_build_dir) libffi_source_path = rebase_path("//third_party/libffi", root_build_dir) args = [ "--gen-dir", "$libffi_path", "--source-dir", "$libffi_source_path", ] } config("ffi_public_config") { if (target_cpu == "arm") { include_dirs = [ "$libffi_dir/include", "$libffi_dir/src/arm", ] } else if (target_cpu == "x86_64") { include_dirs = [ "$libffi_dir/include", "$libffi_dir/src/x86", ] } else { include_dirs = [ "$libffi_dir/include", "$libffi_dir/src/aarch64", ] } } ohos_shared_library("ffi") { if (target_cpu == "arm") { include_dirs = [ "$libffi_dir", "$libffi_dir/include", "$libffi_dir/src/arm", ] cflags = [ "-DTARGET=ARM", "-Wno-sign-compare", "-Wno-implicit-function-declaration", "-Wno-extern-initializer", ] sources = [ "$libffi_dir/src/arm/ffi.c", "$libffi_dir/src/arm/sysv.S", "$libffi_dir/src/closures.c", "$libffi_dir/src/java_raw_api.c", "$libffi_dir/src/prep_cif.c", "$libffi_dir/src/raw_api.c", "$libffi_dir/src/tramp.c", "$libffi_dir/src/types.c", ] } else if (target_cpu == "x86_64") { include_dirs = [ "$libffi_dir", "$libffi_dir/include", "$libffi_dir/src/x86", ] cflags = [ "-DTARGET=X86_64", "-Wno-sign-compare", "-Wno-implicit-function-declaration", "-Wno-extern-initializer", ] sources = [ "$libffi_dir/src/closures.c", "$libffi_dir/src/java_raw_api.c", "$libffi_dir/src/prep_cif.c", "$libffi_dir/src/raw_api.c", "$libffi_dir/src/tramp.c", "$libffi_dir/src/types.c", "$libffi_dir/src/x86/ffi64.c", "$libffi_dir/src/x86/ffiw64.c", "$libffi_dir/src/x86/unix64.S", "$libffi_dir/src/x86/win64.S", ] } else { include_dirs = [ "$libffi_dir", "$libffi_dir/include", "$libffi_dir/src/aarch64", ] cflags = [ "-DTARGET=AARCH64", "-Wno-sign-compare", "-Wno-implicit-function-declaration", "-Wno-extern-initializer", ] sources = [ "$libffi_dir/src/aarch64/ffi.c", "$libffi_dir/src/aarch64/sysv.S", "$libffi_dir/src/closures.c", "$libffi_dir/src/java_raw_api.c", "$libffi_dir/src/prep_cif.c", "$libffi_dir/src/raw_api.c", "$libffi_dir/src/tramp.c", "$libffi_dir/src/types.c", ] } deps = [ ":libffi_action" ] public_configs = [ ":ffi_public_config" ] part_name = "libffi" subsystem_name = "thirdparty" }