Home | History | Annotate | Download | only in dl
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 declare_args() {
      6   # Override this value to build with small float FFT tables
      7   openmax_big_float_fft = true
      8 }
      9 
     10 config("dl_config") {
     11   include_dirs = [ ".." ]
     12 }
     13 
     14 # GYP: third_party/openmax_dl/dl/dl.gyp:openmax_dl
     15 source_set("dl") {
     16   public_configs = [ ":dl_config" ]
     17   sources = [
     18     "api/omxtypes.h",
     19     "sp/api/omxSP.h",
     20     "sp/src/armSP_FFT_F32TwiddleTable.c",
     21   ]
     22 
     23   cflags = []
     24   deps = []
     25   defines = []
     26 
     27   if (openmax_big_float_fft) {
     28     defines += [
     29       "BIG_FFT_TABLE",
     30     ]
     31   }
     32 
     33   if (cpu_arch == "arm" || cpu_arch == "arm64") {
     34     sources += [
     35       # Common files that are used by both arm and arm64 code.
     36       "api/arm/armOMX.h",
     37       "api/arm/omxtypes_s.h",
     38       "sp/api/armSP.h",
     39       "sp/src/arm/armSP_FFT_S32TwiddleTable.c",
     40       "sp/src/arm/omxSP_FFTGetBufSize_C_FC32.c",
     41       "sp/src/arm/omxSP_FFTGetBufSize_C_SC32.c",
     42       "sp/src/arm/omxSP_FFTGetBufSize_R_F32.c",
     43       "sp/src/arm/omxSP_FFTGetBufSize_R_S32.c",
     44       "sp/src/arm/omxSP_FFTInit_C_FC32.c",
     45       "sp/src/arm/omxSP_FFTInit_R_F32.c",
     46     ]
     47   }
     48 
     49   if (cpu_arch == "arm") {
     50     configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
     51     cflags += [
     52       "-mfpu=neon"
     53     ]
     54 
     55     deps += [
     56       ":openmax_dl_armv7"
     57     ]
     58 
     59     sources += [
     60       # Common files that are used by both the NEON and non-NEON code.
     61       "api/armCOMM_s.h",
     62       "sp/src/arm/omxSP_FFTGetBufSize_C_SC16.c",
     63       "sp/src/arm/omxSP_FFTGetBufSize_R_S16.c",
     64       "sp/src/arm/omxSP_FFTGetBufSize_R_S16S32.c",
     65       "sp/src/arm/omxSP_FFTInit_C_SC16.c",
     66       "sp/src/arm/omxSP_FFTInit_C_SC32.c",
     67       "sp/src/arm/omxSP_FFTInit_R_S16.c",
     68       "sp/src/arm/omxSP_FFTInit_R_S16S32.c",
     69       "sp/src/arm/omxSP_FFTInit_R_S32.c",
     70 
     71       # Complex 32-bit fixed-point FFT.
     72       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_fs_unsafe_s.S",
     73       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_ls_unsafe_s.S",
     74       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_unsafe_s.S",
     75       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_fs_unsafe_s.S",
     76       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_ls_unsafe_s.S",
     77       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_unsafe_s.S",
     78       "sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix8_fs_unsafe_s.S",
     79       "sp/src/arm/neon/omxSP_FFTFwd_CToC_SC32_Sfs_s.S",
     80       "sp/src/arm/neon/omxSP_FFTInv_CToC_SC32_Sfs_s.S",
     81       # Real 32-bit fixed-point FFT
     82       "sp/src/arm/neon/armSP_FFTInv_CCSToR_S32_preTwiddleRadix2_unsafe_s.S",
     83       "sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S32_Sfs_s.S",
     84       "sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32_Sfs_s.S",
     85       # Complex 16-bit fixed-point FFT
     86       "sp/src/arm/neon/armSP_FFTInv_CCSToR_S16_preTwiddleRadix2_unsafe_s.S",
     87       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_fs_unsafe_s.S",
     88       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ls_unsafe_s.S",
     89       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ps_unsafe_s.S",
     90       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_unsafe_s.S",
     91       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S",
     92       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S",
     93       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S",
     94       "sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S",
     95       "sp/src/arm/neon/omxSP_FFTFwd_CToC_SC16_Sfs_s.S",
     96       "sp/src/arm/neon/omxSP_FFTInv_CToC_SC16_Sfs_s.S",
     97       # Real 16-bit fixed-point FFT
     98       "sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16_Sfs_s.S",
     99       "sp/src/arm/neon/omxSP_FFTInv_CCSToR_S16_Sfs_s.S",
    100       "sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16S32_Sfs_s.S",
    101       "sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32S16_Sfs_s.S",
    102       # Complex floating-point FFT
    103       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S",
    104       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_ls_unsafe_s.S",
    105       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_unsafe_s.S",
    106       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_fs_unsafe_s.S",
    107       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_ls_unsafe_s.S",
    108       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_unsafe_s.S",
    109       "sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix8_fs_unsafe_s.S",
    110       "sp/src/arm/neon/omxSP_FFTFwd_CToC_FC32_Sfs_s.S",
    111       "sp/src/arm/neon/omxSP_FFTInv_CToC_FC32_Sfs_s.S",
    112       # Real floating-point FFT
    113       "sp/src/arm/neon/armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_s.S",
    114       "sp/src/arm/neon/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S",
    115       "sp/src/arm/neon/omxSP_FFTInv_CCSToR_F32_Sfs_s.S",
    116     ]
    117   }
    118 
    119   if (cpu_arch == "ia32" || cpu_arch == "x64") {
    120     cflags += [
    121       "-msse2"
    122     ]
    123 
    124     sources += [
    125       # Real 32-bit floating-point FFT.
    126       "sp/api/x86SP.h",
    127       "sp/src/x86/omxSP_FFTFwd_RToCCS_F32_Sfs.c",
    128       "sp/src/x86/omxSP_FFTGetBufSize_R_F32.c",
    129       "sp/src/x86/omxSP_FFTInit_R_F32.c",
    130       "sp/src/x86/omxSP_FFTInv_CCSToR_F32_Sfs.c",
    131       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix2_fs.c",
    132       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix2_ls.c",
    133       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix2_ls_sse.c",
    134       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix2_ms.c",
    135       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_fs.c",
    136       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_fs_sse.c",
    137       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_ls.c",
    138       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_ls_sse.c",
    139       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_ms.c",
    140       "sp/src/x86/x86SP_FFT_CToC_FC32_Fwd_Radix4_ms_sse.c",
    141       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix2_fs.c",
    142       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix2_ls.c",
    143       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix2_ls_sse.c",
    144       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix2_ms.c",
    145       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_fs.c",
    146       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_fs_sse.c",
    147       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_ls.c",
    148       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_ls_sse.c",
    149       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_ms.c",
    150       "sp/src/x86/x86SP_FFT_CToC_FC32_Inv_Radix4_ms_sse.c",
    151       "sp/src/x86/x86SP_FFT_F32_radix2_kernel.c",
    152       "sp/src/x86/x86SP_FFT_F32_radix4_kernel.c",
    153       "sp/src/x86/x86SP_SSE_Math.h",
    154     ]
    155   }
    156   if (cpu_arch == "arm64") {
    157     sources += [
    158       "api/arm/arm64COMM_s.h",
    159 
    160       # Complex floating-point FFT
    161       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix2_fs_s.S",
    162       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix2_ls_s.S",
    163       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix2_s.S",
    164       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix4_fs_s.S",
    165       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix4_ls_s.S",
    166       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix4_s.S",
    167       "sp/src/arm/arm64/armSP_FFT_CToC_FC32_Radix8_fs_s.S",
    168       "sp/src/arm/arm64/omxSP_FFTInv_CToC_FC32.c",
    169       "sp/src/arm/arm64/omxSP_FFTFwd_CToC_FC32.c",
    170       # Real floating-point FFT
    171       "sp/src/arm/arm64/armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_s.S",
    172       "sp/src/arm/arm64/omxSP_FFTFwd_RToCCS_F32.c",
    173       "sp/src/arm/arm64/ComplexToRealFixup.S",
    174       "sp/src/arm/arm64/omxSP_FFTInv_CCSToR_F32.c",
    175     ]
    176   }
    177   if (cpu_arch == "mipsel") {
    178     cflags += [
    179       "-std=c99",
    180     ]
    181     sources -= [
    182       "sp/src/armSP_FFT_F32TwiddleTable.c",
    183     ]
    184 
    185     sources += [
    186       "sp/api/mipsSP.h",
    187       "sp/src/mips/mips_FFTFwd_RToCCS_F32_complex.c",
    188       "sp/src/mips/mips_FFTFwd_RToCCS_F32_real.c",
    189       "sp/src/mips/mips_FFTInv_CCSToR_F32_complex.c",
    190       "sp/src/mips/mips_FFTInv_CCSToR_F32_real.c",
    191       "sp/src/mips/omxSP_FFT_F32TwiddleTable.c",
    192       "sp/src/mips/omxSP_FFTFwd_RToCCS_F32_Sfs.c",
    193       "sp/src/mips/omxSP_FFTGetBufSize_R_F32.c",
    194       "sp/src/mips/omxSP_FFTInit_R_F32.c",
    195       "sp/src/mips/omxSP_FFTInv_CCSToR_F32_Sfs.c",
    196     ]
    197   }
    198 }
    199 
    200 if (cpu_arch == "arm") {
    201   # GYP: third_party/openmax_dl/dl/dl.gyp:openmax_dl
    202   # Non-NEON implementation of FFT. This library is NOT
    203   # standalone. Applications must link with openmax_dl.
    204   source_set("openmax_dl_armv7") {
    205     configs += [ ":dl_config" ]
    206     deps = [ "//third_party/android_tools:cpu_features" ]
    207     visibility = [ ":*" ]
    208 
    209     #TODO(GYP):
    210     #'cflags!': [
    211     #'-mfpu=neon',
    212     #],
    213 
    214     libs = [ "log" ]
    215 
    216     sources = [
    217       # Detection routine
    218       "sp/src/arm/detect.c",
    219       # Complex floating-point FFT
    220       "sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S",
    221       "sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix4_fs_unsafe_s.S",
    222       "sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix4_unsafe_s.S",
    223       "sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix8_fs_unsafe_s.S",
    224       "sp/src/arm/armv7/omxSP_FFTInv_CToC_FC32_Sfs_s.S",
    225       "sp/src/arm/armv7/omxSP_FFTFwd_CToC_FC32_Sfs_s.S",
    226       # Real floating-point FFT
    227       "sp/src/arm/armv7/armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_s.S",
    228       "sp/src/arm/armv7/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S",
    229       "sp/src/arm/armv7/omxSP_FFTInv_CCSToR_F32_Sfs_s.S",
    230     ]
    231   }
    232 }
    233