aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Khimenko <khim@google.com>2016-06-04 00:11:43 +0200
committerVictor Khimenko <khim@google.com>2016-06-04 00:46:29 +0200
commitda5155b2f54bc136754590d0871008d9622c8100 (patch)
treef0c8c2aac29e4230cb588dccd60a665877ce9c84
parentc91ee5b5642fcc4969150f73d5f6848f88bf1638 (diff)
downloadlibopus-nougat-mr1-wear-release.tar.gz
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.mk43
1 files changed, 27 insertions, 16 deletions
diff --git a/Android.mk b/Android.mk
index 3a57f206..512adb18 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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)