mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
37d0db29a9
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 |
||
---|---|---|
.. | ||
android-mangling-error.patch | ||
build-clang.py | ||
clang-4.0-linux64.json | ||
clang-7-linux64.json | ||
clang-8-android.json | ||
clang-8-linux64-aarch64-cross.json | ||
clang-8-linux64.json | ||
clang-8-macosx64.json | ||
clang-8-mingw.json | ||
clang-tidy-8.patch | ||
clang-tidy-linux64.json | ||
clang-tidy-macosx64.json | ||
clang-tidy-win64.json | ||
clang-win64.json | ||
compiler-rt-cross-compile.patch | ||
compiler-rt-no-codesign.patch | ||
downgrade-mangling-error.patch | ||
find_symbolizer_linux.patch | ||
llvm-debug-frame.patch | ||
loosen-msvc-detection.patch | ||
mingwclang-llvm-objcopy-COFF-Add-support-for-removing-sections.patch | ||
mingwclang-llvm-objcopy-COFF-Clear-the-unwritten-tail-of-coff_s.patch | ||
mingwclang-llvm-objcopy-COFF-Error-out-on-use-of-unhandled-opti.patch | ||
mingwclang-llvm-objcopy-COFF-Fix-handling-of-aux-symbols-for-bi.patch | ||
mingwclang-llvm-objcopy-COFF-Implement-only-keep-debug.patch | ||
mingwclang-llvm-objcopy-COFF-Implement-only-section.patch | ||
mingwclang-llvm-objcopy-COFF-Implement-strip-debug.patch | ||
mingwclang-llvm-objcopy-COFF-Remove-a-superfluous-namespace-qua.patch | ||
mingwclang-llvm-objcopy-COFF-Update-symbol-indices-in-weak-exte.patch | ||
mingwclang-llvm-objcopy-Consistently-use-createStringError-inst.patch | ||
mingwclang-llvm-objcopy-Return-Error-from-Buffer-allocate-ELF-W.patch | ||
mingwclang-Reapply-llvm-objcopy-COFF-Implement-add-gnu-debuglin.patch | ||
r277806.patch | ||
r285657.patch | ||
r289565-for-3.9.patch | ||
r313872.patch | ||
r322325.patch | ||
r322401.patch | ||
r325356.patch | ||
r339636.patch | ||
r350774.patch | ||
r355141-arm64-cfg.patch | ||
README | ||
rename_gcov_flush_7.patch | ||
rename_gcov_flush.patch | ||
revert-r355311.patch | ||
static-llvm-symbolizer.patch | ||
unpoison-thread-stacks.patch | ||
workaround-issue38586.patch |
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.