1v1.13.1 Ugly Duckling 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-darwin21-gcc 68 arm64-darwin22-gcc 69 arm64-darwin23-gcc 70 arm64-linux-gcc 71 arm64-win64-gcc 72 arm64-win64-vs15 73 arm64-win64-vs16 74 arm64-win64-vs16-clangcl 75 arm64-win64-vs17 76 arm64-win64-vs17-clangcl 77 armv7-android-gcc 78 armv7-darwin-gcc 79 armv7-linux-rvct 80 armv7-linux-gcc 81 armv7-none-rvct 82 armv7-win32-gcc 83 armv7-win32-vs14 84 armv7-win32-vs15 85 armv7-win32-vs16 86 armv7-win32-vs17 87 armv7s-darwin-gcc 88 armv8-linux-gcc 89 loongarch32-linux-gcc 90 loongarch64-linux-gcc 91 mips32-linux-gcc 92 mips64-linux-gcc 93 ppc64le-linux-gcc 94 sparc-solaris-gcc 95 x86-android-gcc 96 x86-darwin8-gcc 97 x86-darwin8-icc 98 x86-darwin9-gcc 99 x86-darwin9-icc 100 x86-darwin10-gcc 101 x86-darwin11-gcc 102 x86-darwin12-gcc 103 x86-darwin13-gcc 104 x86-darwin14-gcc 105 x86-darwin15-gcc 106 x86-darwin16-gcc 107 x86-darwin17-gcc 108 x86-iphonesimulator-gcc 109 x86-linux-gcc 110 x86-linux-icc 111 x86-os2-gcc 112 x86-solaris-gcc 113 x86-win32-gcc 114 x86-win32-vs14 115 x86-win32-vs15 116 x86-win32-vs16 117 x86-win32-vs17 118 x86_64-android-gcc 119 x86_64-darwin9-gcc 120 x86_64-darwin10-gcc 121 x86_64-darwin11-gcc 122 x86_64-darwin12-gcc 123 x86_64-darwin13-gcc 124 x86_64-darwin14-gcc 125 x86_64-darwin15-gcc 126 x86_64-darwin16-gcc 127 x86_64-darwin17-gcc 128 x86_64-darwin18-gcc 129 x86_64-darwin19-gcc 130 x86_64-darwin20-gcc 131 x86_64-darwin21-gcc 132 x86_64-darwin22-gcc 133 x86_64-darwin23-gcc 134 x86_64-iphonesimulator-gcc 135 x86_64-linux-gcc 136 x86_64-linux-icc 137 x86_64-solaris-gcc 138 x86_64-win64-gcc 139 x86_64-win64-vs14 140 x86_64-win64-vs15 141 x86_64-win64-vs16 142 x86_64-win64-vs17 143 generic-gnu 144 145 The generic-gnu target, in conjunction with the CROSS environment variable, 146 can be used to cross compile architectures that aren't explicitly listed, if 147 the toolchain is a cross GNU (gcc/binutils) toolchain. Other POSIX toolchains 148 will likely work as well. For instance, to build using the mipsel-linux-uclibc 149 toolchain, the following command could be used (note, POSIX SH syntax, adapt 150 to your shell as necessary): 151 152 $ CROSS=mipsel-linux-uclibc- ../libvpx/configure 153 154 In addition, the executables to be invoked can be overridden by specifying the 155 environment variables: CC, AR, LD, AS, STRIP, NM. Additional flags can be 156 passed to these executables with CFLAGS, LDFLAGS, and ASFLAGS. 157 158 6. Configuration errors 159 If the configuration step fails, the first step is to look in the error log. 160 This defaults to config.log. This should give a good indication of what went 161 wrong. If not, contact us for support. 162 163VP8/VP9 TEST VECTORS: 164 The test vectors can be downloaded and verified using the build system after 165 running configure. To specify an alternate directory the 166 LIBVPX_TEST_DATA_PATH environment variable can be used. 167 168 $ ./configure --enable-unit-tests 169 $ LIBVPX_TEST_DATA_PATH=../libvpx-test-data make testdata 170 171CODE STYLE: 172 The coding style used by this project is enforced with clang-format using the 173 configuration contained in the .clang-format file in the root of the 174 repository. 175 176 Before pushing changes for review you can format your code with: 177 # Apply clang-format to modified .c, .h and .cc files 178 $ clang-format -i --style=file \ 179 $(git diff --name-only --diff-filter=ACMR '*.[hc]' '*.cc') 180 181 Check the .clang-format file for the version used to generate it if there is 182 any difference between your local formatting and the review system. 183 184 See also: http://clang.llvm.org/docs/ClangFormat.html 185 186SUPPORT 187 This library is an open source project supported by its community. Please 188 email webm-discuss@webmproject.org for help. 189 190