Commit graph

86 commits

Author SHA1 Message Date
Ron
4a7bb1fe9b Drop the stdint size tests that we never use anywhere
These were probably cribbed from libogg, but we don't use them here,
opus_types.h instead has a list of hardcoded arch definitions.
2013-06-09 00:57:02 +09:30
Aurélien Zanelli
cd4c8249bc Add run-time CPU detection and support for ARM architecture
Run-time CPU detection (RTCD) is enabled by default if target platform support
it.
It can be disable at compile time with --disable-rtcd option.

Add RTCD support for ARM architecture.

Thanks to Timothy B. Terriberry for help and code review

Signed-off-by: Timothy B. Terriberry <tterribe@xiph.org>
2013-06-04 16:23:22 -07:00
Aurélien Zanelli
faec6736cb Add an option to disable build of extra programs (demos and tests) 2013-05-26 14:01:11 -07:00
Timothy B. Terriberry
33511f74bf Minor configure adjustment.
Define ARMv4_ASM to 1 like the other ARM defines.
2013-05-22 16:15:30 -07:00
Ron
50b395bff6 Add support for autoconf macros in m4/
Needed by commit 972a34ec2c.

Use autoreconf in autogen.sh instead of the handwritten version,
it's simpler, and also updates things that we weren't handling.

Drop the hand-written INSTALL file.  Its information content was
~zero, and autotools wants to overwrite it with its own version,
so don't fight that, just .gitignore it.
2013-05-20 12:31:48 +09:30
Timothy B. Terriberry
972a34ec2c Add ARMv4/ARMv5E macros.
Original patch by Aurélien Zanelli <aurelien.zanelli@parrot.com>:
 http://lists.xiph.org/pipermail/opus/2013-May/002078.html

Revised version:
- Add autconf detection (ported from libtheora).
- Rename ARM5E to ARMv5E (an ARM5 is not the same thing as ARMv5!).
- Use actual macros so they can still be selectively overridden.
- Split out ARMv4 parts and add a few more ARMv4 macros.
- Label blocks to make them easy to find in generated assembly.
- Fix MULT16_32_Q15() so we can pass make check.
  The MDCT test passes in values larger than 2**30 for b.
  The new version should be just as fast (or faster, since it's
   easier to merge the shift with following instructions), and
   there's no appreciable impact on accuracy (FFT/MDCT SNR actually
   goes up in most cases).
- Fix register constraints.
  We were using early-clobber flags in a bunch of places that
   didn't need them, and commutative-pair flags in a bunch of
   places that weren't actually commutative.
  This was Jean-Marc's fault (the original code came from Speex).
- Simplify silk_CLZ16().
- Port over iFFT C_MULC asm by Andree Buschmann
   <AndreeBuschmann@t-online.de> from Rockbox.
- Speed up the C_MULC asm by using LDRD, allowing more flexible
   addressing, re-ordering instructions to avoid some stalls,
   allowing more flexible register allocation, and getting things
   out of the inline asm block so the compiler can schedule them
   better.
- Add C_MUL and C_MUL4 asm for the FFT to the encoder based, on the
   new C_MULC.

In total, this patch gives a 22.3% speed-up on test_opus_encoder on
 a 600 MHz Cortex A8 using gcc 4.2.1,
When restricted to ARMv4 optimizations, it gives a 9.6% speed-up
 on the same processor/compiler.
On the conformance test vectors:
 Average mono quality is 97.0583 %
 Average stereo quality is 97.775 %
