gecko-dev/build/build-clang
Mike Hommey 9f6417f045 Bug 1410148 - Backport llvm r289565 to clang 3.9. r=gps
I was able to reproduce the failure to apply llvm-dsymutil on the last
mozilla-central revision before debug info was temporarily disabled for
rust, and validated that the problem was gone in clang 4.

After some bisection, r289565 was identified as having fixed the
problem, which, reading the commit message, makes sense.

It was however not possible to simply cherry-pick, because of multiple
code changes between 3.9 and 4. However, apart from the volume of
conflicting changes, it was more or less straightforward to backport.

Interestingly, the patch for r313872 was relying on changes from
r289565, which is why it required a variant specifically for 3.9, but
now we can use the same patch as for other versions. Well, except
there's a small difference in the context, and build-clang.py doesn't
allow fuzz, so we manually edit the patch to remove that line from the
context.

--HG--
extra : rebase_source : de0ab262d401c37c0e9300b0ef7923a07c009d87
2017-12-28 14:54:51 +09:00
..
build-clang.py Bug 1421404: Add lld to the build-clang task. r=glandium 2017-12-01 11:12:07 -05:00
clang-3.9-linux64.json Bug 1410148 - Backport llvm r289565 to clang 3.9. r=gps 2017-12-28 14:54:51 +09:00
clang-4-linux64.json Bug 1409267 - Patch compiler-rt to always use prctl(PR_SET_PTRACER). r=froydnj 2017-11-07 15:07:30 +09:00
clang-5-linux64.json Bug 1409267 - Patch compiler-rt to always use prctl(PR_SET_PTRACER). r=froydnj 2017-11-07 15:07:30 +09:00
clang-6-pre-linux64.json Bug 1415689 - Add Clang 6 (pre) and use it for ASan builds. r=froydnj 2017-11-10 10:14:26 +01:00
clang-macosx64.json Bug 1338651 part 1: Change docker image home dir to /build. r=dustin,mshal 2017-08-28 08:44:51 -03:00
clang-tidy-linux64.json Bug 1338651 part 1: Change docker image home dir to /build. r=dustin,mshal 2017-08-28 08:44:51 -03:00
clang-tidy-macosx64.json Bug 1338651 part 1: Change docker image home dir to /build. r=dustin,mshal 2017-08-28 08:44:51 -03:00
clang-tidy-win32.json Bug 1340650 - Update clang-tidy to LLVM r295482; r=mystor 2017-02-17 14:49:50 -05:00
clang-tidy-win64.json Bug 1340650 - Update clang-tidy to LLVM r295482; r=mystor 2017-02-17 14:49:50 -05:00
clang-win32.json Bug 1425984 - Backport LLVM revision 318309 to fix clang-cl bustage with VS2017 15.5. r=dmajor 2017-12-19 14:16:31 -05:00
clang-win64.json Bug 1425984 - Backport LLVM revision 318309 to fix clang-cl bustage with VS2017 15.5. r=dmajor 2017-12-19 14:16:31 -05:00
compiler-rt-cross-compile.patch Bug 1331957 - Part 9: Upgrade cctools used for building clang on OS X for ld 264.3.102; r=froydnj 2017-02-03 10:19:33 -05:00
fflush-before-unlocking.patch Bug 1421692 - Apply compiler-rt patch to flush gcda files before unlocking them. r=glandium 2017-11-29 13:18:22 +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
hide-gcda-profiling-symbols.patch Bug 1401230 - Apply compiler-rt patch to avoid crashes on shutdown when unloading shared libraries. r=glandium 2017-09-20 22:52:15 +02:00
llvm-debug-frame-for-5.patch Bug 1408277 - Add a toolchain job for clang 5.0. r=froydnj 2017-10-13 13:22:41 +09: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
msvc-host-x64.patch Bug 1412952: We want a HostX64 linker even with 32-bit clang-cl.exe. r=froydnj 2017-11-03 12:29:58 -04:00
pr28831-r280042.patch Bug 1331957 - Part 1: Update the clang OSX build config file for cross-compile builds on the infrastructure; r=froydnj 2017-02-03 10:18:50 -05:00
pr_set_ptracer.patch Bug 1409267 - Patch compiler-rt to always use prctl(PR_SET_PTRACER). r=froydnj 2017-11-07 15:07:30 +09:00
r277806.patch Bug 1331957 - Part 6: Reapply LLVM r277806 since our clang-plugin depends on it; r=froydnj 2017-02-03 10:19:17 -05:00
r285657.patch Bug 1331957 - Part 7: Reapply LLVM r285657 to work around bug 1291397 on clang 3.9; r=froydnj 2017-02-03 10:19:23 -05:00
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
r318309.patch Bug 1425984 - Backport LLVM revision 318309 to fix clang-cl bustage with VS2017 15.5. r=dmajor 2017-12-19 14:16:31 -05:00
README Bug 1421404: Add lld to the build-clang task. r=glandium 2017-12-01 11:12:07 -05:00
return-empty-string-non-mangled.patch Bug 1262781 - Update to clang 3.8 final. r=froydnj 2016-04-13 06:54:22 +09: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.
* 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.