xref: /aosp_15_r20/external/libopus/Makefile.am (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1# Provide the full test output for failed tests when using the parallel
2# test suite (which is enabled by default with automake 1.13+).
3export VERBOSE = yes
4
5AUTOMAKE_OPTIONS = subdir-objects
6ACLOCAL_AMFLAGS = -I m4
7
8lib_LTLIBRARIES = libopus.la
9
10DIST_SUBDIRS = doc
11
12AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/celt -I$(top_srcdir)/silk \
13              -I$(top_srcdir)/silk/float -I$(top_srcdir)/silk/fixed $(NE10_CFLAGS) \
14              -I$(top_srcdir)/dnn
15
16include celt_sources.mk
17include lpcnet_sources.mk
18include silk_sources.mk
19include opus_sources.mk
20
21LPCNET_SOURCES =
22if ENABLE_DEEP_PLC
23LPCNET_SOURCES += $(DEEP_PLC_SOURCES)
24endif
25if ENABLE_DRED
26LPCNET_SOURCES += $(DRED_SOURCES)
27endif
28if ENABLE_OSCE
29LPCNET_SOURCES += $(OSCE_SOURCES)
30endif
31
32if FIXED_POINT
33SILK_SOURCES += $(SILK_SOURCES_FIXED)
34if HAVE_SSE4_1
35SILK_SOURCES += $(SILK_SOURCES_SSE4_1) $(SILK_SOURCES_FIXED_SSE4_1)
36endif
37if HAVE_ARM_NEON_INTR
38SILK_SOURCES += $(SILK_SOURCES_FIXED_ARM_NEON_INTR)
39endif
40else
41SILK_SOURCES += $(SILK_SOURCES_FLOAT)
42if HAVE_SSE4_1
43SILK_SOURCES += $(SILK_SOURCES_SSE4_1)
44endif
45if HAVE_AVX2
46SILK_SOURCES += $(SILK_SOURCES_FLOAT_AVX2)
47endif
48endif
49
50if DISABLE_FLOAT_API
51else
52OPUS_SOURCES += $(OPUS_SOURCES_FLOAT)
53endif
54
55if CPU_X86
56if HAVE_RTCD
57CELT_SOURCES += $(CELT_SOURCES_X86_RTCD)
58SILK_SOURCES += $(SILK_SOURCES_X86_RTCD)
59if ENABLE_DEEP_PLC
60LPCNET_SOURCES += $(DNN_SOURCES_X86_RTCD)
61endif
62endif
63if HAVE_SSE
64CELT_SOURCES += $(CELT_SOURCES_SSE)
65endif
66if HAVE_SSE2
67CELT_SOURCES += $(CELT_SOURCES_SSE2)
68if ENABLE_DEEP_PLC
69LPCNET_SOURCES += $(DNN_SOURCES_SSE2)
70endif
71endif
72if HAVE_SSE4_1
73CELT_SOURCES += $(CELT_SOURCES_SSE4_1)
74if ENABLE_DEEP_PLC
75LPCNET_SOURCES += $(DNN_SOURCES_SSE4_1)
76endif
77endif
78if HAVE_AVX2
79SILK_SOURCES += $(SILK_SOURCES_AVX2)
80CELT_SOURCES += $(CELT_SOURCES_AVX2)
81if ENABLE_DEEP_PLC
82LPCNET_SOURCES += $(DNN_SOURCES_AVX2)
83endif
84endif
85endif
86
87if CPU_ARM
88if HAVE_RTCD
89CELT_SOURCES += $(CELT_SOURCES_ARM_RTCD)
90SILK_SOURCES += $(SILK_SOURCES_ARM_RTCD)
91if ENABLE_DEEP_PLC
92LPCNET_SOURCES += $(DNN_SOURCES_ARM_RTCD)
93endif
94endif
95
96if ENABLE_DEEP_PLC
97if HAVE_ARM_DOTPROD
98LPCNET_SOURCES += $(DNN_SOURCES_DOTPROD)
99endif
100if HAVE_ARM_NEON_INTR
101LPCNET_SOURCES += $(DNN_SOURCES_NEON)
102endif
103endif
104
105if HAVE_ARM_NEON_INTR
106CELT_SOURCES += $(CELT_SOURCES_ARM_NEON_INTR)
107SILK_SOURCES += $(SILK_SOURCES_ARM_NEON_INTR)
108endif
109
110if HAVE_ARM_NE10
111CELT_SOURCES += $(CELT_SOURCES_ARM_NE10)
112endif
113
114if OPUS_ARM_EXTERNAL_ASM
115noinst_LTLIBRARIES = libarmasm.la
116libarmasm_la_SOURCES = $(CELT_SOURCES_ARM_ASM:.s=-gnu.S)
117BUILT_SOURCES = $(CELT_SOURCES_ARM_ASM:.s=-gnu.S) \
118 $(CELT_AM_SOURCES_ARM_ASM:.s.in=.s) \
119 $(CELT_AM_SOURCES_ARM_ASM:.s.in=-gnu.S)
120endif
121endif
122
123CLEANFILES = $(CELT_SOURCES_ARM_ASM:.s=-gnu.S) \
124 $(CELT_AM_SOURCES_ARM_ASM:.s.in=-gnu.S)
125
126include celt_headers.mk
127include lpcnet_headers.mk
128include silk_headers.mk
129include opus_headers.mk
130
131LPCNET_HEAD =
132if ENABLE_DEEP_PLC
133LPCNET_HEAD += $(DEEP_PLC_HEAD)
134endif
135if ENABLE_DRED
136LPCNET_HEAD += $(DRED_HEAD)
137endif
138if ENABLE_OSCE
139LPCNET_HEAD += $(OSCE_HEAD)
140endif
141if ENABLE_LOSSGEN
142LPCNET_HEAD += $(LOSSGEN_HEAD)
143endif
144
145libopus_la_SOURCES = $(CELT_SOURCES) $(SILK_SOURCES) $(LPCNET_SOURCES) $(OPUS_SOURCES)
146libopus_la_LDFLAGS = -no-undefined -version-info @OPUS_LT_CURRENT@:@OPUS_LT_REVISION@:@OPUS_LT_AGE@
147libopus_la_LIBADD = $(NE10_LIBS) $(LIBM)
148if OPUS_ARM_EXTERNAL_ASM
149libopus_la_LIBADD += libarmasm.la
150endif
151
152pkginclude_HEADERS = include/opus.h include/opus_multistream.h include/opus_types.h include/opus_defines.h include/opus_projection.h
153
154noinst_HEADERS = $(OPUS_HEAD) $(SILK_HEAD) $(CELT_HEAD) $(LPCNET_HEAD)
155
156if EXTRA_PROGRAMS
157noinst_PROGRAMS = celt/tests/test_unit_cwrs32 \
158                  celt/tests/test_unit_dft \
159                  celt/tests/test_unit_entropy \
160                  celt/tests/test_unit_laplace \
161                  celt/tests/test_unit_mathops \
162                  celt/tests/test_unit_mdct \
163                  celt/tests/test_unit_rotation \
164                  celt/tests/test_unit_types \
165                  opus_compare \
166                  opus_demo \
167                  repacketizer_demo \
168                  silk/tests/test_unit_LPC_inv_pred_gain \
169                  tests/test_opus_api \
170                  tests/test_opus_decode \
171                  tests/test_opus_dred \
172                  tests/test_opus_encode \
173                  tests/test_opus_extensions \
174                  tests/test_opus_padding \
175                  tests/test_opus_projection \
176                  trivial_example
177
178TESTS = celt/tests/test_unit_cwrs32 \
179        celt/tests/test_unit_dft \
180        celt/tests/test_unit_entropy \
181        celt/tests/test_unit_laplace \
182        celt/tests/test_unit_mathops \
183        celt/tests/test_unit_mdct \
184        celt/tests/test_unit_rotation \
185        celt/tests/test_unit_types \
186        silk/tests/test_unit_LPC_inv_pred_gain \
187        tests/test_opus_api \
188        tests/test_opus_decode \
189        tests/test_opus_encode \
190        tests/test_opus_extensions \
191        tests/test_opus_padding \
192        tests/test_opus_projection
193
194opus_demo_SOURCES = src/opus_demo.c
195if ENABLE_LOSSGEN
196opus_demo_SOURCES += $(LOSSGEN_SOURCES)
197endif
198
199opus_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
200
201repacketizer_demo_SOURCES = src/repacketizer_demo.c
202
203repacketizer_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
204
205opus_compare_SOURCES = src/opus_compare.c
206opus_compare_LDADD = $(LIBM)
207
208trivial_example_SOURCES = doc/trivial_example.c
209trivial_example_LDADD = libopus.la $(LIBM)
210
211tests_test_opus_api_SOURCES = tests/test_opus_api.c tests/test_opus_common.h
212tests_test_opus_api_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
213
214tests_test_opus_encode_SOURCES = tests/test_opus_encode.c tests/opus_encode_regressions.c tests/test_opus_common.h
215tests_test_opus_encode_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
216
217tests_test_opus_decode_SOURCES = tests/test_opus_decode.c tests/test_opus_common.h
218tests_test_opus_decode_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
219
220tests_test_opus_padding_SOURCES = tests/test_opus_padding.c tests/test_opus_common.h
221tests_test_opus_padding_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
222
223tests_test_opus_dred_SOURCES = tests/test_opus_dred.c tests/test_opus_common.h
224tests_test_opus_dred_LDADD = libopus.la $(NE10_LIBS) $(LIBM)
225
226CELT_OBJ = $(CELT_SOURCES:.c=.lo)
227SILK_OBJ = $(SILK_SOURCES:.c=.lo)
228LPCNET_OBJ = $(LPCNET_SOURCES:.c=.lo)
229OPUS_OBJ = $(OPUS_SOURCES:.c=.lo)
230
231tests_test_opus_extensions_SOURCES = tests/test_opus_extensions.c tests/test_opus_common.h
232tests_test_opus_extensions_LDADD = $(OPUS_OBJ) $(SILK_OBJ) $(LPCNET_OBJ) $(CELT_OBJ) $(NE10_LIBS) $(LIBM)
233if OPUS_ARM_EXTERNAL_ASM
234tests_test_opus_extensions_LDADD += libarmasm.la
235endif
236
237tests_test_opus_projection_SOURCES = tests/test_opus_projection.c tests/test_opus_common.h
238tests_test_opus_projection_LDADD = $(OPUS_OBJ) $(SILK_OBJ) $(LPCNET_OBJ) $(CELT_OBJ) $(NE10_LIBS) $(LIBM)
239if OPUS_ARM_EXTERNAL_ASM
240tests_test_opus_projection_LDADD += libarmasm.la
241endif
242
243silk_tests_test_unit_LPC_inv_pred_gain_SOURCES = silk/tests/test_unit_LPC_inv_pred_gain.c
244silk_tests_test_unit_LPC_inv_pred_gain_LDADD = $(SILK_OBJ) $(LPCNET_OBJ) $(CELT_OBJ) $(NE10_LIBS) $(LIBM)
245if OPUS_ARM_EXTERNAL_ASM
246silk_tests_test_unit_LPC_inv_pred_gain_LDADD += libarmasm.la
247endif
248
249celt_tests_test_unit_cwrs32_SOURCES = celt/tests/test_unit_cwrs32.c
250celt_tests_test_unit_cwrs32_LDADD = $(LIBM)
251
252celt_tests_test_unit_dft_SOURCES = celt/tests/test_unit_dft.c
253celt_tests_test_unit_dft_LDADD = $(CELT_OBJ) $(LPCNET_OBJ) $(NE10_LIBS) $(LIBM)
254if OPUS_ARM_EXTERNAL_ASM
255celt_tests_test_unit_dft_LDADD += libarmasm.la
256endif
257
258celt_tests_test_unit_entropy_SOURCES = celt/tests/test_unit_entropy.c
259celt_tests_test_unit_entropy_LDADD = $(LIBM)
260
261celt_tests_test_unit_laplace_SOURCES = celt/tests/test_unit_laplace.c
262celt_tests_test_unit_laplace_LDADD = $(LIBM)
263
264celt_tests_test_unit_mathops_SOURCES = celt/tests/test_unit_mathops.c
265celt_tests_test_unit_mathops_LDADD = $(CELT_OBJ) $(LPCNET_OBJ) $(NE10_LIBS) $(LIBM)
266if OPUS_ARM_EXTERNAL_ASM
267celt_tests_test_unit_mathops_LDADD += libarmasm.la
268endif
269
270celt_tests_test_unit_mdct_SOURCES = celt/tests/test_unit_mdct.c
271celt_tests_test_unit_mdct_LDADD = $(CELT_OBJ) $(LPCNET_OBJ) $(NE10_LIBS) $(LIBM)
272if OPUS_ARM_EXTERNAL_ASM
273celt_tests_test_unit_mdct_LDADD += libarmasm.la
274endif
275
276celt_tests_test_unit_rotation_SOURCES = celt/tests/test_unit_rotation.c
277celt_tests_test_unit_rotation_LDADD = $(CELT_OBJ) $(LPCNET_OBJ) $(NE10_LIBS) $(LIBM)
278if OPUS_ARM_EXTERNAL_ASM
279celt_tests_test_unit_rotation_LDADD += libarmasm.la
280endif
281
282celt_tests_test_unit_types_SOURCES = celt/tests/test_unit_types.c
283celt_tests_test_unit_types_LDADD = $(LIBM)
284endif
285
286if CUSTOM_MODES
287pkginclude_HEADERS += include/opus_custom.h
288if EXTRA_PROGRAMS
289noinst_PROGRAMS += opus_custom_demo
290opus_custom_demo_SOURCES = celt/opus_custom_demo.c
291opus_custom_demo_LDADD = libopus.la $(LIBM)
292endif
293endif
294
295if EXTRA_PROGRAMS
296if ENABLE_DEEP_PLC
297noinst_PROGRAMS += lpcnet_demo dump_data dump_weights_blob
298lpcnet_demo_SOURCES = dnn/lpcnet_demo.c
299lpcnet_demo_LDADD = $(LPCNET_OBJ) $(CELT_OBJ) $(LIBM)
300
301dump_data_SOURCES = dnn/dump_data.c
302dump_data_LDADD = $(LPCNET_OBJ) $(CELT_OBJ) $(LIBM)
303
304dump_weights_blob_SOURCES = dnn/write_lpcnet_weights.c
305dump_weights_blob_LDADD = $(LIBM)
306dump_weights_blob_CFLAGS = $(AM_CFLAGS) -DDUMP_BINARY_WEIGHTS
307endif
308if ENABLE_DRED
309TESTS += tests/test_opus_dred
310endif
311
312if ENABLE_LOSSGEN
313noinst_PROGRAMS += lossgen_demo
314lossgen_demo_SOURCES = dnn/lossgen_demo.c $(LOSSGEN_SOURCES)
315lossgen_demo_LDADD = $(LIBM)
316endif
317
318endif
319
320
321EXTRA_DIST = opus.pc.in \
322             opus-uninstalled.pc.in \
323             opus.m4 \
324             Makefile.mips \
325             Makefile.unix \
326             CMakeLists.txt \
327             cmake/CFeatureCheck.cmake \
328             cmake/OpusBuildtype.cmake \
329             cmake/OpusConfig.cmake \
330             cmake/OpusConfig.cmake.in \
331             cmake/OpusFunctions.cmake \
332             cmake/OpusPackageVersion.cmake \
333             cmake/OpusSources.cmake \
334             cmake/RunTest.cmake \
335             cmake/config.h.cmake.in \
336             cmake/vla.c \
337             cmake/cpu_info_by_asm.c \
338             cmake/cpu_info_by_c.c \
339             meson/get-version.py \
340             meson/read-sources-list.py \
341             meson.build \
342             meson_options.txt \
343             include/meson.build \
344             celt/meson.build \
345             celt/tests/meson.build \
346             silk/meson.build \
347             silk/tests/meson.build \
348             src/meson.build \
349             tests/meson.build \
350             doc/meson.build \
351             tests/run_vectors.sh \
352             celt/arm/arm2gnu.pl \
353             celt/arm/celt_pitch_xcorr_arm.s
354
355pkgconfigdir = $(libdir)/pkgconfig
356pkgconfig_DATA = opus.pc
357
358m4datadir = $(datadir)/aclocal
359m4data_DATA = opus.m4
360
361# Targets to build and install just the library without the docs
362opus check-opus install-opus: export NO_DOXYGEN = 1
363
364opus: all
365check-opus: check
366install-opus: install
367
368
369# Or just the docs
370docs:
371	( cd doc && $(MAKE) $(AM_MAKEFLAGS) )
372
373install-docs:
374	( cd doc && $(MAKE) $(AM_MAKEFLAGS) install )
375
376
377# Or everything (by default)
378all-local:
379	@[ -n "$(NO_DOXYGEN)" ] || ( cd doc && $(MAKE) $(AM_MAKEFLAGS) )
380
381install-data-local:
382	@[ -n "$(NO_DOXYGEN)" ] || ( cd doc && $(MAKE) $(AM_MAKEFLAGS) install )
383
384clean-local:
385	-( cd doc && $(MAKE) $(AM_MAKEFLAGS) clean )
386
387uninstall-local:
388	( cd doc && $(MAKE) $(AM_MAKEFLAGS) uninstall )
389
390
391# We check this every time make is run, with configure.ac being touched to
392# trigger an update of the build system files if update_version changes the
393# current PACKAGE_VERSION (or if package_version was modified manually by a
394# user with either AUTO_UPDATE=no or no update_version script present - the
395# latter being the normal case for tarball releases).
396#
397# We can't just add the package_version file to CONFIGURE_DEPENDENCIES since
398# simply running autoconf will not actually regenerate configure for us when
399# the content of that file changes (due to autoconf dependency checking not
400# knowing about that without us creating yet another file for it to include).
401#
402# The MAKECMDGOALS check is a gnu-make'ism, but will degrade 'gracefully' for
403# makes that don't support it.  The only loss of functionality is not forcing
404# an update of package_version for `make dist` if AUTO_UPDATE=no, but that is
405# unlikely to be a real problem for any real user.
406$(top_srcdir)/configure.ac: force
407	@case "$(MAKECMDGOALS)" in \
408	    dist-hook)                             exit 0       ;; \
409	    dist-* | dist | distcheck | distclean) _arg=release ;; \
410	esac; \
411	if ! $(top_srcdir)/update_version $$_arg 2> /dev/null; then \
412	    if [ ! -e $(top_srcdir)/package_version ]; then \
413		echo 'PACKAGE_VERSION="unknown"' > $(top_srcdir)/package_version; \
414	    fi; \
415	    . $(top_srcdir)/package_version || exit 1; \
416	    [ "$(PACKAGE_VERSION)" != "$$PACKAGE_VERSION" ] || exit 0; \
417	fi; \
418	touch $@
419
420force:
421
422# Create a minimal package_version file when make dist is run.
423dist-hook:
424	echo 'PACKAGE_VERSION="$(PACKAGE_VERSION)"' > $(top_distdir)/package_version
425
426
427.PHONY: opus check-opus install-opus docs install-docs
428
429# automake doesn't do dependency tracking for asm files, that I can tell
430$(CELT_SOURCES_ARM_ASM:%.s=%-gnu.S): celt/arm/armopts-gnu.S
431$(CELT_SOURCES_ARM_ASM:%.s=%-gnu.S): $(top_srcdir)/celt/arm/arm2gnu.pl
432
433# convert ARM asm to GNU as format
434%-gnu.S: $(top_srcdir)/%.s
435	$(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@
436# For autoconf-modified sources (e.g., armopts.s)
437%-gnu.S: %.s
438	$(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@
439
440OPT_UNIT_TEST_OBJ = $(celt_tests_test_unit_mathops_SOURCES:.c=.o) \
441                    $(celt_tests_test_unit_rotation_SOURCES:.c=.o) \
442                    $(celt_tests_test_unit_mdct_SOURCES:.c=.o) \
443                    $(celt_tests_test_unit_dft_SOURCES:.c=.o) \
444                    $(silk_tests_test_unit_LPC_inv_pred_gain_SOURCES:.c=.o)
445
446if HAVE_SSE
447SSE_OBJ = $(CELT_SOURCES_SSE:.c=.lo)
448$(SSE_OBJ): CFLAGS += $(OPUS_X86_SSE_CFLAGS)
449endif
450
451if HAVE_SSE2
452SSE2_OBJ = $(CELT_SOURCES_SSE2:.c=.lo) \
453           $(DNN_SOURCES_SSE2:.c=.lo)
454$(SSE2_OBJ): CFLAGS += $(OPUS_X86_SSE2_CFLAGS)
455endif
456
457if HAVE_SSE4_1
458SSE4_1_OBJ = $(CELT_SOURCES_SSE4_1:.c=.lo) \
459             $(DNN_SOURCES_SSE4_1:.c=.lo) \
460             $(SILK_SOURCES_SSE4_1:.c=.lo) \
461             $(SILK_SOURCES_FIXED_SSE4_1:.c=.lo)
462$(SSE4_1_OBJ): CFLAGS += $(OPUS_X86_SSE4_1_CFLAGS)
463endif
464
465if HAVE_AVX2
466AVX2_OBJ = $(CELT_SOURCES_AVX2:.c=.lo) \
467           $(SILK_SOURCES_AVX2:.c=.lo) \
468           $(SILK_SOURCES_FLOAT_AVX2:.c=.lo) \
469           $(DNN_SOURCES_AVX2:.c=.lo)
470$(AVX2_OBJ): CFLAGS += $(OPUS_X86_AVX2_CFLAGS)
471endif
472
473if HAVE_ARM_NEON_INTR
474ARM_NEON_INTR_OBJ = $(CELT_SOURCES_ARM_NEON_INTR:.c=.lo) \
475                    $(SILK_SOURCES_ARM_NEON_INTR:.c=.lo) \
476                    $(DNN_SOURCES_NEON:.c=.lo) \
477                    $(SILK_SOURCES_FIXED_ARM_NEON_INTR:.c=.lo)
478$(ARM_NEON_INTR_OBJ): CFLAGS += \
479 $(OPUS_ARM_NEON_INTR_CFLAGS)  $(NE10_CFLAGS)
480endif
481
482if HAVE_ARM_DOTPROD
483ARM_DOTPROD_OBJ = $(DNN_SOURCES_DOTPROD:.c=.lo)
484$(ARM_DOTPROD_OBJ): CFLAGS += $(ARM_DOTPROD_INTR_CFLAGS)
485endif
486