Roderick Sheeter | 00946ca | 2019-05-08 09:42:35 -0700 | [diff] [blame] | 1 | ## Build & Run |
| 2 | |
| 3 | Depending on what area you are working in change or add `HB_DEBUG_<whatever>`. |
| 4 | Values defined in `hb-debug.hh`. |
| 5 | |
| 6 | ```shell |
| 7 | # quick sanity check |
rsheeter | 1b58bf2 | 2019-05-09 20:06:29 -0700 | [diff] [blame] | 8 | time (make -j4 CPPFLAGS='-DHB_DEBUG_SUBSET=100' \ |
rsheeter | d8a49b5 | 2019-05-10 16:52:43 -0700 | [diff] [blame] | 9 | && (make -j4 -C test/api check || cat test/api/test-suite.log)) |
Roderick Sheeter | 00946ca | 2019-05-08 09:42:35 -0700 | [diff] [blame] | 10 | |
rsheeter | 1b58bf2 | 2019-05-09 20:06:29 -0700 | [diff] [blame] | 11 | # slower sanity check |
| 12 | time (make -j4 CPPFLAGS='-DHB_DEBUG_SUBSET=100' \ |
| 13 | && make -j4 -C src check \ |
| 14 | && make -j4 -C test/api check \ |
| 15 | && make -j4 -C test/subset check) |
Roderick Sheeter | 00946ca | 2019-05-08 09:42:35 -0700 | [diff] [blame] | 16 | |
| 17 | # confirm you didn't break anything else |
rsheeter | 1b58bf2 | 2019-05-09 20:06:29 -0700 | [diff] [blame] | 18 | time (make -j4 CPPFLAGS='-DHB_DEBUG_SUBSET=100' \ |
| 19 | && make -j4 check) |
Roderick Sheeter | 00946ca | 2019-05-08 09:42:35 -0700 | [diff] [blame] | 20 | |
| 21 | # often catches files you didn't add, e.g. test fonts to EXTRA_DIST |
| 22 | make distcheck |
| 23 | ``` |
| 24 | |
rsheeter | d8a49b5 | 2019-05-10 16:52:43 -0700 | [diff] [blame] | 25 | ### Run tests with asan |
| 26 | |
rsheeter | f49a5be | 2019-05-20 20:45:11 -0700 | [diff] [blame] | 27 | **NOTE**: this sometimes yields harder to read results than the full fuzzer |
| 28 | |
rsheeter | d8a49b5 | 2019-05-10 16:52:43 -0700 | [diff] [blame] | 29 | ```shell |
rsheeter | a0febba | 2019-05-16 15:58:49 -0700 | [diff] [blame] | 30 | # For nice symbols tell asan how to symoblize. Note that it doesn't like versioned copies like llvm-symbolizer-3.8 |
| 31 | # export ASAN_SYMBOLIZER_PATH=path to version-less llvm-symbolizer |
| 32 | # ex |
| 33 | export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-3.8/bin/llvm-symbolizer |
| 34 | |
rsheeter | d8a49b5 | 2019-05-10 16:52:43 -0700 | [diff] [blame] | 35 | ./configure CC=clang CXX=clang++ CPPFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address |
| 36 | # make/run tests as usual |
| 37 | ``` |
| 38 | |
Roderick Sheeter | 00946ca | 2019-05-08 09:42:35 -0700 | [diff] [blame] | 39 | ### Debug with GDB |
| 40 | |
| 41 | ``` |
| 42 | cd ./util |
| 43 | ../libtool --mode=execute gdb --args ./hb-subset ... |
| 44 | ``` |
| 45 | |
| 46 | ### Enable Debug Logging |
| 47 | |
| 48 | ```shell |
| 49 | # make clean if you previously build w/o debug logging |
| 50 | make CPPFLAGS=-DHB_DEBUG_SUBSET=100 |
| 51 | ``` |
| 52 | |
| 53 | ## Build and Test via CMake |
| 54 | |
| 55 | Note: You'll need to first install ninja-build via apt-get. |
| 56 | |
| 57 | ```shell |
| 58 | cd harfbuzz |
| 59 | mkdir buid |
| 60 | cmake -DHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild && CTEST_OUTPUT_ON_FAILURE=1 ninja -Cbuild test |
| 61 | ``` |
rsheeter | 4063181 | 2019-05-08 09:47:34 -0700 | [diff] [blame] | 62 | ## Test with the Fuzzer |
| 63 | |
| 64 | ```shell |
| 65 | # push your changs to a branch on googlefonts/harfbuzz |
| 66 | # In a local copy of oss-fuzz, edit projects/harfbuzz/Dockerfile |
| 67 | # Change the git clone to pull your branch |
rsheeter | f49a5be | 2019-05-20 20:45:11 -0700 | [diff] [blame] | 68 | |
| 69 | # Do this periodically |
rsheeter | 4063181 | 2019-05-08 09:47:34 -0700 | [diff] [blame] | 70 | sudo python infra/helper.py build_image harfbuzz |
rsheeter | f49a5be | 2019-05-20 20:45:11 -0700 | [diff] [blame] | 71 | |
| 72 | # Do these to update/run |
rsheeter | 4063181 | 2019-05-08 09:47:34 -0700 | [diff] [blame] | 73 | sudo python infra/helper.py build_fuzzers --sanitizer address harfbuzz |
| 74 | sudo python infra/helper.py run_fuzzer harfbuzz hb-subset-fuzzer |
| 75 | ``` |
Garret Rieger | cf414e3 | 2019-09-27 09:55:17 -0700 | [diff] [blame] | 76 | |
| 77 | ## Profiling |
| 78 | |
| 79 | ``` |
| 80 | make clean |
| 81 | ./configure CXXFLAGS="-fno-omit-frame-pointer -g" |
| 82 | make |
| 83 | perf record -o <perf output file> -g <command to run> |
| 84 | perf report -i<perf output file> |
| 85 | ``` |
| 86 | |