diff options
author | Victor Khimenko <khim@google.com> | 2016-06-04 00:11:43 +0200 |
---|---|---|
committer | Victor Khimenko <khim@google.com> | 2016-06-04 00:46:29 +0200 |
commit | da5155b2f54bc136754590d0871008d9622c8100 (patch) | |
tree | f0c8c2aac29e4230cb588dccd60a665877ce9c84 | |
parent | c91ee5b5642fcc4969150f73d5f6848f88bf1638 (diff) | |
download | libopus-nougat-mr1-wear-release.tar.gz |
Fix NEON and SSE handlingandroid-wear-n-preview-2android-wear-7.1.1_r1android-n-preview-5android-n-preview-4android-n-iot-preview-2nougat-mr1-wear-releasen-iot-preview-2
The existing version handled SSE case more-or-less correctly but
ARM case was completely broken: it actually never used DSP/NEON/etc.
Fix the build and use proper logic to handle devices with and without
NEON support.
Change-Id: I74fe48f0b5df70c921c3dc7993e4d72e30e26cf0
-rw-r--r-- | Android.mk | 43 |
1 files changed, 27 insertions, 16 deletions
@@ -19,31 +19,42 @@ LOCAL_CFLAGS := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED \ -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O2 -fno-math-errno LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops -ifneq ($(findstring $(TARGET_ARCH_ABI), armeabi-v7a arm64-v8a),) -LOCAL_SRC_FILES += $(CELT_SOURCES_ARM) $(CELT_SOURCES_ARM_NEON_INTR) -LOCAL_SRC_FILES += celt/arm/armopts_gnu.s.neon -LOCAL_SRC_FILES += $(subst .s,_gnu.s.neon,$(CELT_SOURCES_ARM_ASM)) -LOCAL_ARM_NEON := true -LOCAL_CFLAGS += -DOPUS_ARM_ASM -DOPUS_ARM_INLINE_ASM -DOPUS_ARM_INLINE_EDSP \ - -DOPUS_ARM_INLINE_MEDIA -DOPUS_ARM_INLINE_NEON \ - -DOPUS_ARM_MAY_HAVE_NEON -DOPUS_ARM_MAY_HAVE_MEDIA \ - -DOPUS_ARM_MAY_HAVE_EDSP -DOPUS_ARM_MAY_HAVE_NEON_INTR \ - -DOPUS_HAVE_RTCD -DOPUS_ARM_PRESUME_EDSP \ - -DOPUS_ARM_PRESUME_MEDIA -DOPUS_ARM_PRESUME_NEON +# Note: OPUS enhanced DSP/NEON implementation is not yet compatible with arm64. +# Only add the appropriate defines for 32-bit arm architecture. +LOCAL_SRC_FILES_arm += $(CELT_SOURCES_ARM) +LOCAL_CFLAGS_arm += -DOPUS_ARM_ASM -DOPUS_ARM_INLINE_ASM \ + -DOPUS_ARM_MAY_HAVE_EDSP -DOPUS_ARM_PRESUME_EDSP \ + -DOPUS_ARM_INLINE_EDSP -DOPUS_ARM_MAY_HAVE_MEDIA \ + -DOPUS_ARM_PRESUME_MEDIA -DOPUS_ARM_INLINE_MEDIA \ + -DOPUS_HAVE_RTCD +# DSP, MEDIA and NEON instructions are in the same assembler file - thus we +# need to include it even if NEON is not supported on target platform. +LOCAL_SRC_FILES_arm += $(subst .s,_gnu.s,$(CELT_SOURCES_ARM_ASM)) +ifeq ($(ARCH_ARM_HAVE_NEON),true) +LOCAL_SRC_FILES_arm += $(CELT_SOURCES_ARM_NEON_INTR) +LOCAL_CFLAGS_arm += -DOPUS_ARM_MAY_HAVE_NEON -DOPUS_ARM_MAY_HAVE_NEON_INTR \ + -DOPUS_ARM_PRESUME_NEON -DOPUS_ARM_INLINE_NEON endif +LIBOPUS_X86_FILES := +LIBOPUS_X86_CFLAGS := ifeq ($(ARCH_X86_HAVE_SSSE3),true) -LOCAL_CFLAGS += -DOPUS_X86_MAY_HAVE_SSE -DOPUS_X86_PRESUME_SSE \ - -DOPUS_X86_MAY_HAVE_SSE2 -DOPUS_X86_PRESUME_SSE2 -LOCAL_SRC_FILES += $(CELT_SOURCES_SSE) $(CELT_SOURCES_SSE2) +LIBOPUS_X86_FILES += $(CELT_SOURCES_SSE) $(CELT_SOURCES_SSE2) +LIBOPUS_X86_CFLAGS += -DOPUS_X86_MAY_HAVE_SSE -DOPUS_X86_PRESUME_SSE \ + -DOPUS_X86_MAY_HAVE_SSE2 -DOPUS_X86_PRESUME_SSE2 endif ifeq ($(ARCH_X86_HAVE_SSE4_1),true) -LOCAL_CFLAGS += -DOPUS_X86_MAY_HAVE_SSE4_1 -DOPUS_X86_PRESUME_SSE4_1 -LOCAL_SRC_FILES += $(CELT_SOURCES_SSE4_1) \ +LIBOPUS_X86_FILES += $(CELT_SOURCES_SSE4_1) \ $(SILK_SOURCES_SSE4_1) $(SILK_SOURCES_FIXED_SSE4_1) +LIBOPUS_X86_CFLAGS += -DOPUS_X86_MAY_HAVE_SSE4_1 -DOPUS_X86_PRESUME_SSE4_1 endif +LOCAL_SRC_FILES_x86 += $(LIBOPUS_X86_FILES) +LOCAL_SRC_FILES_x86_64 += $(LIBOPUS_X86_FILES) +LOCAL_CFLAGS_x86 += $(LIBOPUS_X86_CFLAGS) +LOCAL_CFLAGS_x86_64 += $(LIBOPUS_X86_CFLAGS) + LOCAL_STATIC_LIBRARIES := libogg include $(BUILD_SHARED_LIBRARY) |