2013-05-19 19:12:51 -07:00
Ron
918acd1564 Use m4_esyscmd instead of m4_esyscmd_s
We shouldn't ever have any trailing newlines that need trimming here,
and the _s version wasn't added to m4sugar.m4 until autoconf 2.63b,
so this will let it work with 2.13 again.
2013-05-18 16:11:18 +09:30
Ron
2f2f9d63b8 Fully automate version updating
This one meets or exceeds the following requirements:

 - Version is checked/updated for every build action when in the git repo.
   Does not require the user to re- ./configure to get the correct version.

 - Version is not updated automatically when using exported tarball source.
   Avoids accidentally getting a wrong version from some other git repo in
   a parent directory of the source, and allows setting the correct version
   for distro package exports.

 - Automatic updating can be manually suppressed.
   For developers doing lots of change/rebuild cycles they don't plan to
   release, when they don't want a full rebuild triggered for every commit,
   and again for every change made immediately after a commit.
   The version will still always be updated if they do a `make dist`.

 - Does not require any manual updating of versions in the mainline git
   repo for each release aside from normal tagging.  The version is
   recorded in one file only, that is automatically generated and will
   never need to be committed.

 - Does not require gnu-make features for the autoconf builds.

It does not currently:

 - Keep a checksum of every source file in tarball releases to mangle the
   version if people modify the tarball source.  Responsible people can
   manually update the version easily though in such cases.

The version.mk file is now only used by the VC project files.  Once they
are updated to use the package_version file too, then it can be deleted
from the repository.
2013-05-11 02:05:24 +09:30
Jean-Marc Valin
80c4834c48 Bump version to match 1.0.x branch 2013-05-09 16:52:26 -04:00
Ralph Giles
99e8a9352b Remove -Wdeclaration-after-statement.
This causes warnings with the ALLOC() macro.
2013-03-12 22:57:00 -07:00
Ralph Giles
42f39c547b Add -Wdeclaration-after-statement.
We keep accidentally adding these which break the -pedantic build,
so complain about it in the normal build.

Also de-duplicate the warning list.
2013-03-11 10:59:13 -07:00
Ralph Giles
ba1bd031c7 Use AC_CONFIG_HEADERS.
This avoids a warning about obsolete AM_CONFIG_HEADERS() on more
recent autoconf. The new macro has been around at least since
autoconf 2.60. So this should be safe.
2013-01-02 15:29:26 -08:00
Ralph Giles
119d53c94d Bump soname version to match the 1.0.x branch.
Library soname versioning is something we normally change
only right before each release. However, with 1.0.2 being
released from the 1.0.x branch with 3.0.3, it makes sense
to make the same update here. That way when we do a new
release from master we can just increment again and have
the version properly reflect ranges relative to the stable
branch.
2012-12-05 15:57:45 -08:00
Ralph Giles
def001bd12 Remove obsolete check for endianness.
We don't ever use the WORDS_BIGENDIAN cpp symbol in our code.
2012-11-29 14:59:23 -08:00
Ralph Giles
14454c49a8 Enable maintainer mode by default on automake 1.11
Passing 'enable' as an argument to AM_MAINTAINER_MODE flips the
default to enabled, rather than disabled until automake 1.11.
This is a safer default for a developer-oriented library.

./configure --disable-maintainer-mode is still available for
packagers who what to preserve the upstream build distribution.

On earlier automake versions, the argument appears to have no
effect, so there is no behaviour change for developers using
older autotools.

Based on a patch for opusfile by ron@debian.org.
2012-11-14 12:42:19 -08:00
Ron
ff16ab098e Just fix opus-uninstalled.pc instead of tweaking the build dir
Doing it this way means it's only the weird corner case that actually
pays for being weird, and we don't litter the build dir with an extra
link that normal builds really don't need at all.

It also avoids the problem of platforms where LN_S isn't well defined.
2012-09-19 10:09:32 -07:00
Ron
c40d5004dd Link the include dir into out-of-tree build dirs
Mostly this is for people building other things using an uninstalled
opus tree so that the opus-uninstalled.pc will return a working -I
with --cflags when PKG_CONFIG_PATH is set to point to the build dir.

