gecko-dev/build/build-clang
David Major c7dcbe9387 Bug 1675600 - Use the new pass manager during LTO r=firefox-build-system-reviewers,glandium
Currently, in LTO builds, we use the new pass manager during the initial translation to bitcode but not for the final optimization during linking.

On Linux, we can enable the new pass manager during LTO with a plugin option. I've landed a patch upstream to allow it on Windows as well, which is included here.

Switching the pass manager brings speed improvements on its own, but it also reduces code size by ~6%, which we can use a portion of as budget to increase the import limit (via the hot multiplier) for even more speed improvements.

Differential Revision: https://phabricator.services.mozilla.com/D96108
2020-11-17 04:07:54 +00:00
..
README Bug 1326486 - build-clang: Add support for PGO builds. r=glandium 2020-04-07 14:12:58 +00:00
android-mangling-error.patch
bug-1605181-isConstexpr.patch
bug-1606630-if_constexpr.patch
bug47258-extract-symbols-mbcs.patch Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
build-clang.py Bug 1677147 - Update build-clang.py for "llvmbuildectomy" r=firefox-build-system-reviewers,mhentges 2020-11-14 03:15:54 +00:00
clang-5.0-linux64.json
clang-7-linux64.json Bug 1639618 - Use correct find_symbolizer_linux patch when building clang-7. r=froydnj 2020-05-20 16:56:35 +00:00
clang-10-linux64.json Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
clang-11-android.json Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
clang-11-linux64-aarch64-cross.json Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
clang-11-linux64.json Bug 1675600 - Use the new pass manager during LTO r=firefox-build-system-reviewers,glandium 2020-11-17 04:07:54 +00:00
clang-11-macosx64.json Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
clang-11-mingw.json Bug 1668304 - Bump mingw-clang builds to clang 11 r=tjr,dmajor 2020-10-24 05:07:23 +00:00
clang-11-win64-2stage.json Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
clang-11-win64.json Bug 1675600 - Use the new pass manager during LTO r=firefox-build-system-reviewers,glandium 2020-11-17 04:07:54 +00:00
clang-android.json
clang-linux64-aarch64-cross.json Bug 1326486 - build-clang: Convert 3-stage builds to 4-stage PGO builds. r=glandium 2020-04-07 14:12:51 +00:00
clang-linux64.json Bug 1650419 - Backport the tail merge fix to our version of Clang 9.0.1. r=dmajor 2020-07-07 22:03:46 +00:00
clang-macosx64.json
clang-tidy-ci.patch Bug 1625884 - move `clang-tidy` and `clang-format` to `clang-10`. r=nalexander 2020-04-09 14:16:44 +00:00
clang-tidy-external-linux64.json Bug 1664394 - rename linux64-civet-tidy to linux64-external-tidy;r=andi 2020-09-15 15:06:10 +00:00
clang-tidy-linux64.json Bug 1650057 - Avoid using external clang-tidy patches when dealing with paths that need to be escaped. r=marco 2020-07-02 14:11:19 +00:00
clang-tidy-macosx64.json Bug 1650057 - Avoid using external clang-tidy patches when dealing with paths that need to be escaped. r=marco 2020-07-02 14:11:19 +00:00
clang-tidy-no-errors.patch
clang-tidy-win64.json Bug 1650057 - Avoid using external clang-tidy patches when dealing with paths that need to be escaped. r=marco 2020-07-02 14:11:19 +00:00
clang-win64-2stage.json Bug 1631627 - Change 1stage clang-cl to 2stage. r=dmajor 2020-04-21 18:47:55 +00:00
clang-win64.json Bug 1650419 - Backport the tail merge fix to our version of Clang 9.0.1. r=dmajor 2020-07-07 22:03:46 +00:00
clang_format_10.patch Bug 1633694 - For `clang-tools` apply fixes from `clang-tools-extra` master branch to our own `clang-10` based build. r=sylvestre 2020-04-28 11:49:50 +00:00
compiler-rt-cross-compile.patch
compiler-rt-no-codesign.patch
critical_section_on_gcov_flush-rG02ce9d8ef5a8.patch
downgrade-mangling-error.patch Bug 1676669 - Trim some context on downgrade-mangling-error.patch for clang-12 r=firefox-build-system-reviewers,rstewart 2020-11-11 16:19:25 +00:00
find_symbolizer_linux.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
find_symbolizer_linux_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
llvmorg-10-init-5191-ga84b200e604-windows-pgo.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
llvmorg-11-init-4265-g2dcbdba8540.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
llvmorg-11-init-4265-g2dcbdba8540_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
llvmorg-11-init-15486-gfc937806efd-dont-jump-to-landing-pads.patch Bug 1650419 - Backport the tail merge fix to our version of Clang 9.0.1. r=dmajor 2020-07-07 22:03:46 +00:00
llvmorg-12-init-10926-gb79e990f401-LTO-new-pass-manager.patch Bug 1675600 - Use the new pass manager during LTO r=firefox-build-system-reviewers,glandium 2020-11-17 04:07:54 +00:00
loosen-msvc-detection.patch
r350774.patch
rG7e18aeba5062.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
rG7e18aeba5062_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
rename_gcov_flush.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
rename_gcov_flush_7.patch
rename_gcov_flush_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
rename_gcov_flush_clang_11.patch Bug 1661129 - Add toolchain tasks for clang 11.0.0 rc2 (not yet used) r=nalexander 2020-08-25 22:22:12 +00:00
revert-r362047-and-r362065.patch Bug 1667841 - Update revert-r362047-and-r362065.patch for clang-12 r=firefox-build-system-reviewers,rstewart 2020-09-28 19:03:18 +00:00
static-llvm-symbolizer.patch
tsan-hang-be41a98ac222.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
tsan-hang-be41a98ac222_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
unpoison-thread-stacks.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00
unpoison-thread-stacks_clang_10.patch Backed out changeset c17af0632260 (bug 1616692) as per Eric's request. CLOSED TREE 2020-05-20 08:29:18 +03:00

README

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 3.
* python_path: Path to the Python 2.7 installation on the machine building clang.
* gcc_dir: Path to the gcc toolchain installation, only required on Linux.
* 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.
* build_libcxx: Whether to build with libcxx.  The default is false.
* 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.