gecko-dev/build/build-clang
Mike Hommey a0b6688faa Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj
Firefox uses multiple processes. It has intentional leaks, and when
running with ASAN, we have suppressions to eliminate those. When running
ASAN builds through CI tests, when Firefox exits, each of the processes
(parent and child) exits and goes through its leaks and when there are
(which is a given), the ASAN runtime runs llvm-symbolizer to symbolicate
and match against suppressions. So each process runs llvm-symbolizer. At
the same time.

Some of the addresses to symbolicate are in libxul. Which contains all
DWARF info, making it a ~1GB monster. Oh, and because you're lucky,
things align perfectly such that libxul size is a multiple of the page
size. That makes llvm-symbolizer pread() the file instead of mmap()ing
it. Did I say there are multiple processes? So suddenly you have n
processes simultaneously allocating and filling 1GB of memory each, on
CI machines that have enough memory for the job they usually run, but
not enough for a sudden rush of n GB.

And things go awry. When you're lucky and the OOM killer didn't take
care of killing the CI entirely, symbolication couldn't happen and the
suppressions are not matched, and leaks are reported.

This all turns out it originates in how llvm-symbolicate chooses between
pread() and mmap(), which turns out is just defaults not being made for
binary files.

Differential Revision: https://phabricator.services.mozilla.com/D16010

--HG--
extra : moz-landing-system : lando
2019-01-10 00:18:28 +00:00
..
README Bug 1421404: Add lld to the build-clang task. r=glandium 2017-12-01 11:12:07 -05:00
aarch64-vastart-checking.patch Backed out 2 changesets (bug 1485016, bug 1512921) as requested by tjr. 2018-12-21 05:59:24 +02:00
build-clang.py Bug 1513798 - Use x86_64-darwin11 as a prefix for cctools-port, rather than x86_64-apple-darwin11. r=nalexander 2018-12-18 10:50:08 +09:00
clang-3.9-linux64.json Backout changeset b0abf5269c25 (bug 1492037) to give time to toolchains to build without blocking other landings. 2018-09-19 07:01:33 +09:00
clang-7-android.json Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
clang-7-linux64.json Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
clang-7-macosx64.json Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
clang-tidy-linux64.json Bug 1516374 - Upgrade clang to 7.0.1. r=dmajor 2019-01-09 23:01:46 +00:00
clang-tidy-macosx64.json Bug 1516374 - Upgrade clang to 7.0.1. r=dmajor 2019-01-09 23:01:46 +00:00
clang-tidy-win32.json Bug 1516374 - Upgrade clang to 7.0.1. r=dmajor 2019-01-09 23:01:46 +00:00
clang-tidy-win64.json Bug 1516374 - Upgrade clang to 7.0.1. r=dmajor 2019-01-09 23:01:46 +00:00
clang-trunk-mingw.json Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
clang-win64.json Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
compiler-rt-cross-compile.patch Bug 1513798 - Use x86_64-darwin11 as a prefix for cctools-port, rather than x86_64-apple-darwin11. r=nalexander 2018-12-18 10:50:08 +09:00
compiler-rt-no-codesign.patch Bug 1492663 - Upgrade most CI builds to clang 7 r=froydnj 2018-10-25 07:38:35 +09:00
downgrade-mangling-error.patch Bug 1418415 - Add a patch to win64-clang to downgrade a mangling error. r=dmajor 2018-10-31 19:51:52 +00:00
find_symbolizer_linux.patch Bug 1415689 - Add Clang 6 (pre) and use it for ASan builds. r=froydnj 2017-11-10 10:14:26 +01:00
llvm-debug-frame.patch
loosen-msvc-detection.patch Bug 1412952 - Loosen clang's MSVC detection to accept our automation's fake paths. r=froydnj 2017-11-03 12:29:58 -04:00
r277806.patch
r285657.patch
r289565-for-3.9.patch Bug 1410148 - Backport llvm r289565 to clang 3.9. r=gps 2017-12-28 14:54:51 +09:00
r313872.patch Bug 1410148 - Backport llvm r289565 to clang 3.9. r=gps 2017-12-28 14:54:51 +09:00
r322325.patch Bug 1484888 - Apply upstream patch that fixes a clang crash with stack overflow on PGO + LTO on Linux. r=froydnj 2018-08-22 09:52:17 +09:00
r322401.patch Bug 1478927 - Upgrade clang 6 to 6.0.1 and apply some miscompilation patches. r=dmajor 2018-07-27 15:53:02 +09:00
r325356.patch Bug 1478927 - Upgrade clang 6 to 6.0.1 and apply some miscompilation patches. r=dmajor 2018-07-27 15:53:02 +09:00
r339636.patch Bug 1483123 - Apply miscompilation fix from clang upstream. r=froydnj 2018-08-15 17:34:21 +09:00
r342649-hotpatch-8-byte-nops.patch Backed out 2 changesets (bug 1485016, bug 1512921) as requested by tjr. 2018-12-21 05:59:24 +02:00
r342652-unpoison-thread-stacks.patch Backed out 2 changesets (bug 1485016, bug 1512921) as requested by tjr. 2018-12-21 05:59:24 +02:00
r343123-pin-asan-dll.patch Backed out 2 changesets (bug 1485016, bug 1512921) as requested by tjr. 2018-12-21 05:59:24 +02:00
r346300-compiler-rt-windows-mmap.patch Backed out 2 changesets (bug 1485016, bug 1512921) as requested by tjr. 2018-12-21 05:59:24 +02:00
r350774.patch Bug 1518726 - Apply https://reviews.llvm.org/D56475 to clang. r=froydnj 2019-01-10 00:18:28 +00:00
rename_gcov_flush_.patch Bug 1502021 - Keep renaming __gcov_flush in LLVM to avoid naming clashes with builds mixing GCC and LLVM coverage instrumentation. r=decoder 2018-11-14 01:41:22 +01:00
static-llvm-symbolizer.patch Bug 1492037 - Build clang with LLVM as a shared library. r=froydnj 2018-09-21 10:41:36 +09:00
workaround-issue38586.patch Backed out 2 changesets (bug 1479800, bug 1483779)for frequent cgx and arm64 failures 2018-08-17 09:50:30 +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.
* Subversion
* CMake
* Ninja
* Python 2.7

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:

* llvm_revision: The LLVM SVN revision to build.
* stages: Use 1, 2, or 3 to select different compiler stages.  The default is 3.
* llvm_repo: SVN path to the LLVM repo.
* clang_repo: SVN path to the Clang repo.
* extra_repo: SVN path to the clang-tools-extra repo.
* lld_repo: SVN path to the lld repo.
* compiler_repo: SVN path to the compiler-rt repo.
* libcxx_repo: SVN path to the libcxx repo.
* libcxxabi_repo: SVN path to the libcxxabi repo.
* 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.

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.