The version of AC_OUTPUT that takes parameters has long been
deprecated now, and replaced by AC_CONFIG_* macros, so pass them
with AC_CONFIG_FILES, since we're now using AC_CONFIG_COMMANDS
to do the above.
2012-09-18 16:03:56 -07:00
Ralph Giles
3ef8a16616 Opus custom requires libm unconditionally. 2012-09-17 00:05:00 -07:00
Ralph Giles
d47ddfb472 Add -lm to the pkg-config link line.
The floating-point build calls a number of math library
functions, and linking with libm is technically necessary.
It wasn't obvious because most systems support shlib
dependencies and pulled it in that way, or supply the
referenced functions with intrinsics. Discovered the issue
trying to build libopusfile against the uninstalled static
libopus, which unlike opus-tools, doesn't itself need libm.

The -lm argument is only added to Libs for the floating-
point (default) build. It's not necessary for the fixed-
point build.

Also mark which build was used in the .pc file description.
2012-09-16 23:31:28 -07:00
Ralph Giles
a66642a5e1 Remove FLOATING_POINT from config.h.
This isn't used anywhere in the code, floating point is just the
default unless FIXED_POINT is defined.

In the speex codebase, arch.h has a check that both FIXED_POINT
and FLOATING_POINT aren't defined simultaneously, in part as a
check that the build system was constructed with thought about
these and other defines. However, we don't have such a check
and to me it seems unnecessary code.
2012-09-16 23:19:11 -07:00
Jean-Marc Valin
12190653b2 some doc for --enable-fixed-point and --enable-floating-point 2012-08-31 23:35:12 -04:00
Gregory Maxwell
5ae062a759 Completely remove the built-in autotools -fstatck-protector detection.
On some systems (HPPA+HPUX+GCC) -fstatck-protector was causing failures not
at build or link time but at actual runtime. This is much less reasonable to
detect from autotools. It looks this this really can only safely be a white-
list, and the systems which would be whitelisted often already pick up the
setting from the OS build environment in any case.  It isn't important for
OPUS, we were just using it as belt-and-suspenders security and because it
makes some failure types easier to troubleshoot.
2012-08-29 10:29:24 -04:00
Ralph Giles
11dd5522b4 Clarify a comment.
Further cleanup of the confusion with the version string settings.
2012-08-21 11:22:08 -07:00
Ralph Giles
d60673780e Propagate OPUS_VERSION to config.h.
I'm not sure how this worked before, the the previous version
string fiddling commit ended up not defining OPUS_VERSION in
the autoconf build, so opus_get_version_string() returned
'unknown'.
2012-08-21 10:49:43 -07:00
Ralph Giles
59c5a82e51 Move the release version string to version.mk.
Previously we defined the release version string in configure.ac,
and overrode that with 'git describe --tags' if possible. This
made it difficult for non-autoconf builds to set their version
string correctly.

Instead we create, and check into version control, a file called
version.mk which defines OPUS_VERSION. The configure script reads
that file and uses it as a fallback if the git revision isn't available.

The expectation is that version.mk will be manually updated for
releases, just as the previous configure.ac version was. However,
since this is a simpler format, it is easier for alternate build
systems to use, reducing the number of places which must be updated.

