gecko-dev/build/build-clang
Andi-Bogdan Postelnicu 3c68509ca3 Bug 1799640 - unused include files checker in clang-tidy. r=glandium,sergesanspaille
Ported from clangd, this still can be improved over time, but it can be landed.
This was based on the work from https://bit.ly/3TkV2N1

  * The utility makes the assumption that all header are self contained!
  * It only checkes `Decls` from the main translation file, where SourceLocarion is the
    passed `cpp` file.
  * It builds a list with all of the includes from the translation unit.
  * It matches all of the `Decls` from the main translation units with definitions from the
    included header files and builds a list with used header files.
  * All of the includes that are not part of the matched used header files are considered
    to be unused. Of course this is correct if the first assumption if followed by the coding guide,
    where all of the header are self contained. Since the mozilla code base doesn't follow this approach
    false positives might appear where the is the following situation:
FOO.cpp
  #include <A>
  #Include <B>

If header `A` defines a symbol that is used by header `B` and `B` doesn't include `A` nor
it has symbols defined that are used by `FOO.cpp` then `B` it will be marked as potentially to be removed
by the tool.
This is the limitation determined by header that are not self contained.

The limitation presented above can be fixed in the future with extra work, but it's very time expensive
during the runtime of the checker.

Differential Revision: https://phabricator.services.mozilla.com/D161583
2022-11-23 14:21:03 +00:00
..
1stage.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
2stages.json Bug 1726782 - Separate stage from platform config for clang build. r=firefox-build-system-reviewers,mhentges 2022-02-14 21:10:00 +00:00
4stages-pgo.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
android-mangling-error_clang_12.patch
bug47258-extract-symbols-mbcs.patch
build-clang.py Backed out changeset e9bd011dbf75 (bug 1799423) for causing toolchains failures. CLOSED TREE 2022-11-22 14:22:00 +02:00
clang_include_cleaner.patch Bug 1799640 - unused include files checker in clang-tidy. r=glandium,sergesanspaille 2022-11-23 14:21:03 +00:00
clang-5.0.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
clang-14.json Bug 1792757 - Dump sanitizer heap profile when rss limit is exhausted. r=firefox-build-system-reviewers,glandium 2022-10-07 13:29:59 +00:00
clang-15.json Bug 1800621 - Increase slop to prevent thunk out of range. r=firefox-build-system-reviewers,sergesanspaille 2022-11-17 19:58:25 +00:00
clang-tidy-ci.patch Bug 1758780 - Update builders to clang 14. r=firefox-build-system-reviewers,mhentges,andi 2022-04-21 04:36:24 +00:00
clang-tidy-external-linux64.json
clang-tidy-linux64.json Bug 1799640 - unused include files checker in clang-tidy. r=glandium,sergesanspaille 2022-11-23 14:21:03 +00:00
clang-tidy-macosx64.json Bug 1799640 - unused include files checker in clang-tidy. r=glandium,sergesanspaille 2022-11-23 14:21:03 +00:00
clang-tidy-win64.json Bug 1799640 - unused include files checker in clang-tidy. r=glandium,sergesanspaille 2022-11-23 14:21:03 +00:00
clang-trunk.json Bug 1801041 - Build trunk-based llvm-symbolizer on the toolchains branch. r=firefox-build-system-reviewers,ahochheiden 2022-11-22 00:13:29 +00:00
compiler-rt-no-codesign.patch
compiler-rt-rss-limit-heap-profile.patch Bug 1792757 - Dump sanitizer heap profile when rss limit is exhausted. r=firefox-build-system-reviewers,glandium 2022-10-07 13:29:59 +00:00
downgrade-mangling-error_clang_12.patch
find_symbolizer_linux_clang_10.patch
find_symbolizer_linux_clang_15.patch Bug 1798865 - Adjust llvm-symbolizer lookup order. r=glandium,andi 2022-11-08 08:16:22 +00:00
fuzzing_ccov_build_clang_12.patch
linux64.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
llvmorg-15-init-16512-g4b1e3d193706.patch Bug 1779691 - Stop applying D116995 to clang-trunk. r=firefox-build-system-reviewers,andi 2022-07-20 00:29:07 +00:00
llvmorg-16-init-7778-g232e0a011e8c.patch Bug 1784202 - Update builders to clang 15. r=firefox-build-system-reviewers,andi 2022-11-01 23:46:33 +00:00
llvmorg-16-init-10850-gff111a997f1b.patch Bug 1800621 - Increase slop to prevent thunk out of range. r=firefox-build-system-reviewers,sergesanspaille 2022-11-17 19:58:25 +00:00
macosx64.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
profdata-compat.patch Bug 1784202 - Update builders to clang 15. r=firefox-build-system-reviewers,andi 2022-11-01 23:46:33 +00:00
profile-g4a10504e1f70c.patch
profile.json Bug 1726782 - Create a new task generating a clang profile for PGO. r=firefox-build-system-reviewers,mhentges 2022-02-14 21:10:00 +00:00
README Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00
Remove-FlushViewOfFile-when-unmaping-gcda-files.patch
revert-llvmorg-14-init-3651-g85ba583eba19.patch Bug 1745115 - Apply the same patches as clang 13 to clang trunk. r=firefox-build-system-reviewers,andi 2021-12-10 00:29:59 +00:00
revert-llvmorg-14-init-3652-gf3c2094d8c11.patch Bug 1753859 - Remove changes to clang/test/CodeGen/alloc-fns-alignment.c from patches. r=firefox-build-system-reviewers,andi 2022-02-08 08:20:00 +00:00
revert-llvmorg-14-init-11890-gf86deb18cab6_clang_16.patch Bug 1794955 - Adjust revert-llvmorg-14-init-11890-gf86deb18cab6_clang_16.patch to upstream changes. DONTBUILD 2022-10-13 03:43:55 +00:00
revert-llvmorg-14-init-11890-gf86deb18cab6.patch Bug 1758780 - Update builders to clang 14. r=firefox-build-system-reviewers,mhentges,andi 2022-04-21 04:36:24 +00:00
revert-llvmorg-14-init-14141-gd6d3000a2f6d.patch Bug 1758780 - Update builders to clang 14. r=firefox-build-system-reviewers,mhentges,andi 2022-04-21 04:36:24 +00:00
revert-llvmorg-15-init-11205-gcead4eceb01b.patch Bug 1798613 - Revert llvm-symbolizer change that causes timeouts in some cases. r=firefox-build-system-reviewers,andi 2022-11-07 22:15:55 +00:00
revert-llvmorg-15-init-13446-g7524fe962e47.patch Bug 1776529 - Remove compiler-rt-cross-compile.patch. r=firefox-build-system-reviewers,andi 2022-06-27 22:46:40 +00:00
revert-llvmorg-16-init-7598-g54bfd0484615.patch Bug 1796727 - Exclude ReleaseNotes.rst from clang patches. r=firefox-build-system-reviewers,nalexander DONTBUILD 2022-10-23 23:01:00 +00:00
revert-llvmorg-16-init-7694-g19e984ef8f49.patch Bug 1795576 - Temporarily revert clang trunk change that breaks bindgen. a= DONTBUILD CLOSED TREE 2022-10-17 23:57:47 +00:00
revert-llvmorg-16-init-8201-ge0fb01e97b6b.patch Bug 1797653 - Temporarily revert another clang trunk change that breaks bindgen. r=firefox-build-system-reviewers,andi DONTBUILD 2022-10-27 03:58:14 +00:00
revert-llvmorg-16-init-9324-g01859da84bad.patch Bug 1798840 - Revert clang trunk change that heavily breaks Firefox. 2022-11-03 07:18:33 +00:00
skip-3-stages.json Bug 1726782 - Create a new task generating a clang profile for PGO. r=firefox-build-system-reviewers,mhentges 2022-02-14 21:10:00 +00:00
skip-stage-1-win64.json Backed out changeset e9bd011dbf75 (bug 1799423) for causing toolchains failures. CLOSED TREE 2022-11-22 14:22:00 +02:00
skip-stage-1.json Bug 1751839 - Build clang stage 1 as a separate task. r=firefox-build-system-reviewers,andi 2022-01-25 21:51:17 +00:00
tsan-D101154.patch
unpoison-thread-stacks_clang_10.patch
win64-no-symlink_clang_16.patch Bug 1781188 - Adjust win64-no-symlink.patch to upstream changes. r=firefox-build-system-reviewers,andi 2022-07-26 08:23:46 +00:00
win64-no-symlink.patch Bug 1758780 - Update builders to clang 14. r=firefox-build-system-reviewers,mhentges,andi 2022-04-21 04:36:24 +00:00
win64-ret-null-on-commitment-limit_clang_14.patch Bug 1769798 - Return nullptr on ASan allocator commitment error. r=firefox-build-system-reviewers,ahochheiden 2022-07-27 21:28:52 +00:00
win64.json Bug 1770302 - Consolidate how the clang targets are configured. r=firefox-build-system-reviewers,andi 2022-05-20 08:33:15 +00:00

