Fix NEON and SSE handling am: da5155b2f5 am: 0313b5aedb
am: 232858ab35

* commit '232858ab359c214c2b0006f298531ce8565acf08':
  Fix NEON and SSE handling

Change-Id: Ia2b0b267285fa47d8715efc4bb6ebcdc4dc22609
diff --git a/Android.mk b/Android.mk
index 3a57f20..512adb1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -19,31 +19,42 @@
                        -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)