gecko-dev/build/build-clang
Nathan Froyd 37d0db29a9 Bug 1551690 - be more specific about the LLVM target on OS X; r=nalexander
Our current OS X builds use `--target=x86_64-darwin11` (which
corresponds to OS X 10.7).  This target is problematic for two reasons:

* We're actually targeting for OS X 10.9 (`MACOSX_DEPLOYMENT_TARGET`);
* It's slightly different from the default Rust target.

Let's address these problems in reverse order: differences from the Rust
target are bad, because the `--target` we provide to `clang` and the
Rust target find their way into LLVM bitcode files and the linker will
refuse to link together bitcode files that have incompatible targets.

Why are the two incompatible?  The current `--target` doesn't have a
"vendor" in triple-speak, whereas the Rust one has "apple" as the
vendor (`x86_64-apple-darwin`) We therefore need to change the
`--target` we pass to `clang` to have a vendor of "apple".

This need is behind the {init,toolchain}.configure changes,
but it has ramifications elsewhere, because `clang` looks for
`--target`-prefixed build tools.  So we have to change the `--target`
for cctools to get the right tool prefixes and we have to change the
`--target` for building clang ourselves so that *those* builds can find
the newly renamed cctools.

Once we've done, that's really enough; we don't *need to address the
first problem: While the `--target` might be `x86_64-apple-darwin11`,
both `clang` and `rustc` will dynamically choose the target triple that
eventually lands in LLVM bitcode files based on
`MACOSX_DEPLOYMENT_TARGET`, which we set in all builds.  But the current
target is slightly misleading, and the cctools don't need to be prefixed
with a particular Darwin version, since they work for all Darwin
targets.  Let's just drop the "11" from the `--target` and eliminate a
little bit of confusion.

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

--HG--
extra : moz-landing-system : lando
2019-05-21 17:53:44 +00:00
..
README Bug 1421404: Add lld to the build-clang task. r=glandium 2017-12-01 11:12:07 -05:00
android-mangling-error.patch Bug 1500941 - Add a clang mangling crash workaround. r=dmajor 2019-02-23 04:14:20 +00:00
build-clang.py Bug 1551690 - be more specific about the LLVM target on OS X; r=nalexander 2019-05-21 17:53:44 +00:00
clang-4.0-linux64.json Bug 1394825 - Update minimum clang version to 4.0. r=glandium 2019-02-10 02:56:13 +00:00
clang-7-linux64.json Bug 1541943 - Temporarily switch libFuzzer builds back to clang-7. r=froydnj 2019-04-04 16:47:57 +00:00
clang-8-android.json Bug 1537751 - Add x86_64 target to Android Clang build configuration. r=chmanchester 2019-04-16 18:30:56 +00:00
clang-8-linux64-aarch64-cross.json Bug 1540082 - add an aarch64-cross clang build; r=nalexander 2019-04-22 22:11:12 +00:00
clang-8-linux64.json Followup for bug 1538060 - Unbust OSX ccov builds. r=me,a=CristianB 2019-04-02 22:41:59 +09:00
clang-8-macosx64.json Bug 1551690 - be more specific about the LLVM target on OS X; r=nalexander 2019-05-21 17:53:44 +00:00
clang-8-mingw.json Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
clang-tidy-8.patch Bug 1539779 - clang-tidy 8 mixes stderr and stdout causing parsing issues. r=sylvestre 2019-04-01 12:18:44 +00:00
clang-tidy-linux64.json Bug 1536790 - Upgrade to clang-{tidy,format} 8.0.0 (from 7.0.1) r=andi 2019-04-01 12:24:35 +00:00
clang-tidy-macosx64.json Bug 1551690 - be more specific about the LLVM target on OS X; r=nalexander 2019-05-21 17:53:44 +00:00
clang-tidy-win64.json Bug 1536790 - Upgrade to clang-{tidy,format} 8.0.0 (from 7.0.1) r=andi 2019-04-01 12:24:35 +00:00
clang-win64.json Bug 1526443 - Pick up LLVM fix for CFG on arm64-windows builds r=froydnj 2019-05-20 17:53:37 +00:00
compiler-rt-cross-compile.patch Bug 1551690 - be more specific about the LLVM target on OS X; r=nalexander 2019-05-21 17:53:44 +00: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
mingwclang-Reapply-llvm-objcopy-COFF-Implement-add-gnu-debuglin.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Add-support-for-removing-sections.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Clear-the-unwritten-tail-of-coff_s.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Error-out-on-use-of-unhandled-opti.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Fix-handling-of-aux-symbols-for-bi.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Implement-only-keep-debug.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Implement-only-section.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Implement-strip-debug.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Remove-a-superfluous-namespace-qua.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-COFF-Update-symbol-indices-in-weak-exte.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-Consistently-use-createStringError-inst.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00:00
mingwclang-llvm-objcopy-Return-Error-from-Buffer-allocate-ELF-W.patch Bug 1471698 - Switch the mingw clang compiler to the 8 branch r=froydnj 2019-05-17 19:21:15 +00: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
r350774.patch Bug 1541943 - Temporarily switch libFuzzer builds back to clang-7. r=froydnj 2019-04-04 16:47:57 +00:00
r355141-arm64-cfg.patch Bug 1526443 - Pick up LLVM fix for CFG on arm64-windows builds r=froydnj 2019-05-20 17:53:37 +00:00
rename_gcov_flush.patch Followup for bug 1538060 - Unbust OSX ccov builds. r=me,a=CristianB 2019-04-02 22:41:59 +09:00
rename_gcov_flush_7.patch Bug 1541943 - Temporarily switch libFuzzer builds back to clang-7. r=froydnj 2019-04-04 16:47:57 +00:00
revert-r355311.patch Bug 1542827 - Revert a change to LLVM to fix unwinding to the exception handler on Windows/AArch64 r=glandium 2019-04-24 11:52:11 +00: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
unpoison-thread-stacks.patch Backed out changeset 5bc7479ef4a1 (bug 1532502) for very frequent win asan failures with exit code 1 2019-03-09 22:34:50 +02: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.