xref: /aosp_15_r20/external/libyuv/docs/deprecated_builds.md (revision 4e366538070a3a6c5c163c31b791eab742e1657a)
1*4e366538SXin Li# Deprecated Builds
2*4e366538SXin Li
3*4e366538SXin LiOlder documentation on build configs which are no longer supported.
4*4e366538SXin Li
5*4e366538SXin Li## Pre-requisites
6*4e366538SXin Li
7*4e366538SXin LiYou'll need to have depot tools installed: https://www.chromium.org/developers/how-tos/install-depot-tools
8*4e366538SXin LiRefer to chromium instructions for each platform for other prerequisites.
9*4e366538SXin Li
10*4e366538SXin Li## Getting the Code
11*4e366538SXin Li
12*4e366538SXin LiCreate a working directory, enter it, and run:
13*4e366538SXin Li
14*4e366538SXin Li    gclient config https://chromium.googlesource.com/libyuv/libyuv
15*4e366538SXin Li    gclient sync
16*4e366538SXin Li
17*4e366538SXin Li
18*4e366538SXin LiThen you'll get a .gclient file like:
19*4e366538SXin Li
20*4e366538SXin Li    solutions = [
21*4e366538SXin Li      { "name"        : "libyuv",
22*4e366538SXin Li        "url"         : "https://chromium.googlesource.com/libyuv/libyuv",
23*4e366538SXin Li        "deps_file"   : "DEPS",
24*4e366538SXin Li        "managed"     : True,
25*4e366538SXin Li        "custom_deps" : {
26*4e366538SXin Li        },
27*4e366538SXin Li        "safesync_url": "",
28*4e366538SXin Li      },
29*4e366538SXin Li    ];
30*4e366538SXin Li
31*4e366538SXin Li
32*4e366538SXin LiFor iOS add `;target_os=['ios'];` to your OSX .gclient and run `GYP_DEFINES="OS=ios" gclient sync.`
33*4e366538SXin Li
34*4e366538SXin LiBrowse the Git reprository: https://chromium.googlesource.com/libyuv/libyuv/+/master
35*4e366538SXin Li
36*4e366538SXin Li### Android
37*4e366538SXin LiFor Android add `;target_os=['android'];` to your Linux .gclient
38*4e366538SXin Li
39*4e366538SXin Li
40*4e366538SXin Li    solutions = [
41*4e366538SXin Li      { "name"        : "libyuv",
42*4e366538SXin Li        "url"         : "https://chromium.googlesource.com/libyuv/libyuv",
43*4e366538SXin Li        "deps_file"   : "DEPS",
44*4e366538SXin Li        "managed"     : True,
45*4e366538SXin Li        "custom_deps" : {
46*4e366538SXin Li        },
47*4e366538SXin Li        "safesync_url": "",
48*4e366538SXin Li      },
49*4e366538SXin Li    ];
50*4e366538SXin Li    target_os = ["android", "unix"];
51*4e366538SXin Li
52*4e366538SXin LiThen run:
53*4e366538SXin Li
54*4e366538SXin Li    export GYP_DEFINES="OS=android"
55*4e366538SXin Li    gclient sync
56*4e366538SXin Li
57*4e366538SXin LiCaveat: Theres an error with Google Play services updates.  If you get the error "Your version of the Google Play services library is not up to date", run the following:
58*4e366538SXin Li
59*4e366538SXin Li    cd chromium/src
60*4e366538SXin Li    ./build/android/play_services/update.py download
61*4e366538SXin Li    cd ../..
62*4e366538SXin Li
63*4e366538SXin LiFor Windows the gclient sync must be done from an Administrator command prompt.
64*4e366538SXin Li
65*4e366538SXin LiThe sync will generate native build files for your environment using gyp (Windows: Visual Studio, OSX: XCode, Linux: make). This generation can also be forced manually: `gclient runhooks`
66*4e366538SXin Li
67*4e366538SXin LiTo get just the source (not buildable):
68*4e366538SXin Li
69*4e366538SXin Li    git clone https://chromium.googlesource.com/libyuv/libyuv
70*4e366538SXin Li
71*4e366538SXin Li
72*4e366538SXin Li## Building the Library and Unittests
73*4e366538SXin Li
74*4e366538SXin Li### Windows
75*4e366538SXin Li
76*4e366538SXin Li    set GYP_DEFINES=target_arch=ia32
77*4e366538SXin Li    call python gyp_libyuv -fninja -G msvs_version=2013
78*4e366538SXin Li    ninja -j7 -C out\Release
79*4e366538SXin Li    ninja -j7 -C out\Debug
80*4e366538SXin Li
81*4e366538SXin Li    set GYP_DEFINES=target_arch=x64
82*4e366538SXin Li    call python gyp_libyuv -fninja -G msvs_version=2013
83*4e366538SXin Li    ninja -C out\Debug_x64
84*4e366538SXin Li    ninja -C out\Release_x64
85*4e366538SXin Li
86*4e366538SXin Li#### Building with clangcl
87*4e366538SXin Li    set GYP_DEFINES=clang=1 target_arch=ia32
88*4e366538SXin Li    call python tools\clang\scripts\update.py
89*4e366538SXin Li    call python gyp_libyuv -fninja libyuv_test.gyp
90*4e366538SXin Li    ninja -C out\Debug
91*4e366538SXin Li    ninja -C out\Release
92*4e366538SXin Li
93*4e366538SXin Li### OSX
94*4e366538SXin Li
95*4e366538SXin LiClang 64 bit shown. Remove `clang=1` for GCC and change x64 to ia32 for 32 bit.
96*4e366538SXin Li
97*4e366538SXin Li    GYP_DEFINES="clang=1 target_arch=x64" ./gyp_libyuv
98*4e366538SXin Li    ninja -j7 -C out/Debug
99*4e366538SXin Li    ninja -j7 -C out/Release
100*4e366538SXin Li
101*4e366538SXin Li    GYP_DEFINES="clang=1 target_arch=ia32" ./gyp_libyuv
102*4e366538SXin Li    ninja -j7 -C out/Debug
103*4e366538SXin Li    ninja -j7 -C out/Release
104*4e366538SXin Li
105*4e366538SXin Li### iOS
106*4e366538SXin Lihttp://www.chromium.org/developers/how-tos/build-instructions-ios
107*4e366538SXin Li
108*4e366538SXin LiAdd to .gclient last line: `target_os=['ios'];`
109*4e366538SXin Li
110*4e366538SXin Liarmv7
111*4e366538SXin Li
112*4e366538SXin Li    GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=arm32" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv
113*4e366538SXin Li    ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest
114*4e366538SXin Li    ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest
115*4e366538SXin Li
116*4e366538SXin Liarm64
117*4e366538SXin Li
118*4e366538SXin Li    GYP_DEFINES="OS=ios target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv
119*4e366538SXin Li    ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest
120*4e366538SXin Li    ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest
121*4e366538SXin Li
122*4e366538SXin Liboth armv7 and arm64 (fat)
123*4e366538SXin Li
124*4e366538SXin Li    GYP_DEFINES="OS=ios target_arch=armv7 target_subarch=both" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_ios" ./gyp_libyuv
125*4e366538SXin Li    ninja -j7 -C out_ios/Debug-iphoneos libyuv_unittest
126*4e366538SXin Li    ninja -j7 -C out_ios/Release-iphoneos libyuv_unittest
127*4e366538SXin Li
128*4e366538SXin Lisimulator
129*4e366538SXin Li
130*4e366538SXin Li    GYP_DEFINES="OS=ios target_arch=ia32 target_subarch=arm32" GYP_CROSSCOMPILE=1 GYP_GENERATOR_FLAGS="output_dir=out_sim" ./gyp_libyuv
131*4e366538SXin Li    ninja -j7 -C out_sim/Debug-iphonesimulator libyuv_unittest
132*4e366538SXin Li    ninja -j7 -C out_sim/Release-iphonesimulator libyuv_unittest
133*4e366538SXin Li
134*4e366538SXin Li### Android
135*4e366538SXin Lihttps://code.google.com/p/chromium/wiki/AndroidBuildInstructions
136*4e366538SXin Li
137*4e366538SXin LiAdd to .gclient last line: `target_os=['android'];`
138*4e366538SXin Li
139*4e366538SXin Liarmv7
140*4e366538SXin Li
141*4e366538SXin Li    GYP_DEFINES="OS=android" GYP_CROSSCOMPILE=1 ./gyp_libyuv
142*4e366538SXin Li    ninja -j7 -C out/Debug yuv_unittest_apk
143*4e366538SXin Li    ninja -j7 -C out/Release yuv_unittest_apk
144*4e366538SXin Li
145*4e366538SXin Liarm64
146*4e366538SXin Li
147*4e366538SXin Li    GYP_DEFINES="OS=android target_arch=arm64 target_subarch=arm64" GYP_CROSSCOMPILE=1 ./gyp_libyuv
148*4e366538SXin Li    ninja -j7 -C out/Debug yuv_unittest_apk
149*4e366538SXin Li    ninja -j7 -C out/Release yuv_unittest_apk
150*4e366538SXin Li
151*4e366538SXin Liia32
152*4e366538SXin Li
153*4e366538SXin Li    GYP_DEFINES="OS=android target_arch=ia32" GYP_CROSSCOMPILE=1 ./gyp_libyuv
154*4e366538SXin Li    ninja -j7 -C out/Debug yuv_unittest_apk
155*4e366538SXin Li    ninja -j7 -C out/Release yuv_unittest_apk
156*4e366538SXin Li
157*4e366538SXin Li    GYP_DEFINES="OS=android target_arch=ia32 android_full_debug=1" GYP_CROSSCOMPILE=1 ./gyp_libyuv
158*4e366538SXin Li    ninja -j7 -C out/Debug yuv_unittest_apk
159*4e366538SXin Li
160*4e366538SXin Limipsel
161*4e366538SXin Li
162*4e366538SXin Li    GYP_DEFINES="OS=android target_arch=mipsel" GYP_CROSSCOMPILE=1 ./gyp_libyuv
163*4e366538SXin Li    ninja -j7 -C out/Debug yuv_unittest_apk
164*4e366538SXin Li    ninja -j7 -C out/Release yuv_unittest_apk
165*4e366538SXin Li
166*4e366538SXin Liarm32 disassembly:
167*4e366538SXin Li
168*4e366538SXin Li    llvm-objdump -d out/Release/obj/source/libyuv.row_neon.o
169*4e366538SXin Li
170*4e366538SXin Liarm64 disassembly:
171*4e366538SXin Li
172*4e366538SXin Li    llvm-objdump -d out/Release/obj/source/libyuv.row_neon64.o
173*4e366538SXin Li
174*4e366538SXin LiRunning tests:
175*4e366538SXin Li
176*4e366538SXin Li    build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=*
177*4e366538SXin Li
178*4e366538SXin LiRunning test as benchmark:
179*4e366538SXin Li
180*4e366538SXin Li    build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=-1"
181*4e366538SXin Li
182*4e366538SXin LiRunning test with C code:
183*4e366538SXin Li
184*4e366538SXin Li    build/android/test_runner.py gtest -s libyuv_unittest -t 7200 --verbose --release --gtest_filter=* -a "--libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=1 --libyuv_cpu_info=1"
185*4e366538SXin Li
186*4e366538SXin Li#### Building with GN
187*4e366538SXin Li
188*4e366538SXin Li    gn gen out/Release "--args=is_debug=false target_cpu=\"x86\""
189*4e366538SXin Li    gn gen out/Debug "--args=is_debug=true target_cpu=\"x86\""
190*4e366538SXin Li    ninja -C out/Release
191*4e366538SXin Li    ninja -C out/Debug
192*4e366538SXin Li
193*4e366538SXin Li### Building Offical with GN
194*4e366538SXin Li
195*4e366538SXin Li    gn gen out/Official "--args=is_debug=false is_official_build=true is_chrome_branded=true"
196*4e366538SXin Li    ninja -C out/Official
197*4e366538SXin Li
198*4e366538SXin Li#### Building mips with GN
199*4e366538SXin Li
200*4e366538SXin Limipsel
201*4e366538SXin Li    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*4e366538SXin Li    ninja -C out/Default
203*4e366538SXin Li
204*4e366538SXin Limips64el
205*4e366538SXin Li    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*4e366538SXin Li    ninja -C out/Default
207*4e366538SXin Li
208*4e366538SXin Li### Linux
209*4e366538SXin Li
210*4e366538SXin Li    GYP_DEFINES="target_arch=x64" ./gyp_libyuv
211*4e366538SXin Li    ninja -j7 -C out/Debug
212*4e366538SXin Li    ninja -j7 -C out/Release
213*4e366538SXin Li
214*4e366538SXin Li    GYP_DEFINES="target_arch=ia32" ./gyp_libyuv
215*4e366538SXin Li    ninja -j7 -C out/Debug
216*4e366538SXin Li    ninja -j7 -C out/Release
217*4e366538SXin Li
218*4e366538SXin Li#### CentOS
219*4e366538SXin Li
220*4e366538SXin LiOn CentOS 32 bit the following work around allows a sync:
221*4e366538SXin Li
222*4e366538SXin Li    export GYP_DEFINES="host_arch=ia32"
223*4e366538SXin Li    gclient sync
224*4e366538SXin Li
225*4e366538SXin Li### Windows Shared Library
226*4e366538SXin Li
227*4e366538SXin LiModify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUILDING_SHARED_LIBRARY' to 'defines'.
228*4e366538SXin Li
229*4e366538SXin Li    gclient runhooks
230*4e366538SXin Li
231*4e366538SXin LiAfter this command follow the building the library instructions above.
232*4e366538SXin Li
233*4e366538SXin LiIf you get a compile error for atlthunk.lib on Windows, read http://www.chromium.org/developers/how-tos/build-instructions-windows
234*4e366538SXin Li
235*4e366538SXin Li
236*4e366538SXin Li### Build targets
237*4e366538SXin Li
238*4e366538SXin Li    ninja -C out/Debug libyuv
239*4e366538SXin Li    ninja -C out/Debug libyuv_unittest
240*4e366538SXin Li    ninja -C out/Debug compare
241*4e366538SXin Li    ninja -C out/Debug yuvconvert
242*4e366538SXin Li    ninja -C out/Debug yuvconstants
243*4e366538SXin Li    ninja -C out/Debug psnr
244*4e366538SXin Li    ninja -C out/Debug cpuid
245*4e366538SXin Li
246*4e366538SXin Li
247*4e366538SXin Li## Building the Library with make
248*4e366538SXin Li
249*4e366538SXin Li### Linux
250*4e366538SXin Li
251*4e366538SXin Li    make -j7 V=1 -f linux.mk
252*4e366538SXin Li    make -j7 V=1 -f linux.mk clean
253*4e366538SXin Li    make -j7 V=1 -f linux.mk CXX=clang++
254*4e366538SXin Li
255*4e366538SXin Li## Building the Library with cmake
256*4e366538SXin Li
257*4e366538SXin LiInstall cmake: http://www.cmake.org/
258*4e366538SXin Li
259*4e366538SXin LiDefault debug build:
260*4e366538SXin Li
261*4e366538SXin Li    mkdir out
262*4e366538SXin Li    cd out
263*4e366538SXin Li    cmake ..
264*4e366538SXin Li    cmake --build .
265*4e366538SXin Li
266*4e366538SXin LiRelease build/install
267*4e366538SXin Li
268*4e366538SXin Li    mkdir out
269*4e366538SXin Li    cd out
270*4e366538SXin Li    cmake -DCMAKE_INSTALL_PREFIX="/usr/lib" -DCMAKE_BUILD_TYPE="Release" ..
271*4e366538SXin Li    cmake --build . --config Release
272*4e366538SXin Li    sudo cmake --build . --target install --config Release
273*4e366538SXin Li
274*4e366538SXin Li### Windows 8 Phone
275*4e366538SXin Li
276*4e366538SXin LiPre-requisite:
277*4e366538SXin Li
278*4e366538SXin Li* Install Visual Studio 2012 and Arm to your environment.<br>
279*4e366538SXin Li
280*4e366538SXin LiThen:
281*4e366538SXin Li
282*4e366538SXin Li    call "c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_arm\vcvarsx86_arm.bat"
283*4e366538SXin Li
284*4e366538SXin Lior with Visual Studio 2013:
285*4e366538SXin Li
286*4e366538SXin Li    call "c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_arm\vcvarsx86_arm.bat"
287*4e366538SXin Li    nmake /f winarm.mk clean
288*4e366538SXin Li    nmake /f winarm.mk
289*4e366538SXin Li
290*4e366538SXin Li### Windows Shared Library
291*4e366538SXin Li
292*4e366538SXin LiModify libyuv.gyp from 'static_library' to 'shared_library', and add 'LIBYUV_BUILDING_SHARED_LIBRARY' to 'defines'. Then run this.
293*4e366538SXin Li
294*4e366538SXin Li    gclient runhooks
295*4e366538SXin Li
296*4e366538SXin LiAfter this command follow the building the library instructions above.
297*4e366538SXin Li
298*4e366538SXin LiIf you get a compile error for atlthunk.lib on Windows, read http://www.chromium.org/developers/how-tos/build-instructions-windows
299*4e366538SXin Li
300*4e366538SXin Li### 64 bit Windows
301*4e366538SXin Li
302*4e366538SXin Li    set GYP_DEFINES=target_arch=x64
303*4e366538SXin Li    gclient runhooks V=1
304*4e366538SXin Li
305*4e366538SXin Li### ARM Linux
306*4e366538SXin Li
307*4e366538SXin Li    export GYP_DEFINES="target_arch=arm"
308*4e366538SXin Li    export CROSSTOOL=`<path>`/arm-none-linux-gnueabi
309*4e366538SXin Li    export CXX=$CROSSTOOL-g++
310*4e366538SXin Li    export CC=$CROSSTOOL-gcc
311*4e366538SXin Li    export AR=$CROSSTOOL-ar
312*4e366538SXin Li    export AS=$CROSSTOOL-as
313*4e366538SXin Li    export RANLIB=$CROSSTOOL-ranlib
314*4e366538SXin Li    gclient runhooks
315*4e366538SXin Li
316*4e366538SXin Li## Running Unittests
317*4e366538SXin Li
318*4e366538SXin Li### Windows
319*4e366538SXin Li
320*4e366538SXin Li    out\Release\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter="*"
321*4e366538SXin Li
322*4e366538SXin Li### OSX
323*4e366538SXin Li
324*4e366538SXin Li    out/Release/libyuv_unittest --gtest_filter="*"
325*4e366538SXin Li
326*4e366538SXin Li### Linux
327*4e366538SXin Li
328*4e366538SXin Li    out/Release/libyuv_unittest --gtest_filter="*"
329*4e366538SXin Li
330*4e366538SXin LiReplace --gtest_filter="*" with specific unittest to run.  May include wildcards. e.g.
331*4e366538SXin Li
332*4e366538SXin Li    out/Release/libyuv_unittest --gtest_filter=libyuvTest.I420ToARGB_Opt
333*4e366538SXin Li
334*4e366538SXin Li## CPU Emulator tools
335*4e366538SXin Li
336*4e366538SXin Li### Intel SDE (Software Development Emulator)
337*4e366538SXin Li
338*4e366538SXin LiPre-requisite: Install IntelSDE for Windows: http://software.intel.com/en-us/articles/intel-software-development-emulator
339*4e366538SXin Li
340*4e366538SXin LiThen run:
341*4e366538SXin Li
342*4e366538SXin Li    c:\intelsde\sde -hsw -- out\release\libyuv_unittest.exe --gtest_filter=*
343*4e366538SXin Li
344*4e366538SXin Li
345*4e366538SXin Li## Memory tools
346*4e366538SXin Li
347*4e366538SXin Li### Running Dr Memory memcheck for Windows
348*4e366538SXin Li
349*4e366538SXin LiPre-requisite: Install Dr Memory for Windows and add it to your path: http://www.drmemory.org/docs/page_install_windows.html
350*4e366538SXin Li
351*4e366538SXin Li    set GYP_DEFINES=build_for_tool=drmemory target_arch=ia32
352*4e366538SXin Li    call python gyp_libyuv -fninja -G msvs_version=2013
353*4e366538SXin Li    ninja -C out\Debug
354*4e366538SXin Li    drmemory out\Debug\libyuv_unittest.exe --gtest_catch_exceptions=0 --gtest_filter=*
355*4e366538SXin Li
356*4e366538SXin Li### Running UBSan
357*4e366538SXin Li
358*4e366538SXin LiSee Chromium instructions for sanitizers: https://www.chromium.org/developers/testing/undefinedbehaviorsanitizer
359*4e366538SXin Li
360*4e366538SXin LiSanitizers available: TSan, MSan, ASan, UBSan, LSan
361*4e366538SXin Li
362*4e366538SXin Li    GYP_DEFINES='ubsan=1' gclient runhooks
363*4e366538SXin Li    ninja -C out/Release
364*4e366538SXin Li
365*4e366538SXin Li### Running Valgrind memcheck
366*4e366538SXin Li
367*4e366538SXin LiMemory errors and race conditions can be found by running tests under special memory tools. [Valgrind] [1] is an instrumentation framework for building dynamic analysis tools. Various tests and profilers are built upon it to find memory handling errors and memory leaks, for instance.
368*4e366538SXin Li
369*4e366538SXin Li[1]: http://valgrind.org
370*4e366538SXin Li
371*4e366538SXin Li    solutions = [
372*4e366538SXin Li      { "name"        : "libyuv",
373*4e366538SXin Li        "url"         : "https://chromium.googlesource.com/libyuv/libyuv",
374*4e366538SXin Li        "deps_file"   : "DEPS",
375*4e366538SXin Li        "managed"     : True,
376*4e366538SXin Li        "custom_deps" : {
377*4e366538SXin Li           "libyuv/chromium/src/third_party/valgrind": "https://chromium.googlesource.com/chromium/deps/valgrind/binaries",
378*4e366538SXin Li        },
379*4e366538SXin Li        "safesync_url": "",
380*4e366538SXin Li      },
381*4e366538SXin Li    ]
382*4e366538SXin Li
383*4e366538SXin LiThen run:
384*4e366538SXin Li
385*4e366538SXin Li    GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=memcheck" python gyp_libyuv
386*4e366538SXin Li    ninja -C out/Debug
387*4e366538SXin Li    valgrind out/Debug/libyuv_unittest
388*4e366538SXin Li
389*4e366538SXin Li
390*4e366538SXin LiFor more information, see http://www.chromium.org/developers/how-tos/using-valgrind
391*4e366538SXin Li
392*4e366538SXin Li### Running Thread Sanitizer (TSan)
393*4e366538SXin Li
394*4e366538SXin Li    GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=tsan" python gyp_libyuv
395*4e366538SXin Li    ninja -C out/Debug
396*4e366538SXin Li    valgrind out/Debug/libyuv_unittest
397*4e366538SXin Li
398*4e366538SXin LiFor more info, see http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer
399*4e366538SXin Li
400*4e366538SXin Li### Running Address Sanitizer (ASan)
401*4e366538SXin Li
402*4e366538SXin Li    GYP_DEFINES="clang=0 target_arch=x64 build_for_tool=asan" python gyp_libyuv
403*4e366538SXin Li    ninja -C out/Debug
404*4e366538SXin Li    valgrind out/Debug/libyuv_unittest
405*4e366538SXin Li
406*4e366538SXin LiFor more info, see http://dev.chromium.org/developers/testing/addresssanitizer
407*4e366538SXin Li
408*4e366538SXin Li## Benchmarking
409*4e366538SXin Li
410*4e366538SXin LiThe unittests can be used to benchmark.
411*4e366538SXin Li
412*4e366538SXin Li### Windows
413*4e366538SXin Li
414*4e366538SXin Li    set LIBYUV_WIDTH=1280
415*4e366538SXin Li    set LIBYUV_HEIGHT=720
416*4e366538SXin Li    set LIBYUV_REPEAT=999
417*4e366538SXin Li    set LIBYUV_FLAGS=-1
418*4e366538SXin Li    out\Release\libyuv_unittest.exe --gtest_filter=*I420ToARGB_Opt
419*4e366538SXin Li
420*4e366538SXin Li
421*4e366538SXin Li### Linux and Mac
422*4e366538SXin Li
423*4e366538SXin Li    LIBYUV_WIDTH=1280 LIBYUV_HEIGHT=720 LIBYUV_REPEAT=1000 out/Release/libyuv_unittest --gtest_filter=*I420ToARGB_Opt
424*4e366538SXin Li
425*4e366538SXin Li    libyuvTest.I420ToARGB_Opt (547 ms)
426*4e366538SXin Li
427*4e366538SXin LiIndicates 0.547 ms/frame for 1280 x 720.
428*4e366538SXin Li
429*4e366538SXin Li## Making a change
430*4e366538SXin Li
431*4e366538SXin Li    gclient sync
432*4e366538SXin Li    git checkout -b mycl -t origin/master
433*4e366538SXin Li    git pull
434*4e366538SXin Li    <edit files>
435*4e366538SXin Li    git add -u
436*4e366538SXin Li    git commit -m "my change"
437*4e366538SXin Li    git cl lint
438*4e366538SXin Li    git cl try
439*4e366538SXin Li    git cl upload -r [email protected] -s
440*4e366538SXin Li    <once approved..>
441*4e366538SXin Li    git cl land
442