annotate contrib/fuzz/README.rst @ 43044:f9d35f01b8b3

setup: build extensions in parallel by default The build_ext distutils command in Python 3.5+ has a "parallel" option that controls whether to build extensions in parallel. It is disabled by default (None) and can be set to an integer value for number of cores or True to indicate use all available CPU cores. This commit changes our build_ext command override to set "parallel" to True unless a value has been provided by the caller. On my machine, this makes `python setup.py build_ext` 1-4s faster. It is worth noting that at this time, each individual source file constituting the extension is still built serially. For Mercurial, this means that we can't build faster than the slowest-to-build extension, which is the zstd extension by a long shot. This means that setup.py is still not very efficient at utilizing multiple cores. But we're better than before. Differential Revision: https://phab.mercurial-scm.org/D6923 # no-check-commit because of foo_bar naming
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 30 Sep 2019 17:26:41 -0700
parents e437de3881c1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36680
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
1 How to add fuzzers (partially cribbed from oss-fuzz[0]):
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
2
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
3 1) git clone https://github.com/google/oss-fuzz
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
4 2) cd oss-fuzz
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
5 3) python infra/helper.py build_image mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
6 4) docker run --cap-add=SYS_PTRACE -it -v $HG_REPO_PATH:/hg-new \
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
7 gcr.io/oss-fuzz/mercurial bash
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
8 5) cd /src
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
9 6) rm -r mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
10 7) ln -s /hg-new mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
11 8) cd mercurial
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
12 9) compile
36700
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
13 10) ls $OUT
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
14
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
15 Step 9 is literally running the command "compile", which is part of
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
16 the docker container. Once you have that working, you can build the
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
17 fuzzers like this (in the oss-fuzz repo):
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
18
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
19 python infra/helper.py build_fuzzers --sanitizer address mercurial $HG_REPO_PATH
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
20
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
21 (you can also say "memory", "undefined" or "coverage" for
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
22 sanitizer). Then run the built fuzzers like this:
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
23
e437de3881c1 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com>
parents: 36680
diff changeset
24 python infra/helper.py run_fuzzer mercurial -- $FUZZER
36680
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
25
66f2e622a2ed fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com>
parents:
diff changeset
26 0: https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md