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