shithub: opus

Download patch

ref: daa6a1c1cc2ecdcc5f3341e78285a0ae6a90792d
parent: 12331447f69135e90ad98f7ece1ac64cb1e8f232
author: Siarhei Volkau <lis8215@gmail.com>
date: Sun Aug 17 13:28:44 EDT 2025

MIPS: generalize build options

Current MIPS port supports special implementation for CPUs with DSP
extension support. It is enabled by setting MIPSr1_ASM flag for
compiler.

The name MIPSr1_ASM is very confusing, r1 might mean:
- MIPS I
- MIPS32/MIPS64 release 1
- MIPS DSP ASE revision 1 (the correct one)

Let's remove it and check GCC's builtin define __mips_dsp instead.
This allows use default autotools build system instead of hand-crafted
makefile.

Signed-off-by: Siarhei Volkau <lis8215@gmail.com>
Signed-off-by: Jean-Marc Valin <jeanmarcv@google.com>

--- a/Makefile.mips
+++ /dev/null
@@ -1,169 +1,0 @@
-#################### COMPILE OPTIONS #######################
-
-# Uncomment this for fixed-point build
-FIXED_POINT=1
-
-# It is strongly recommended to uncomment one of these
-# VAR_ARRAYS: Use C99 variable-length arrays for stack allocation
-# USE_ALLOCA: Use alloca() for stack allocation
-# If none is defined, then the fallback is a non-threadsafe global array
-CFLAGS := -DUSE_ALLOCA $(CFLAGS)
-#CFLAGS := -DVAR_ARRAYS $(CFLAGS)
-
-# These options affect performance
-# HAVE_LRINTF: Use C99 intrinsics to speed up float-to-int conversion
-CFLAGS := -DHAVE_LRINTF $(CFLAGS)
-
-###################### END OF OPTIONS ######################
-
--include package_version
-
-include silk_sources.mk
-include celt_sources.mk
-include opus_sources.mk
-
-ifdef FIXED_POINT
-SILK_SOURCES += $(SILK_SOURCES_FIXED)
-else
-SILK_SOURCES += $(SILK_SOURCES_FLOAT)
-OPUS_SOURCES += $(OPUS_SOURCES_FLOAT)
-endif
-
-EXESUFFIX =
-LIBPREFIX = lib
-LIBSUFFIX = .a
-OBJSUFFIX = .o
-
-CC     = $(TOOLCHAIN_PREFIX)cc$(TOOLCHAIN_SUFFIX)
-AR     = $(TOOLCHAIN_PREFIX)ar
-RANLIB = $(TOOLCHAIN_PREFIX)ranlib
-CP     = $(TOOLCHAIN_PREFIX)cp
-
-cppflags-from-defines   = $(addprefix -D,$(1))
-cppflags-from-includes  = $(addprefix -I,$(1))
-ldflags-from-ldlibdirs  = $(addprefix -L,$(1))
-ldlibs-from-libs        = $(addprefix -l,$(1))
-
-WARNINGS = -Wall -W -Wstrict-prototypes -Wextra -Wcast-align -Wnested-externs -Wshadow
-
-CFLAGS  += -mips32r2 -mno-mips16 -std=gnu99 -O2 -g $(WARNINGS) -DENABLE_ASSERTIONS -DMIPSr1_ASM -DOPUS_BUILD -mdspr2 -march=74kc -mtune=74kc -mmt -mgp32
-
-CINCLUDES = include silk celt
-
-ifdef FIXED_POINT
-CFLAGS += -DFIXED_POINT=1 -DDISABLE_FLOAT_API
-CINCLUDES += silk/fixed
-else
-CINCLUDES += silk/float
-endif
-
-
-LIBS = m
-
-LDLIBDIRS = ./
-
-CFLAGS  += $(call cppflags-from-defines,$(CDEFINES))
-CFLAGS  += $(call cppflags-from-includes,$(CINCLUDES))
-LDFLAGS += $(call ldflags-from-ldlibdirs,$(LDLIBDIRS))
-LDLIBS  += $(call ldlibs-from-libs,$(LIBS))
-
-COMPILE.c.cmdline   = $(CC) -c $(CFLAGS) -o $@ $<
-LINK.o              = $(CC) $(LDPREFLAGS) $(LDFLAGS)
-LINK.o.cmdline      = $(LINK.o) $^ $(LDLIBS) -o $@$(EXESUFFIX)
-
-ARCHIVE.cmdline     = $(AR) $(ARFLAGS) $@ $^ && $(RANLIB) $@
-
-%$(OBJSUFFIX):%.c
-	$(COMPILE.c.cmdline)
-
-%$(OBJSUFFIX):%.cpp
-	$(COMPILE.cpp.cmdline)
-
-# Directives
-
-
-# Variable definitions
-LIB_NAME = opus
-TARGET = $(LIBPREFIX)$(LIB_NAME)$(LIBSUFFIX)
-
-SRCS_C = $(SILK_SOURCES) $(CELT_SOURCES) $(OPUS_SOURCES)
-
-OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(SRCS_C))
-
-OPUSDEMO_SRCS_C = src/opus_demo.c
-OPUSDEMO_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSDEMO_SRCS_C))
-
-TESTOPUSAPI_SRCS_C = tests/test_opus_api.c
-TESTOPUSAPI_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSAPI_SRCS_C))
-
-TESTOPUSDECODE_SRCS_C = tests/test_opus_decode.c
-TESTOPUSDECODE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSDECODE_SRCS_C))
-
-TESTOPUSENCODE_SRCS_C = tests/test_opus_encode.c tests/opus_encode_regressions.c
-TESTOPUSENCODE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSENCODE_SRCS_C))
-
-TESTOPUSEXTENSIONS_SRCS_C = tests/test_opus_extensions.c
-TESTOPUSEXTENSIONS_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSEXTENSIONS_SRCS_C))
-
-TESTOPUSPADDING_SRCS_C = tests/test_opus_padding.c
-TESTOPUSPADDING_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(TESTOPUSPADDING_SRCS_C))
-
-OPUSCOMPARE_SRCS_C = src/opus_compare.c
-OPUSCOMPARE_OBJS := $(patsubst %.c,%$(OBJSUFFIX),$(OPUSCOMPARE_SRCS_C))
-
-TESTS := test_opus_api test_opus_decode test_opus_encode test_opus_extensions test_opus_padding
-
-# Rules
-all: lib opus_demo opus_compare $(TESTS)
-
-lib: $(TARGET)
-
-check: all
-	for test in $(TESTS); do ./$$test; done
-
-$(TARGET): $(OBJS)
-	$(ARCHIVE.cmdline)
-
-opus_demo$(EXESUFFIX): $(OPUSDEMO_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-test_opus_api$(EXESUFFIX): $(TESTOPUSAPI_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-test_opus_decode$(EXESUFFIX): $(TESTOPUSDECODE_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-test_opus_encode$(EXESUFFIX): $(TESTOPUSENCODE_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-test_opus_extensions$(EXESUFFIX): $(TESTOPUSEXTENSIONS_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-test_opus_padding$(EXESUFFIX): $(TESTOPUSPADDING_OBJS) $(TARGET)
-	$(LINK.o.cmdline)
-
-opus_compare$(EXESUFFIX): $(OPUSCOMPARE_OBJS)
-	$(LINK.o.cmdline)
-
-celt/celt.o: CFLAGS += -DPACKAGE_VERSION='$(PACKAGE_VERSION)'
-celt/celt.o: package_version
-
-package_version: force
-	@if [ -x ./update_version ]; then \
-		./update_version || true; \
-	elif [ ! -e ./package_version ]; then \
-		echo 'PACKAGE_VERSION="unknown"' > ./package_version; \
-	fi
-
-force:
-
-clean:
-	rm -f opus_demo$(EXESUFFIX) opus_compare$(EXESUFFIX) $(TARGET) \
-                test_opus_api$(EXESUFFIX) test_opus_decode$(EXESUFFIX) \
-                test_opus_encode$(EXESUFFIX) test_opus_extensions$(EXESUFFIX) \
-                test_opus_padding$(EXESUFFIX) \
-		$(OBJS) $(OPUSDEMO_OBJS) $(OPUSCOMPARE_OBJS) $(TESTOPUSAPI_OBJS) \
-                $(TESTOPUSDECODE_OBJS) $(TESTOPUSENCODE_OBJS) \
-                $(TESTOPUSEXTENSIONS_OBJS) $(TESTOPUSPADDING_OBJS)
-
-.PHONY: all lib clean force check
--- a/celt/_kiss_fft_guts.h
+++ b/celt/_kiss_fft_guts.h
@@ -102,7 +102,7 @@
 #if defined(OPUS_ARM_INLINE_EDSP)
 #include "arm/kiss_fft_armv5e.h"
 #endif
-#if defined(MIPSr1_ASM)
+#if defined(__mips_dsp)
 #include "mips/kiss_fft_mipsr1.h"
 #endif
 
--- a/celt/celt.c
+++ b/celt/celt.c
@@ -54,7 +54,7 @@
 #define PACKAGE_VERSION "unknown"
 #endif
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/celt_mipsr1.h"
 #endif
 
--- a/celt/fixed_generic.h
+++ b/celt/fixed_generic.h
@@ -200,7 +200,7 @@
 /** Divide a 32-bit value by a 32-bit value. Result fits in 32 bits */
 #define DIV32(a,b) (((opus_val32)(a))/((opus_val32)(b)))
 
-#if defined(MIPSr1_ASM)
+#if defined(__mips_dsp)
 #include "mips/fixed_generic_mipsr1.h"
 #endif
 
--- a/celt/mdct.c
+++ b/celt/mdct.c
@@ -53,7 +53,7 @@
 #include "mathops.h"
 #include "stack_alloc.h"
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/mdct_mipsr1.h"
 #endif
 
--- a/celt/pitch.h
+++ b/celt/pitch.h
@@ -42,7 +42,7 @@
 #include "x86/pitch_sse.h"
 #endif
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/pitch_mipsr1.h"
 #endif
 
--- a/celt/vq.c
+++ b/celt/vq.c
@@ -39,7 +39,7 @@
 #include "rate.h"
 #include "pitch.h"
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/vq_mipsr1.h"
 #endif
 
--- a/silk/NSQ_del_dec.c
+++ b/silk/NSQ_del_dec.c
@@ -61,7 +61,7 @@
 
 typedef NSQ_sample_struct  NSQ_sample_pair[ 2 ];
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/NSQ_del_dec_mipsr1.h"
 #endif
 static OPUS_INLINE void silk_nsq_del_dec_scale_states(
--- a/silk/SigProc_FIX.h
+++ b/silk/SigProc_FIX.h
@@ -631,7 +631,7 @@
 #include "arm/SigProc_FIX_armv5e.h"
 #endif
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/sigproc_fix_mipsr1.h"
 #endif
 
--- a/silk/fixed/noise_shape_analysis_FIX.c
+++ b/silk/fixed/noise_shape_analysis_FIX.c
@@ -128,8 +128,8 @@
     silk_assert( 0 );
 }
 
-/* Disable MIPS version until it's updated. */
-#if 0 && defined(MIPSr1_ASM)
+/* Disable MIPS DSP version until it's updated. */
+#if 0 && defined(__mips_dsp)
 #include "mips/noise_shape_analysis_FIX_mipsr1.h"
 #endif
 
--- a/silk/fixed/warped_autocorrelation_FIX.c
+++ b/silk/fixed/warped_autocorrelation_FIX.c
@@ -31,7 +31,7 @@
 
 #include "main_FIX.h"
 
-#if defined(MIPSr1_ASM)
+#if defined(__mips_dsp)
 #include "mips/warped_autocorrelation_FIX_mipsr1.h"
 #endif
 
--- a/silk/macros.h
+++ b/silk/macros.h
@@ -104,7 +104,7 @@
                                         (( (a) & ((b)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a)-(b)) :    \
                                         ((((a)^0x80000000) & (b)  & 0x80000000) ? silk_int32_MAX : (a)-(b)) )
 
-#if defined(MIPSr1_ASM)
+#if defined(FIXED_POINT) && defined(__mips_dsp)
 #include "mips/macros_mipsr1.h"
 #endif
 
--