build-clang.py
==============

A script to build clang from source.

```
usage: build-clang.py [-h] -c CONFIG [--clean]

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        Clang configuration file
  --clean               Clean the build directory
```

Pre-requisites
--------------
* Working build toolchain.
* git
* CMake
* Ninja
* Python 2.7 and 3

Please use the latest available CMake for your platform to avoid surprises.

Config file format
------------------

build-clang.py accepts a JSON config format with the following fields:

* stages: Use 1, 2, 3 or 4 to select different compiler stages.  The default is 2.
* cc: Path to the bootsraping C Compiler.
* cxx: Path to the bootsraping C++ Compiler.
* as: Path to the assembler tool.
* ar: Path to the library archiver tool.
* ranlib: Path to the ranlib tool (optional).
* libtool: Path to the libtool tool (optional).
* ld: Path to the linker.
* patches: Optional list of patches to apply.
* build_type: The type of build to make.  Supported types: Release, Debug, RelWithDebInfo or MinSizeRel.
* targets: The targets supported by the final stage LLVM/clang.
* build_clang_tidy: Whether to build clang-tidy with the Mozilla checks imported.  The default is false.
* osx_cross_compile: Whether to invoke CMake for OS X cross compile builds.
* assertions: Whether to enable LLVM assertions.  The default is false.
* pgo: Whether to build with PGO (requires stages == 4).  The default is false.

The revisions are defined in taskcluster/ci/fetch/toolchains.yml. They are usually commit sha1s corresponding to upstream tags.

Environment Variables
---------------------

The following environment variables are used for cross-compile builds targeting OS X on Linux.

* CROSS_CCTOOLS_PATH: Path to the cctools directory where the cross compiler toolchain is located.
* CROSS_SYSROOT: Path to the OS X SDK directory for cross compile builds.