1README - 08 March 2021 2 3Welcome to the WebM VP8/VP9 Codec SDK! 4 5COMPILING THE APPLICATIONS/LIBRARIES: 6 The build system used is similar to autotools. Building generally consists of 7 "configuring" with your desired build options, then using GNU make to build 8 the application. 9 10 1. Prerequisites 11 12 * All x86 targets require the Yasm[1] assembler be installed[2]. 13 * All Windows builds require that Cygwin[3] or MSYS2[4] be installed. 14 * Building the documentation requires Doxygen[5]. If you do not 15 have this package, the install-docs option will be disabled. 16 * Downloading the data for the unit tests requires curl[6] and sha1sum. 17 sha1sum is provided via the GNU coreutils, installed by default on 18 many *nix platforms, as well as MinGW and Cygwin. If coreutils is not 19 available, a compatible version of sha1sum can be built from 20 source[7]. These requirements are optional if not running the unit 21 tests. 22 23 [1]: http://www.tortall.net/projects/yasm 24 [2]: For Visual Studio the base yasm binary (not vsyasm) should be in the 25 PATH for Visual Studio. For VS2017 it is sufficient to rename 26 yasm-<version>-<arch>.exe to yasm.exe and place it in: 27 Program Files (x86)/Microsoft Visual Studio/2017/<level>/Common7/Tools/ 28 [3]: http://www.cygwin.com 29 [4]: http://www.msys2.org/ 30 [5]: http://www.doxygen.org 31 [6]: http://curl.haxx.se 32 [7]: http://www.microbrew.org/tools/md5sha1sum/ 33 34 2. Out-of-tree builds 35 Out of tree builds are a supported method of building the application. For 36 an out of tree build, the source tree is kept separate from the object 37 files produced during compilation. For instance: 38 39 $ mkdir build 40 $ cd build 41 $ ../libvpx/configure <options> 42 $ make 43 44 3. Configuration options 45 The 'configure' script supports a number of options. The --help option can be 46 used to get a list of supported options: 47 $ ../libvpx/configure --help 48 49 4. Compiler analyzers 50 Compilers have added sanitizers which instrument binaries with information 51 about address calculation, memory usage, threading, undefined behavior, and 52 other common errors. To simplify building libvpx with some of these features 53 use tools/set_analyzer_env.sh before running configure. It will set the 54 compiler and necessary flags for building as well as environment variables 55 read by the analyzer when testing the binaries. 56 $ source ../libvpx/tools/set_analyzer_env.sh address 57 58 5. Cross development 59 For cross development, the most notable option is the --target option. The 60 most up-to-date list of supported targets can be found at the bottom of the 61 --help output of the configure script. As of this writing, the list of 62 available targets is: 63 64 arm64-android-gcc 65 arm64-darwin-gcc 66 arm64-darwin20-gcc 67 arm64-linux-gcc 68 arm64-win64-gcc 69 arm64-win64-vs15 70 armv7-android-gcc 71 armv7-darwin-gcc 72 armv7-linux-rvct 73 armv7-linux-gcc 74 armv7-none-rvct 75 armv7-win32-gcc 76 armv7-win32-vs14 77 armv7-win32-vs15 78 armv7s-darwin-gcc 79 armv8-linux-gcc 80 mips32-linux-gcc 81 mips64-linux-gcc 82 ppc64le-linux-gcc 83 sparc-solaris-gcc 84 x86-android-gcc 85 x86-darwin8-gcc 86 x86-darwin8-icc 87 x86-darwin9-gcc 88 x86-darwin9-icc 89 x86-darwin10-gcc 90 x86-darwin11-gcc 91 x86-darwin12-gcc 92 x86-darwin13-gcc 93 x86-darwin14-gcc 94 x86-darwin15-gcc 95 x86-darwin16-gcc 96 x86-darwin17-gcc 97 x86-iphonesimulator-gcc 98 x86-linux-gcc 99 x86-linux-icc 100 x86-os2-gcc 101 x86-solaris-gcc 102 x86-win32-gcc 103 x86-win32-vs14 104 x86-win32-vs15 105 x86-win32-vs16 106 x86_64-android-gcc 107 x86_64-darwin9-gcc 108 x86_64-darwin10-gcc 109 x86_64-darwin11-gcc 110 x86_64-darwin12-gcc 111 x86_64-darwin13-gcc 112 x86_64-darwin14-gcc 113 x86_64-darwin15-gcc 114 x86_64-darwin16-gcc 115 x86_64-darwin17-gcc 116 x86_64-darwin18-gcc 117 x86_64-darwin19-gcc 118 x86_64-darwin20-gcc 119 x86_64-iphonesimulator-gcc 120 x86_64-linux-gcc 121 x86_64-linux-icc 122 x86_64-solaris-gcc 123 x86_64-win64-gcc 124 x86_64-win64-vs14 125 x86_64-win64-vs15 126 x86_64-win64-vs16 127 generic-gnu 128 129 The generic-gnu target, in conjunction with the CROSS environment variable, 130 can be used to cross compile architectures that aren't explicitly listed, if 131 the toolchain is a cross GNU (gcc/binutils) toolchain. Other POSIX toolchains 132 will likely work as well. For instance, to build using the mipsel-linux-uclibc 133 toolchain, the following command could be used (note, POSIX SH syntax, adapt 134 to your shell as necessary): 135 136 $ CROSS=mipsel-linux-uclibc- ../libvpx/configure 137 138 In addition, the executables to be invoked can be overridden by specifying the 139 environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be 140 passed to these executables with CFLAGS, LDFLAGS, and ASFLAGS. 141 142 6. Configuration errors 143 If the configuration step fails, the first step is to look in the error log. 144 This defaults to config.log. This should give a good indication of what went 145 wrong. If not, contact us for support. 146 147VP8/VP9 TEST VECTORS: 148 The test vectors can be downloaded and verified using the build system after 149 running configure. To specify an alternate directory the 150 LIBVPX_TEST_DATA_PATH environment variable can be used. 151 152 $ ./configure --enable-unit-tests 153 $ LIBVPX_TEST_DATA_PATH=../libvpx-test-data make testdata 154 155CODE STYLE: 156 The coding style used by this project is enforced with clang-format using the 157 configuration contained in the .clang-format file in the root of the 158 repository. 159 160 Before pushing changes for review you can format your code with: 161 # Apply clang-format to modified .c, .h and .cc files 162 $ clang-format -i --style=file \ 163 $(git diff --name-only --diff-filter=ACMR '*.[hc]' '*.cc') 164 165 Check the .clang-format file for the version used to generate it if there is 166 any difference between your local formatting and the review system. 167 168 See also: http://clang.llvm.org/docs/ClangFormat.html 169 170SUPPORT 171 This library is an open source project supported by its community. Please 172 email webm-discuss@webmproject.org for help. 173 174