blob: 41643266a5c1badcd1404e5338c2a25b0e4147de [file] [log] [blame] [view]
# Extracting Corpora for ThinLTO-enabled Projects
These steps use inlining for size as an example.
## Generate the corpus
Pass `-thinlto-emit-index-files -save-temps=import` to lld, this will output `.3.import.bc`
and `.thinlto.bc` files in your source directory.
## Consolidate the corpus
Run `tools/extract_ir.py` with `--thinlto_build=local` and set `--obj_base_dir`, `--output_dir`
accordingly.
## Modify corpus_description.json
Modification of `corpus_description.json` which is written to `output_dir` is necessary. An error will
be thrown if this is not done. \
The `global_command_override` field in the json needs to be filled with the options to run
**clang** with on each module. These options should be inferred from the lld command that generated the
corpus. Most importantly, it should include "-c", some "-O" flag, relevant mllvm flags, and target/arch
flags. \
\
Here's an example based on Chrome:
```json
{
"global_command_override": [
"-fPIC",
"-mllvm",
"-instcombine-lower-dbg-declare=0",
"-mllvm",
"-import-instr-limit=5",
"-march=armv7-a",
"--target=arm-linux-androideabi23",
"-no-canonical-prefixes",
"-O2",
"-nostdlib++",
"--sysroot=/path/to/linux-x86_64/sysroot",
"-c"
]
}
```