xref: /aosp_15_r20/external/libvpx/README (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard WorkerWelcome to the WebM VP8/VP9 Codec SDK!
2*fb1b10abSAndroid Build Coastguard Worker
3*fb1b10abSAndroid Build Coastguard WorkerCOMPILING THE APPLICATIONS/LIBRARIES:
4*fb1b10abSAndroid Build Coastguard Worker  The build system used is similar to autotools. Building generally consists of
5*fb1b10abSAndroid Build Coastguard Worker  "configuring" with your desired build options, then using GNU make to build
6*fb1b10abSAndroid Build Coastguard Worker  the application.
7*fb1b10abSAndroid Build Coastguard Worker
8*fb1b10abSAndroid Build Coastguard Worker  1. Prerequisites
9*fb1b10abSAndroid Build Coastguard Worker
10*fb1b10abSAndroid Build Coastguard Worker    * All x86 targets require the Yasm[1] assembler be installed[2].
11*fb1b10abSAndroid Build Coastguard Worker    * All Windows builds require that Cygwin[3] or MSYS2[4] be installed.
12*fb1b10abSAndroid Build Coastguard Worker    * Building the documentation requires Doxygen[5]. If you do not
13*fb1b10abSAndroid Build Coastguard Worker      have this package, the install-docs option will be disabled.
14*fb1b10abSAndroid Build Coastguard Worker    * Downloading the data for the unit tests requires curl[6] and sha1sum.
15*fb1b10abSAndroid Build Coastguard Worker      sha1sum is provided via the GNU coreutils, installed by default on
16*fb1b10abSAndroid Build Coastguard Worker      many *nix platforms, as well as MinGW and Cygwin. If coreutils is not
17*fb1b10abSAndroid Build Coastguard Worker      available, a compatible version of sha1sum can be built from
18*fb1b10abSAndroid Build Coastguard Worker      source[7]. These requirements are optional if not running the unit
19*fb1b10abSAndroid Build Coastguard Worker      tests.
20*fb1b10abSAndroid Build Coastguard Worker
21*fb1b10abSAndroid Build Coastguard Worker    [1]: http://www.tortall.net/projects/yasm
22*fb1b10abSAndroid Build Coastguard Worker    [2]: For Visual Studio the base yasm binary (not vsyasm) should be in the
23*fb1b10abSAndroid Build Coastguard Worker         PATH for Visual Studio. For VS2017 it is sufficient to rename
24*fb1b10abSAndroid Build Coastguard Worker         yasm-<version>-<arch>.exe to yasm.exe and place it in:
25*fb1b10abSAndroid Build Coastguard Worker         Program Files (x86)/Microsoft Visual Studio/2017/<level>/Common7/Tools/
26*fb1b10abSAndroid Build Coastguard Worker    [3]: http://www.cygwin.com
27*fb1b10abSAndroid Build Coastguard Worker    [4]: http://www.msys2.org/
28*fb1b10abSAndroid Build Coastguard Worker    [5]: http://www.doxygen.org
29*fb1b10abSAndroid Build Coastguard Worker    [6]: http://curl.haxx.se
30*fb1b10abSAndroid Build Coastguard Worker    [7]: http://www.microbrew.org/tools/md5sha1sum/
31*fb1b10abSAndroid Build Coastguard Worker
32*fb1b10abSAndroid Build Coastguard Worker  2. Out-of-tree builds
33*fb1b10abSAndroid Build Coastguard Worker  Out of tree builds are a supported method of building the application. For
34*fb1b10abSAndroid Build Coastguard Worker  an out of tree build, the source tree is kept separate from the object
35*fb1b10abSAndroid Build Coastguard Worker  files produced during compilation. For instance:
36*fb1b10abSAndroid Build Coastguard Worker
37*fb1b10abSAndroid Build Coastguard Worker    $ mkdir build
38*fb1b10abSAndroid Build Coastguard Worker    $ cd build
39*fb1b10abSAndroid Build Coastguard Worker    $ ../libvpx/configure <options>
40*fb1b10abSAndroid Build Coastguard Worker    $ make
41*fb1b10abSAndroid Build Coastguard Worker
42*fb1b10abSAndroid Build Coastguard Worker  3. Configuration options
43*fb1b10abSAndroid Build Coastguard Worker  The 'configure' script supports a number of options. The --help option can be
44*fb1b10abSAndroid Build Coastguard Worker  used to get a list of supported options:
45*fb1b10abSAndroid Build Coastguard Worker    $ ../libvpx/configure --help
46*fb1b10abSAndroid Build Coastguard Worker
47*fb1b10abSAndroid Build Coastguard Worker  4. Compiler analyzers
48*fb1b10abSAndroid Build Coastguard Worker  Compilers have added sanitizers which instrument binaries with information
49*fb1b10abSAndroid Build Coastguard Worker  about address calculation, memory usage, threading, undefined behavior, and
50*fb1b10abSAndroid Build Coastguard Worker  other common errors. To simplify building libvpx with some of these features
51*fb1b10abSAndroid Build Coastguard Worker  use tools/set_analyzer_env.sh before running configure. It will set the
52*fb1b10abSAndroid Build Coastguard Worker  compiler and necessary flags for building as well as environment variables
53*fb1b10abSAndroid Build Coastguard Worker  read by the analyzer when testing the binaries.
54*fb1b10abSAndroid Build Coastguard Worker    $ source ../libvpx/tools/set_analyzer_env.sh address
55*fb1b10abSAndroid Build Coastguard Worker
56*fb1b10abSAndroid Build Coastguard Worker  5. Cross development
57*fb1b10abSAndroid Build Coastguard Worker  For cross development, the most notable option is the --target option. The
58*fb1b10abSAndroid Build Coastguard Worker  most up-to-date list of supported targets can be found at the bottom of the
59*fb1b10abSAndroid Build Coastguard Worker  --help output of the configure script. As of this writing, the list of
60*fb1b10abSAndroid Build Coastguard Worker  available targets is:
61*fb1b10abSAndroid Build Coastguard Worker
62*fb1b10abSAndroid Build Coastguard Worker    arm64-android-gcc
63*fb1b10abSAndroid Build Coastguard Worker    arm64-darwin-gcc
64*fb1b10abSAndroid Build Coastguard Worker    arm64-darwin20-gcc
65*fb1b10abSAndroid Build Coastguard Worker    arm64-darwin21-gcc
66*fb1b10abSAndroid Build Coastguard Worker    arm64-darwin22-gcc
67*fb1b10abSAndroid Build Coastguard Worker    arm64-darwin23-gcc
68*fb1b10abSAndroid Build Coastguard Worker    arm64-linux-gcc
69*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-gcc
70*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-vs15
71*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-vs16
72*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-vs16-clangcl
73*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-vs17
74*fb1b10abSAndroid Build Coastguard Worker    arm64-win64-vs17-clangcl
75*fb1b10abSAndroid Build Coastguard Worker    armv7-android-gcc
76*fb1b10abSAndroid Build Coastguard Worker    armv7-darwin-gcc
77*fb1b10abSAndroid Build Coastguard Worker    armv7-linux-rvct
78*fb1b10abSAndroid Build Coastguard Worker    armv7-linux-gcc
79*fb1b10abSAndroid Build Coastguard Worker    armv7-none-rvct
80*fb1b10abSAndroid Build Coastguard Worker    armv7-win32-gcc
81*fb1b10abSAndroid Build Coastguard Worker    armv7-win32-vs14
82*fb1b10abSAndroid Build Coastguard Worker    armv7-win32-vs15
83*fb1b10abSAndroid Build Coastguard Worker    armv7-win32-vs16
84*fb1b10abSAndroid Build Coastguard Worker    armv7-win32-vs17
85*fb1b10abSAndroid Build Coastguard Worker    armv7s-darwin-gcc
86*fb1b10abSAndroid Build Coastguard Worker    armv8-linux-gcc
87*fb1b10abSAndroid Build Coastguard Worker    loongarch32-linux-gcc
88*fb1b10abSAndroid Build Coastguard Worker    loongarch64-linux-gcc
89*fb1b10abSAndroid Build Coastguard Worker    mips32-linux-gcc
90*fb1b10abSAndroid Build Coastguard Worker    mips64-linux-gcc
91*fb1b10abSAndroid Build Coastguard Worker    ppc64le-linux-gcc
92*fb1b10abSAndroid Build Coastguard Worker    sparc-solaris-gcc
93*fb1b10abSAndroid Build Coastguard Worker    x86-android-gcc
94*fb1b10abSAndroid Build Coastguard Worker    x86-darwin8-gcc
95*fb1b10abSAndroid Build Coastguard Worker    x86-darwin8-icc
96*fb1b10abSAndroid Build Coastguard Worker    x86-darwin9-gcc
97*fb1b10abSAndroid Build Coastguard Worker    x86-darwin9-icc
98*fb1b10abSAndroid Build Coastguard Worker    x86-darwin10-gcc
99*fb1b10abSAndroid Build Coastguard Worker    x86-darwin11-gcc
100*fb1b10abSAndroid Build Coastguard Worker    x86-darwin12-gcc
101*fb1b10abSAndroid Build Coastguard Worker    x86-darwin13-gcc
102*fb1b10abSAndroid Build Coastguard Worker    x86-darwin14-gcc
103*fb1b10abSAndroid Build Coastguard Worker    x86-darwin15-gcc
104*fb1b10abSAndroid Build Coastguard Worker    x86-darwin16-gcc
105*fb1b10abSAndroid Build Coastguard Worker    x86-darwin17-gcc
106*fb1b10abSAndroid Build Coastguard Worker    x86-iphonesimulator-gcc
107*fb1b10abSAndroid Build Coastguard Worker    x86-linux-gcc
108*fb1b10abSAndroid Build Coastguard Worker    x86-linux-icc
109*fb1b10abSAndroid Build Coastguard Worker    x86-os2-gcc
110*fb1b10abSAndroid Build Coastguard Worker    x86-solaris-gcc
111*fb1b10abSAndroid Build Coastguard Worker    x86-win32-gcc
112*fb1b10abSAndroid Build Coastguard Worker    x86-win32-vs14
113*fb1b10abSAndroid Build Coastguard Worker    x86-win32-vs15
114*fb1b10abSAndroid Build Coastguard Worker    x86-win32-vs16
115*fb1b10abSAndroid Build Coastguard Worker    x86-win32-vs17
116*fb1b10abSAndroid Build Coastguard Worker    x86_64-android-gcc
117*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin9-gcc
118*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin10-gcc
119*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin11-gcc
120*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin12-gcc
121*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin13-gcc
122*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin14-gcc
123*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin15-gcc
124*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin16-gcc
125*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin17-gcc
126*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin18-gcc
127*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin19-gcc
128*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin20-gcc
129*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin21-gcc
130*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin22-gcc
131*fb1b10abSAndroid Build Coastguard Worker    x86_64-darwin23-gcc
132*fb1b10abSAndroid Build Coastguard Worker    x86_64-iphonesimulator-gcc
133*fb1b10abSAndroid Build Coastguard Worker    x86_64-linux-gcc
134*fb1b10abSAndroid Build Coastguard Worker    x86_64-linux-icc
135*fb1b10abSAndroid Build Coastguard Worker    x86_64-solaris-gcc
136*fb1b10abSAndroid Build Coastguard Worker    x86_64-win64-gcc
137*fb1b10abSAndroid Build Coastguard Worker    x86_64-win64-vs14
138*fb1b10abSAndroid Build Coastguard Worker    x86_64-win64-vs15
139*fb1b10abSAndroid Build Coastguard Worker    x86_64-win64-vs16
140*fb1b10abSAndroid Build Coastguard Worker    x86_64-win64-vs17
141*fb1b10abSAndroid Build Coastguard Worker    generic-gnu
142*fb1b10abSAndroid Build Coastguard Worker
143*fb1b10abSAndroid Build Coastguard Worker  The generic-gnu target, in conjunction with the CROSS environment variable,
144*fb1b10abSAndroid Build Coastguard Worker  can be used to cross compile architectures that aren't explicitly listed, if
145*fb1b10abSAndroid Build Coastguard Worker  the toolchain is a cross GNU (gcc/binutils) toolchain. Other POSIX toolchains
146*fb1b10abSAndroid Build Coastguard Worker  will likely work as well. For instance, to build using the mipsel-linux-uclibc
147*fb1b10abSAndroid Build Coastguard Worker  toolchain, the following command could be used (note, POSIX SH syntax, adapt
148*fb1b10abSAndroid Build Coastguard Worker  to your shell as necessary):
149*fb1b10abSAndroid Build Coastguard Worker
150*fb1b10abSAndroid Build Coastguard Worker    $ CROSS=mipsel-linux-uclibc- ../libvpx/configure
151*fb1b10abSAndroid Build Coastguard Worker
152*fb1b10abSAndroid Build Coastguard Worker  In addition, the executables to be invoked can be overridden by specifying the
153*fb1b10abSAndroid Build Coastguard Worker  environment variables: AR, AS, CC, CXX, LD, STRIP. Additional flags can be
154*fb1b10abSAndroid Build Coastguard Worker  passed to these executables with ASFLAGS, CFLAGS, CXXFLAGS, and LDFLAGS.
155*fb1b10abSAndroid Build Coastguard Worker
156*fb1b10abSAndroid Build Coastguard Worker  6. Configuration errors
157*fb1b10abSAndroid Build Coastguard Worker  If the configuration step fails, the first step is to look in the error log.
158*fb1b10abSAndroid Build Coastguard Worker  This defaults to config.log. This should give a good indication of what went
159*fb1b10abSAndroid Build Coastguard Worker  wrong. If not, contact us for support.
160*fb1b10abSAndroid Build Coastguard Worker
161*fb1b10abSAndroid Build Coastguard WorkerVP8/VP9 TEST VECTORS:
162*fb1b10abSAndroid Build Coastguard Worker  The test vectors can be downloaded and verified using the build system after
163*fb1b10abSAndroid Build Coastguard Worker  running configure. To specify an alternate directory the
164*fb1b10abSAndroid Build Coastguard Worker  LIBVPX_TEST_DATA_PATH environment variable can be used.
165*fb1b10abSAndroid Build Coastguard Worker
166*fb1b10abSAndroid Build Coastguard Worker  $ ./configure --enable-unit-tests
167*fb1b10abSAndroid Build Coastguard Worker  $ LIBVPX_TEST_DATA_PATH=../libvpx-test-data make testdata
168*fb1b10abSAndroid Build Coastguard Worker
169*fb1b10abSAndroid Build Coastguard WorkerCODE STYLE:
170*fb1b10abSAndroid Build Coastguard Worker  The coding style used by this project is enforced with clang-format using the
171*fb1b10abSAndroid Build Coastguard Worker  configuration contained in the .clang-format file in the root of the
172*fb1b10abSAndroid Build Coastguard Worker  repository.
173*fb1b10abSAndroid Build Coastguard Worker
174*fb1b10abSAndroid Build Coastguard Worker  Before pushing changes for review you can format your code with:
175*fb1b10abSAndroid Build Coastguard Worker  # Apply clang-format to modified .c, .h and .cc files
176*fb1b10abSAndroid Build Coastguard Worker  $ clang-format -i --style=file \
177*fb1b10abSAndroid Build Coastguard Worker    $(git diff --name-only --diff-filter=ACMR '*.[hc]' '*.cc')
178*fb1b10abSAndroid Build Coastguard Worker
179*fb1b10abSAndroid Build Coastguard Worker  Check the .clang-format file for the version used to generate it if there is
180*fb1b10abSAndroid Build Coastguard Worker  any difference between your local formatting and the review system.
181*fb1b10abSAndroid Build Coastguard Worker
182*fb1b10abSAndroid Build Coastguard Worker  See also: http://clang.llvm.org/docs/ClangFormat.html
183*fb1b10abSAndroid Build Coastguard Worker
184*fb1b10abSAndroid Build Coastguard WorkerPROFILE GUIDED OPTIMIZATION (PGO)
185*fb1b10abSAndroid Build Coastguard Worker  Profile Guided Optimization can be enabled for Clang builds using the
186*fb1b10abSAndroid Build Coastguard Worker  commands:
187*fb1b10abSAndroid Build Coastguard Worker
188*fb1b10abSAndroid Build Coastguard Worker  $ export CC=clang
189*fb1b10abSAndroid Build Coastguard Worker  $ export CXX=clang++
190*fb1b10abSAndroid Build Coastguard Worker  $ ../libvpx/configure  --enable-profile
191*fb1b10abSAndroid Build Coastguard Worker  $ make
192*fb1b10abSAndroid Build Coastguard Worker
193*fb1b10abSAndroid Build Coastguard Worker  Generate one or multiple PGO profile files by running vpxdec or vpxenc. For
194*fb1b10abSAndroid Build Coastguard Worker  example:
195*fb1b10abSAndroid Build Coastguard Worker
196*fb1b10abSAndroid Build Coastguard Worker  $ ./vpxdec ../vpx/out_ful/vp90-2-sintel_1280x546_tile_1x4_1257kbps.webm \
197*fb1b10abSAndroid Build Coastguard Worker    -o - > /dev/null
198*fb1b10abSAndroid Build Coastguard Worker
199*fb1b10abSAndroid Build Coastguard Worker  To convert and merge the raw profile files, use the llvm-profdata tool:
200*fb1b10abSAndroid Build Coastguard Worker
201*fb1b10abSAndroid Build Coastguard Worker  $ llvm-profdata merge -o perf.profdata default_8382761441159425451_0.profraw
202*fb1b10abSAndroid Build Coastguard Worker
203*fb1b10abSAndroid Build Coastguard Worker  Then, rebuild the project with the new profile file:
204*fb1b10abSAndroid Build Coastguard Worker
205*fb1b10abSAndroid Build Coastguard Worker  $ make clean
206*fb1b10abSAndroid Build Coastguard Worker  $ ../libvpx/configure --use-profile=perf.profdata
207*fb1b10abSAndroid Build Coastguard Worker  $ make
208*fb1b10abSAndroid Build Coastguard Worker
209*fb1b10abSAndroid Build Coastguard Worker  Note: Always use the llvm-profdata from the toolchain that is used for
210*fb1b10abSAndroid Build Coastguard Worker  compiling the PGO-enabled binary.
211*fb1b10abSAndroid Build Coastguard Worker
212*fb1b10abSAndroid Build Coastguard Worker  To observe the improvements from a PGO-enabled build, enable and compare the
213*fb1b10abSAndroid Build Coastguard Worker  list of failed optimizations by using the -Rpass-missed compiler flag. For
214*fb1b10abSAndroid Build Coastguard Worker  example, to list the failed loop vectorizations:
215*fb1b10abSAndroid Build Coastguard Worker
216*fb1b10abSAndroid Build Coastguard Worker  $ ../libvpx/configure --use-profile=perf.profdata \
217*fb1b10abSAndroid Build Coastguard Worker    --extra-cflags=-Rpass-missed=loop-vectorize
218*fb1b10abSAndroid Build Coastguard Worker
219*fb1b10abSAndroid Build Coastguard Worker  For guidance on utilizing PGO files to identify potential optimization
220*fb1b10abSAndroid Build Coastguard Worker  opportunities, see: tools/README.pgo.md
221*fb1b10abSAndroid Build Coastguard Worker
222*fb1b10abSAndroid Build Coastguard WorkerSUPPORT
223*fb1b10abSAndroid Build Coastguard Worker  This library is an open source project supported by its community. Please
224*fb1b10abSAndroid Build Coastguard Worker  email [email protected] for help.
225*fb1b10abSAndroid Build Coastguard Worker
226*fb1b10abSAndroid Build Coastguard WorkerBUG REPORTS
227*fb1b10abSAndroid Build Coastguard Worker  Bug reports can be filed in the libvpx issue tracker:
228*fb1b10abSAndroid Build Coastguard Worker  https://issues.webmproject.org/.
229*fb1b10abSAndroid Build Coastguard Worker  For security reports, select 'Security report' from the Template dropdown.
230