Also removes the OPUS_MINOR_VERSION, etc. defines from config.h.
2012-08-16 12:42:32 -07:00
Jean-Marc Valin
9a35da4659 Bump version number 2012-08-15 17:39:57 -04:00
Gregory Maxwell
8d2e9ade8f Use configure.ac provided soname versioning. 2012-08-10 17:21:28 -04:00
Gregory Maxwell
417679c3e5 Disable stack-protector for mingw32 and remove win32 restrict define. 2012-08-09 08:39:15 -04:00
Jean-Marc Valin
4ee682f52a Bump version number to 1.0.1 and set libtool version 2012-08-08 14:50:27 -04:00
Gregory Maxwell
c329045758 Make stack-protector check use AC_LINK_IFELSE. 2012-07-07 02:29:56 -04:00
Gregory Maxwell
1616230245 Add configure option to disable stack protector. 2012-06-28 20:22:26 -04:00
Gregory Maxwell
de9b437eb2 Add -fixed to the version string & clarify that fixed disables float. 2012-06-11 19:19:55 -04:00
Ralph Giles
9d9bad48ab Remove the obsolete LIBOPUS_SUFFIX define.
As best we recall, this was used to version the
library filename during rapid development. It's
no longer needed now that the bitstream is frozen
and isn't hooked up to anything in the build system.
2012-05-18 12:01:46 -07:00
Ralph Giles
3164fcf6a4 Move the various version defines to be together.
The config.h version defines were declared in the
middle of the math feature testing. This commit moves
it to the top of configure.ac where the other version
number code resides.
2012-05-18 11:47:58 -07:00
Jean-Marc Valin
8858cac6bc Sync with draft -14 2012-05-17 19:45:10 -04:00
Jean-Marc Valin
88ddeee581 version bump 2012-05-15 19:58:28 -04:00
Gregory Maxwell
8ecba1ad26 Make vararray and restrict checks fail GCC 2.95.3's broken implementation. 2012-05-15 16:24:12 -04:00
Gregory Maxwell
6c83b0bd96 Improve portability to BeOS via some configure.ac fixes and cleanups. 2012-05-15 16:24:07 -04:00
Jean-Marc Valin
390c89225d Adds some references, bumps version number 2012-04-24 00:57:04 -04:00
Jean-Marc Valin
17c5966045 Last updates for draft -11
- Draft updates
- Updated code to produce and check test vectors
- Making sure that the test vectors pass at all rates as well as for mono and stereo
2012-02-17 16:18:08 -05:00
Jean-Marc Valin
8ba1a0824a version bump 2011-10-31 19:53:06 -04:00
Jean-Marc Valin
38c6a15092 version number bump 2011-10-31 17:21:55 -04:00
Ralph Giles
c19bc34638 Check for __malloc_hook and define MALLOC_FAIL appropriately.
The glibc 2.14 NEWS file says __malloc_hook will be removed
in the next release, so future-proof our use by checking
for this symbol at configure time and only compiling the
malloc failure tests if it is present.
2011-10-28 10:20:16 -07:00
Gregory Maxwell
9652f81eb9 Test cleanups and renaming.
Build tests in the tests/ directory instead of top, cleanup, rename,
and eliminate recursive make for the celt/ unit tests.
2011-10-27 06:27:13 -04:00
Gregory Maxwell
e53ebd696a Don't use -fstack-protector-all when its not supported, add an autoconf test. 2011-10-21 14:21:53 -04:00
Gregory Maxwell
3d28ee8020 Fix stack corruption with high rate SILK encoding added by the recent CBR changes and enable -fstack-protector-all on gcc autotools builds. 2011-10-21 13:00:21 -04:00
Gregory Maxwell
48069bf9bd Documentation and build script updates. 2011-09-15 11:33:18 -04:00
Jean-Marc Valin
c37499090b renames the libcelt/ directory to celt/ 2011-09-13 18:21:18 -07:00
Ralph Giles
35d4fb78ea Add initial Doxygen support for generating api documentation.
Doxygen is a tool for generating programming documentation
based on comments in header and source files. This commit
adds the necessary configuration file and associated support
in the autotools build.

Right now it doesn't generate much documentation because our
public header files aren't marked up. Warnings are printed
for undocumented members and arguments.
2011-09-07 11:06:23 -07:00
Ralph Giles
858468ee42 Fix the 'distclean' target.
With subdir-objects, both the top-level makefile, and
libcelt/Makefile, which runs celt-specific unit tests,
were sharing libcelt/.deps for generated dependencies.

Each thought it owned the directory, and so would remove
the files it created in that directory, followed by the
directory itself. The second makefile would then fail to
because the files it created weren't there to remove,
blocking a successful 'make distcheck' with in runs
'make distclean' as part of its verification tests.

We can work around the problem by generating the makefile
for the tests in the actual test directory, so it doesn't
share autotools scratch space with the top level makefile.
2011-09-03 16:34:51 -07:00