OLD | NEW |
---|---|
1 # Getting Started | 1 # Getting Started |
2 | 2 |
3 How to get and build the libyuv code. | 3 How to get and build the libyuv code. |
4 | 4 |
5 ## Pre-requisites | 5 ## Pre-requisites |
6 | 6 |
7 You'll need to have depot tools installed: https://www.chromium.org/developers/h ow-tos/install-depot-tools | 7 You'll need to have depot tools installed: https://www.chromium.org/developers/h ow-tos/install-depot-tools |
8 Refer to chromium instructions for each platform for other prerequisites. | 8 Refer to chromium instructions for each platform for other prerequisites. |
9 | 9 |
10 ## Getting the Code | 10 ## Getting the Code |
11 | 11 |
12 Create a working directory, enter it, and run: | 12 Create a working directory, enter it, and run: |
13 | 13 |
14 gclient config https://chromium.googlesource.com/libyuv/libyuv | 14 gclient config https://chromium.googlesource.com/libyuv/libyuv |
15 gclient sync | 15 gclient sync |
16 | 16 |
17 | |
18 Then you'll get a .gclient file like: | 17 Then you'll get a .gclient file like: |
19 | 18 |
20 solutions = [ | 19 solutions = [ |
21 { "name" : "libyuv", | 20 { "name" : "libyuv", |
22 "url" : "https://chromium.googlesource.com/libyuv/libyuv", | 21 "url" : "https://chromium.googlesource.com/libyuv/libyuv", |
23 "deps_file" : "DEPS", | 22 "deps_file" : "DEPS", |
24 "managed" : True, | 23 "managed" : True, |
25 "custom_deps" : { | 24 "custom_deps" : { |
26 }, | 25 }, |
27 "safesync_url": "", | 26 "safesync_url": "", |
28 }, | 27 }, |
29 ]; | 28 ]; |
30 | 29 |
31 | |
32 For iOS add `;target_os=['ios'];` to your OSX .gclient and run `GYP_DEFINES="OS= ios" gclient sync.` | 30 For iOS add `;target_os=['ios'];` to your OSX .gclient and run `GYP_DEFINES="OS= ios" gclient sync.` |
33 | 31 |
34 Browse the Git reprository: https://chromium.googlesource.com/libyuv/libyuv/+/ma ster | 32 Browse the Git reprository: https://chromium.googlesource.com/libyuv/libyuv/+/ma ster |
35 | 33 |
36 ### Android | 34 ### Android |
37 For Android add `;target_os=['android'];` to your Linux .gclient | 35 For Android add `;target_os=['android'];` to your Linux .gclient |
38 | 36 |
39 | |
40 solutions = [ | 37 solutions = [ |
41 { "name" : "libyuv", | 38 { "name" : "libyuv", |
42 "url" : "https://chromium.googlesource.com/libyuv/libyuv", | 39 "url" : "https://chromium.googlesource.com/libyuv/libyuv", |
43 "deps_file" : "DEPS", | 40 "deps_file" : "DEPS", |
44 "managed" : True, | 41 "managed" : True, |
45 "custom_deps" : { | 42 "custom_deps" : { |
46 }, | 43 }, |
47 "safesync_url": "", | 44 "safesync_url": "", |
48 }, | 45 }, |
49 ]; | 46 ]; |
(...skipping 16 matching lines...) Expand all Loading... | |
66 | 63 |
67 To get just the source (not buildable): | 64 To get just the source (not buildable): |
68 | 65 |
69 git clone https://chromium.googlesource.com/libyuv/libyuv | 66 git clone https://chromium.googlesource.com/libyuv/libyuv |
70 | 67 |
71 | 68 |
72 ## Building the Library and Unittests | 69 ## Building the Library and Unittests |
73 | 70 |
74 ### Windows | 71 ### Windows |
75 | 72 |
76 set GYP_DEFINES=target_arch=ia32 | 73 call gn gen out/Release "--args=is_debug=false is_official_build=false targe t_cpu=\"x86\"" |
kjellander_chromium
2016/10/04 06:06:21
I suggest leaving out is_official_build=false sinc
kjellander_chromium
2016/10/04 06:06:21
I find it easier to read without the escaped doubl
fbarchard1
2016/10/04 18:23:45
Done.
| |
77 call python gyp_libyuv -fninja -G msvs_version=2013 | 74 call gn gen out/Debug "--args=is_debug=true is_official_build=false target_c pu=\"x86\"" |
78 ninja -j7 -C out\Release | 75 ninja -j7 -v -C out/Release |
kjellander_chromium
2016/10/04 06:06:21
I'd also leave out -j7 since we can't really make
fbarchard1
2016/10/04 18:23:45
Acknowledged.
If you do more than one thing on the
kjellander_chromium
2016/10/04 18:31:35
Alright, fair enough (and libyuv builds so quickly
| |
79 ninja -j7 -C out\Debug | 76 ninja -j7 -v -C out/Debug |
80 | 77 |
81 set GYP_DEFINES=target_arch=x64 | 78 call gn gen out/Release "--args=is_debug=false is_official_build=false targe t_cpu=\"x64\"" |
82 call python gyp_libyuv -fninja -G msvs_version=2013 | 79 call gn gen out/Debug "--args=is_debug=true is_official_build=false target_c pu=\"x64\"" |
83 ninja -C out\Debug_x64 | 80 ninja -j7 -v -C out/Release |
84 ninja -C out\Release_x64 | 81 ninja -j7 -v -C out/Debug |
85 | 82 |
86 #### Building with clangcl | 83 #### Building with clang-cl |
84 | |
87 set GYP_DEFINES=clang=1 target_arch=ia32 | 85 set GYP_DEFINES=clang=1 target_arch=ia32 |
88 call python tools\clang\scripts\update.py | 86 call python tools\clang\scripts\update.py |
89 call python gyp_libyuv -fninja libyuv_test.gyp | |
90 ninja -C out\Debug | |
91 ninja -C out\Release | |
92 | 87 |
93 ### OSX | 88 call gn gen out/Release "--args=is_debug=false is_official_build=false is_cl ang=true target_cpu=\"x86\"" |
89 call gn gen out/Debug "--args=is_debug=true is_official_build=false is_clang =true target_cpu=\"x86\"" | |
90 ninja -j7 -v -C out/Release | |
91 ninja -j7 -v -C out/Debug | |
94 | 92 |
95 Clang 64 bit shown. Remove `clang=1` for GCC and change x64 to ia32 for 32 bit. | 93 call gn gen out/Release "--args=is_debug=false is_official_build=false is_cl ang=true target_cpu=\"x64\"" |
94 call gn gen out/Debug "--args=is_debug=true is_official_build=false is_clang =true target_cpu=\"x64\"" | |
95 ninja -j7 -v -C out/Release | |
96 ninja -j7 -v -C out/Debug | |
96 | 97 |
97 GYP_DEFINES="clang=1 target_arch=x64" ./gyp_libyuv | 98 ### OSX and Linux |
kjellander_chromium
2016/10/04 06:06:21
OSX -> macOS these days :)
fbarchard1
2016/10/04 18:23:45
Done.
| |
98 ninja -j7 -C out/Debug | |
99 ninja -j7 -C out/Release | |
100 | 99 |
101 GYP_DEFINES="clang=1 target_arch=ia32" ./gyp_libyuv | 100 gn gen out/Release "--args=is_debug=false" |
102 ninja -j7 -C out/Debug | 101 gn gen out/Debug "--args=is_debug=true" |
103 ninja -j7 -C out/Release | 102 ninja -j7 -v -C out/Release |
103 ninja -j7 -v -C out/Debug | |
104 | |
105 ### Building Offical with GN | |
106 | |
107 gn gen out/Official "--args=is_debug=false is_official_build=true is_chrome_ branded=true" | |
108 ninja -C out/Official | |
104 | 109 |
105 ### iOS | 110 ### iOS |
111 This section needs an update to GN build documentation. | |
106 http://www.chromium.org/developers/how-tos/build-instructions-ios | 112 http://www.chromium.org/developers/how-tos/build-instructions-ios |
107 | 113 |
108 Add to .gclient last line: `target_os=['ios'];` | 114 Add to .gclient last line: `target_os=['ios'];` |
109 | 115 |
110 armv7 | 116 armv7 |
111 | 117 |
112 GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=arm32" GYP_CROSSCOMPILE =1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv | 118 GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=arm32" GYP_CROSSCOMPILE =1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv |
113 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest | 119 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest |
114 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest | 120 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest |
115 | 121 |
116 arm64 | 122 arm64 |
117 | 123 |
118 GYP_DEFINES="OS=ios target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE =1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv | 124 GYP_DEFINES="OS=ios target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE =1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv |
119 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest | 125 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest |
120 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest | 126 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest |
121 | 127 |
122 both armv7 and arm64 (fat) | 128 both armv7 and arm64 (fat) |
123 | 129 |
124 GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=both" GYP_CROSSCOMPILE= 1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv | 130 GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=both" GYP_CROSSCOMPILE= 1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv |
125 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest | 131 ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest |
126 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest | 132 ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest |
127 | 133 |
128 simulator | 134 simulator |
129 | 135 |
130 GYP_DEFINES="OS=ios target_arch=ia32 target_subarch=arm32" GYP_CROSSCOMPILE= 1 GYP_GENERATOR_FLAGS="output_dir=out_sim" ./gyp_libyuv | 136 GYP_DEFINES="OS=ios target_arch=ia32 target_subarch=arm32" GYP_CROSSCOMPILE= 1 GYP_GENERATOR_FLAGS="output_dir=out_sim" ./gyp_libyuv |
131 ninja -j7 -C out_sim/Debug-iphonesimulator libyuv_unittest | 137 ninja -j7 -C out_sim/Debug-iphonesimulator libyuv_unittest |
132 ninja -j7 -C out_sim/Release-iphonesimulator libyuv_unittest | 138 ninja -j7 -C out_sim/Release-iphonesimulator libyuv_unittest |
133 | 139 |
134 ### Android | 140 ### Android |
141 This section needs an update to GN build documentation. | |
kjellander_chromium
2016/10/04 06:06:21
Remove this line since you actually does provide A
fbarchard1
2016/10/04 18:23:45
Acknowledged.
| |
135 https://code.google.com/p/chromium/wiki/AndroidBuildInstructions | 142 https://code.google.com/p/chromium/wiki/AndroidBuildInstructions |
136 | 143 |
137 Add to .gclient last line: `target_os=['android'];` | 144 Add to .gclient last line: `target_os=['android'];` |
138 | 145 |
139 armv7 | 146 armv7 |
140 | 147 |
141 GYP_DEFINES="OS=android" GYP_CROSSCOMPILE=1 ./gyp_libyuv | 148 gn gen out/Release "--args=is_debug=false target_os=\"android\" target_cpu=\ "arm\"" |
142 ninja -j7 -C out/Debug yuv_unittest_apk | 149 gn gen out/Debug "--args=is_debug=true target_os=\"android\" target_cpu=\"ar m\"" |
143 ninja -j7 -C out/Release yuv_unittest_apk | 150 ninja -j7 -v -C out/Debug libyuv_unittest_apk |
kjellander_chromium
2016/10/04 06:06:21
There's no _apk suffixed target for GN.
Just buil
fbarchard1
2016/10/04 18:23:45
Done.
| |
151 ninja -j7 -v -C out/Release libyuv_unittest_apk | |
144 | 152 |
145 arm64 | 153 arm64 |
146 | 154 |
147 GYP_DEFINES="OS=android target_arch=arm64 target_subarch=arm64" GYP_CROSSCOM PILE=1 ./gyp_libyuv | 155 gn gen out/Release "--args=is_debug=false target_os=\"android\" target_cpu=\ "arm64\"" |
148 ninja -j7 -C out/Debug yuv_unittest_apk | 156 gn gen out/Debug "--args=is_debug=true target_os=\"android\" target_cpu=\"ar m64\"" |
149 ninja -j7 -C out/Release yuv_unittest_apk | 157 ninja -j7 -v -C out/Debug libyuv_unittest_apk |
158 ninja -j7 -v -C out/Release libyuv_unittest_apk | |
150 | 159 |
151 ia32 | 160 ia32 |
152 | 161 |
153 GYP_DEFINES="OS=android target_arch=ia32" GYP_CROSSCOMPILE=1 ./gyp_libyuv | 162 gn gen out/Release "--args=is_debug=false target_os=\"android\" target_cpu=\ "x86\"" |
154 ninja -j7 -C out/Debug yuv_unittest_apk | 163 gn gen out/Debug "--args=is_debug=true target_os=\"android\" target_cpu=\"x8 6\"" |
155 ninja -j7 -C out/Release yuv_unittest_apk | 164 ninja -j7 -v -C out/Debug libyuv_unittest_apk |
156 | 165 ninja -j7 -v -C out/Release libyuv_unittest_apk |
157 GYP_DEFINES="OS=android target_arch=ia32 android_full_debug=1" GYP_CROSSCOMP ILE=1 ./gyp_libyuv | |
158 ninja -j7 -C out/Debug yuv_unittest_apk | |
159 | 166 |
160 mipsel | 167 mipsel |
161 | 168 |
162 GYP_DEFINES="OS=android target_arch=mipsel" GYP_CROSSCOMPILE=1 ./gyp_libyuv | 169 gn gen out/Release "--args=is_debug=false target_os=\"android\" target_cpu=\ "mipsel\" mips_arch_variant=\"r6\" mips_use_msa=true is_component_build=true is_ clang=false" |
163 ninja -j7 -C out/Debug yuv_unittest_apk | 170 gn gen out/Debug "--args=is_debug=true target_os=\"android\" target_cpu=\"mi psel\"" mips_arch_variant=\"r6\" mips_use_msa=true is_component_build=true is_cl ang=false" |
164 ninja -j7 -C out/Release yuv_unittest_apk | 171 ninja -j7 -v -C out/Debug libyuv_unittest_apk |
172 ninja -j7 -v -C out/Release libyuv_unittest_apk | |
165 | 173 |
166 arm32 disassembly: | 174 gn gen out/Release "--args=is_debug=false target_os=\"android\" target_cpu=\ "mips64el\"" mips_arch_variant=\"r6\" mips_use_msa=true is_component_build=true is_clang=false" |
175 gn gen out/Debug "--args=is_debug=true target_os=\"android\" target_cpu=\"mi ps64el\"" mips_arch_variant=\"r6\" mips_use_msa=true is_component_build=true is_ clang=false" | |
176 ninja -j7 -v -C out/Debug libyuv_unittest_apk | |
177 ninja -j7 -v -C out/Release libyuv_unittest_apk | |
167 | 178 |
168 third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/ linux-x86_64/bin/arm-linux-androideabi-objdump -d out/Release/obj/source/libyuv. row_neon.o | 179 arm disassembly: |
169 | 180 |
170 arm64 disassembly: | 181 third_party/android_tools/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/ linux-x86_64/bin/aarch64-linux-android-objdump -d ./out/Release/obj/libyuv/row_c ommon.o >row_common.txt |
171 | 182 |
172 third_party/android_tools/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/ linux-x86_64/bin/aarch64-linux-android-objdump -d out/Release/obj/source/libyuv. row_neon64.o | 183 third_party/android_tools/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/ linux-x86_64/bin/aarch64-linux-android-objdump -d ./out/Release/obj/libyuv_neon/ row_neon.o >row_neon.txt |
184 | |
185 third_party/android_tools/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/ linux-x86_64/bin/aarch64-linux-android-objdump -d ./out/Release/obj/libyuv_neon/ row_neon64.o >row_neon64.txt | |
173 | 186 |
174 Running tests: | 187 Running tests: |
175 | 188 |
176 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* | 189 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* |
177 | 190 |
178 Running test as benchmark: | 191 Running test as benchmark: |
179 | 192 |
180 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repea t=999 --libyuv_flags=-1" | 193 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repea t=999 --libyuv_flags=-1 --libyuv_cpu_info=-1" |
181 | 194 |
182 Running test with C code: | 195 Running test with C code: |
183 | 196 |
184 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repea t=999 --libyuv_flags=1 --libyuv_cpu_info=1" | 197 util/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --rel ease --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repea t=999 --libyuv_flags=1 --libyuv_cpu_info=1" |
185 | 198 |
186 #### Building with GN | |
187 | |
188 gn gen out/Release "--args=is_debug=false target_cpu=\"x86\"" | |
189 gn gen out/Debug "--args=is_debug=true target_cpu=\"x86\"" | |
190 ninja -C out/Release | |
191 ninja -C out/Debug | |
192 | |
193 ### Building Offical with GN | |
194 | |
195 gn gen out/Official "--args=is_debug=false is_official_build=true is_chrome_ branded=true" | |
196 ninja -C out/Official | |
197 | |
198 #### Building mips with GN | |
199 | |
200 mipsel | |
201 gn gen out/Default "--args=is_debug=false target_cpu=\"mipsel\" target_os = \"android\" mips_arch_variant = \"r6\" mips_use_msa = true is_component_build = true is_clang = false" | |
202 ninja -C out/Default | |
203 | |
204 mips64el | |
205 gn gen out/Default "--args=is_debug=false target_cpu=\"mips64el\" target_os = \"android\" mips_arch_variant = \"r6\" mips_use_msa = true is_component_build = true is_clang = false" | |
206 ninja -C out/Default | |
207 | |
208 ### Linux | |
209 | |
210 GYP_DEFINES="target_arch=x64" ./gyp_libyuv | |
211 ninja -j7 -C out/Debug | |
212 ninja -j7 -C out/Release | |
213 | |
214 GYP_DEFINES="target_arch=ia32" ./gyp_libyuv | |
215 ninja -j7 -C out/Debug | |
216 ninja -j7 -C out/Release | |
217 | |
218 #### CentOS | |
219 | |
220 On CentOS 32 bit the following work around allows a sync: | |
221 | |
222 export GYP_DEFINES="host_arch=ia32" | |
223 gclient sync | |
224 | |
225 ### Windows Shared Library | |
226 | |
227 Modify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUI LDING_SHARED_LIBRARY' to 'defines'. | |
228 | |
229 gclient runhooks | |
230 | |
231 After this command follow the building the library instructions above. | |
232 | |
233 If you get a compile error for atlthunk.lib on Windows, read http://www.chromium .org/developers/how-tos/build-instructions-windows | |
234 | |
235 | |
236 ### Build targets | 199 ### Build targets |
237 | 200 |
238 ninja -C out/Debug libyuv | 201 ninja -C out/Debug libyuv |
239 ninja -C out/Debug libyuv_unittest | 202 ninja -C out/Debug libyuv_unittest |
240 ninja -C out/Debug compare | 203 ninja -C out/Debug compare |
241 ninja -C out/Debug convert | 204 ninja -C out/Debug convert |
242 ninja -C out/Debug psnr | 205 ninja -C out/Debug psnr |
243 ninja -C out/Debug cpuid | 206 ninja -C out/Debug cpuid |
244 | 207 |
245 | 208 |
(...skipping 17 matching lines...) Expand all Loading... | |
263 cmake --build . | 226 cmake --build . |
264 | 227 |
265 Release build/install | 228 Release build/install |
266 | 229 |
267 mkdir out | 230 mkdir out |
268 cd out | 231 cd out |
269 cmake -DCMAKE_INSTALL_PREFIX="/usr/lib" -DCMAKE_BUILD_TYPE="Release" .. | 232 cmake -DCMAKE_INSTALL_PREFIX="/usr/lib" -DCMAKE_BUILD_TYPE="Release" .. |
270 cmake --build . --config Release | 233 cmake --build . --config Release |
271 sudo cmake --build . --target install --config Release | 234 sudo cmake --build . --target install --config Release |
272 | 235 |
273 ### Windows 8 Phone | |
274 | |
275 Pre-requisite: | |
276 | |
277 * Install Visual Studio 2012 and Arm to your environment.<br> | |
278 | |
279 Then: | |
280 | |
281 call "c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_arm\vcv arsx86_arm.bat" | |
282 | |
283 or with Visual Studio 2013: | |
284 | |
285 call "c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_arm\vcv arsx86_arm.bat" | |
286 nmake /f winarm.mk clean | |
287 nmake /f winarm.mk | |
288 | |
289 ### Windows Shared Library | |
290 | |
291 Modify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUI LDING_SHARED_LIBRARY' to 'defines'. Then run this. | |
292 | |
293 gclient runhooks | |
294 | |
295 After this command follow the building the library instructions above. | |
296 | |
297 If you get a compile error for atlthunk.lib on Windows, read http://www.chromium .org/developers/how-tos/build-instructions-windows | |
298 | |
299 ### 64 bit Windows | |
300 | |
301 set GYP_DEFINES=target_arch=x64 | |
302 gclient runhooks V=1 | |
303 | |
304 ### ARM Linux | |
305 | |
306 export GYP_DEFINES="target_arch=arm" | |
kjellander_chromium
2016/10/04 06:06:21
You can still build for ARM Linux. I think target_
fbarchard1
2016/10/04 18:23:45
Done. But it has build errors.
I actually used th
| |
307 export CROSSTOOL=`<path>`/arm-none-linux-gnueabi | |
308 export CXX=$CROSSTOOL-g++ | |
309 export CC=$CROSSTOOL-gcc | |
310 export AR=$CROSSTOOL-ar | |
311 export AS=$CROSSTOOL-as | |
312 export RANLIB=$CROSSTOOL-ranlib | |
313 gclient runhooks | |
314 | |
315 ## Running Unittests | 236 ## Running Unittests |
316 | 237 |
317 ### Windows | 238 ### Windows |
318 | 239 |
319 out\Release\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter="* " | 240 out\Release\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter="* " |
320 | 241 |
321 ### OSX | 242 ### OSX |
322 | 243 |
323 out/Release/libyuv_unittest --gtest_filter="*" | 244 out/Release/libyuv_unittest --gtest_filter="*" |
324 | 245 |
325 ### Linux | 246 ### Linux |
326 | 247 |
327 out/Release/libyuv_unittest --gtest_filter="*" | 248 out/Release/libyuv_unittest --gtest_filter="*" |
328 | 249 |
329 Replace --gtest_filter="*" with specific unittest to run. May include wildcards . e.g. | 250 Replace --gtest_filter="*" with specific unittest to run. May include wildcards . e.g. |
330 | 251 |
331 out/Release/libyuv_unittest --gtest_filter=libyuvTest.I420ToARGB_Opt | 252 out/Release/libyuv_unittest --gtest_filter=*I420ToARGB_Opt |
332 | 253 |
333 ## CPU Emulator tools | 254 ## CPU Emulator tools |
334 | 255 |
335 ### Intel SDE (Software Development Emulator) | 256 ### Intel SDE (Software Development Emulator) |
336 | 257 |
337 Pre-requisite: Install IntelSDE for Windows: http://software.intel.com/en-us/art icles/intel-software-development-emulator | 258 Pre-requisite: Install IntelSDE: http://software.intel.com/en-us/articles/intel- software-development-emulator |
338 | 259 |
339 Then run: | 260 Then run: |
340 | 261 |
341 c:\intelsde\sde -hsw -- out\release\libyuv_unittest.exe --gtest_filter=* | 262 c:\intelsde\sde -hsw -- out\Release\libyuv_unittest.exe --gtest_filter=* |
342 | 263 |
343 | 264 ~/intelsde/sde -skx -- out/Release/libyuv_unittest --gtest_filter=**I420ToAR GB_Opt |
344 ## Memory tools | |
kjellander_chromium
2016/10/04 06:06:21
You can still use all these memory tools after swi
fbarchard1
2016/10/04 18:23:45
Done.
My intent is to fill in documentation as nee
| |
345 | |
346 ### Running Dr Memory memcheck for Windows | |
347 | |
348 Pre-requisite: Install Dr Memory for Windows and add it to your path: http://www .drmemory.org/docs/page_install_windows.html | |
349 | |
350 set GYP_DEFINES=build_for_tool=drmemory target_arch=ia32 | |
kjellander_chromium
2016/10/04 06:06:21
AFAIK, there's no build_for_tool= variable. I don'
fbarchard1
2016/10/04 18:23:45
Done.
I'll document it as just the runtime tool, b
| |
351 call python gyp_libyuv -fninja -G msvs_version=2013 | |
352 ninja -C out\Debug | |
353 drmemory out\Debug\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_fi lter=* | |
354 | |
355 ### Running UBSan | |
356 | |
357 See Chromium instructions for sanitizers: https://www.chromium.org/developers/te sting/undefinedbehaviorsanitizer | |
358 | |
359 Sanitizers available: TSan, MSan, ASan, UBSan, LSan | |
360 | |
361 GYP_DEFINES='ubsan=1' gclient runhooks | |
362 ninja -C out/Release | |
363 | |
364 ### Running Valgrind memcheck | |
365 | |
366 Memory errors and race conditions can be found by running tests under special me mory tools. [Valgrind] [1] is an instrumentation framework for building dynamic analysis tools. Various tests and profilers are built upon it to find memory han dling errors and memory leaks, for instance. | |
367 | |
368 [1]: http://valgrind.org | |
369 | |
370 solutions = [ | |
371 { "name" : "libyuv", | |
372 "url" : "https://chromium.googlesource.com/libyuv/libyuv", | |
373 "deps_file" : "DEPS", | |
374 "managed" : True, | |
375 "custom_deps" : { | |
376 "libyuv/chromium/src/third_party/valgrind": "https://chromium.googles ource.com/chromium/deps/valgrind/binaries", | |
377 }, | |
378 "safesync_url": "", | |
379 }, | |
380 ] | |
381 | |
382 Then run: | |
383 | |
384 GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=memcheck" python gyp_lib yuv | |
385 ninja -C out/Debug | |
386 valgrind out/Debug/libyuv_unittest | |
387 | |
388 | |
389 For more information, see http://www.chromium.org/developers/how-tos/using-valgr ind | |
390 | |
391 ### Running Thread Sanitizer (TSan) | |
392 | |
393 GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=tsan" python gyp_libyuv | |
kjellander_chromium
2016/10/04 06:06:21
This is the old TSan, thus no longer working.
For
| |
394 ninja -C out/Debug | |
395 valgrind out/Debug/libyuv_unittest | |
396 | |
397 For more info, see http://www.chromium.org/developers/how-tos/using-valgrind/thr eadsanitizer | |
398 | |
399 ### Running Address Sanitizer (ASan) | |
400 | |
401 GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=asan" python gyp_libyuv | |
402 ninja -C out/Debug | |
403 valgrind out/Debug/libyuv_unittest | |
404 | |
405 For more info, see http://dev.chromium.org/developers/testing/addresssanitizer | |
406 | |
407 ## Benchmarking | |
408 | |
409 The unittests can be used to benchmark. | |
410 | |
411 ### Windows | |
412 | |
413 set LIBYUV_WIDTH=1280 | |
414 set LIBYUV_HEIGHT=720 | |
415 set LIBYUV_REPEAT=999 | |
416 set LIBYUV_FLAGS=-1 | |
417 out\Release\libyuv_unittest.exe --gtest_filter=*I420ToARGB_Opt | |
kjellander_chromium
2016/10/04 06:06:21
These no longer work?
| |
418 | |
419 | |
420 ### Linux and Mac | |
421 | |
422 LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=1000 out/Release/libyuv_un ittest --gtest_filter=*I420ToARGB_Opt | |
423 | |
424 libyuvTest.I420ToARGB_Opt (547 ms) | |
425 | |
426 Indicates 0.547 ms/frame for 1280 x 720. | |
427 | |
428 ## Making a change | |
429 | |
430 gclient sync | |
431 git checkout -b mycl -t origin/master | |
432 git pull | |
433 <edit files> | |
434 git add -u | |
435 git commit -m "my change" | |
436 git cl lint | |
437 git cl try | |
438 git cl upload -r a-reviewer@chomium.org -s | |
kjellander_chromium
2016/10/04 06:06:21
typo: should be chromium.org
| |
439 <once approved..> | |
440 git cl land | |
OLD | NEW |