Commit Graph

197 Commits

Author SHA1 Message Date
David Major
0fb3cb6a24 Bug 1326486 - build-clang: Install imports and asan symbols only in the final stage r=glandium
Otherwise, PGO builds would fail to find asan at stage2 because the instrumented build uses `LLVM_BUILD_RUNTIME=No`.

Differential Revision: https://phabricator.services.mozilla.com/D69082
2020-04-07 14:12:56 +00:00
David Major
149a4e1d41 Bug 1326486 - build-clang: avoid building unnecessary things in intermediate stages. r=glandium
This will partially atone for making builds longer with PGO.

Depends on D69618

Differential Revision: https://phabricator.services.mozilla.com/D69620
2020-04-07 14:12:47 +00:00
David Major
39215fc4fe Bug 1326486 - build-clang: pass is_final_stage even for stage1. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D69618
2020-04-07 14:12:49 +00:00
Mihai Alexandru Michis
6e318ac471 Backed out 7 changesets (bug 1326486) for causing bpgo failures.
CLOSED TREE

Backed out changeset 810a84a18948 (bug 1326486)
Backed out changeset e04c57ed0c04 (bug 1326486)
Backed out changeset 493c338ad705 (bug 1326486)
Backed out changeset 96701b9815c2 (bug 1326486)
Backed out changeset 8adfc59eb3c5 (bug 1326486)
Backed out changeset 441282fd1fea (bug 1326486)
Backed out changeset a64593d4c645 (bug 1326486)
2020-04-07 17:08:08 +03:00
David Major
773fddeaa4 Bug 1326486 - build-clang: Add support for PGO builds. r=glandium
This adds the ability to do four-stage PGO builds. This was surprisingly straightforward thanks to PGO being a well-supported scenario in LLVM's cmake.

For reference, the stages are:
stage1: Initial build with gcc
stage2: Instrumented build using stage1
stage3: Train by using the instrumented stage2 to build the clang tree
stage4: Optimize using the stage3 compiler and the profdata created with it

Differential Revision: https://phabricator.services.mozilla.com/D69080
2020-04-07 08:32:32 +00:00
David Major
8d0ca79064 Bug 1326486 - build-clang: Add support for 4-stage builds r=glandium
Separating out the mechanical/"boring" changes to make the next patch more clear. This patch adds the ability to build a fourth stage that for now doesn't do anything special.

I changed to using >= to make it more obvious that e.g. "here is what's going to happen for stage 2" -- the off-by-one was too hard on my brain.

Differential Revision: https://phabricator.services.mozilla.com/D69079
2020-04-07 08:29:02 +00:00
David Major
5c15fe7f60 Bug 1326486 - build-clang: Install imports and asan symbols only in the final stage r=glandium
Otherwise, PGO builds would fail to find asan at stage2 because the instrumented build uses `LLVM_BUILD_RUNTIME=No`.

Differential Revision: https://phabricator.services.mozilla.com/D69082
2020-04-07 08:27:36 +00:00
David Major
31cc939032 Bug 1326486 - build-clang: avoid building unnecessary things in intermediate stages. r=glandium
This will partially atone for making builds longer with PGO.

Depends on D69618

Differential Revision: https://phabricator.services.mozilla.com/D69620
2020-04-07 08:27:26 +00:00
David Major
a5b7056a53 Bug 1326486 - build-clang: pass is_final_stage even for stage1. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D69618
2020-04-07 08:25:29 +00:00
Mike Hommey
4a3c606591 Bug 1450088 - Build clang with libxml2 support. r=froydnj
This is required for llvm-mt, which building winchecksec will require.
We do a dummy change to build-clang.sh so as to change the toolchain
index hash.

Differential Revision: https://phabricator.services.mozilla.com/D68153
2020-03-26 21:53:00 +00:00
Andi-Bogdan Postelnicu
5f558eb3a4 Bug 1619921 - enable clang-plugin with support for alpha checkers module. r=froydnj,sg
Differential Revision: https://phabricator.services.mozilla.com/D65314
2020-03-17 07:01:09 +00:00
David Major
1fa367e917 Bug 1614367 - Fix CMAKE_FIND_ROOT_PATH in build-clang for mac r=glandium
Best as I can tell, this was a longstanding typo. This went unnoticed because cmake didn't do any interesting `find`s -- until recently in LLVM 10, where zlib is now queried via `find_package`.

Differential Revision: https://phabricator.services.mozilla.com/D62829
2020-02-18 07:45:12 +00:00
Ricky Stewart
2c3b716311 Bug 1601448 - The clang.tar.xz bootstrap artifact should contain the libclang_rt.builtins-wasm32.a archive r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D56019
2019-12-09 16:59:49 +00:00
Andi-Bogdan Postelnicu
5b7059ac8c Bug 1584175 - Add lib/libclang-cpp.* to the clang-tidy artifact. r=froydnj,dmajor
Since we've upgraded to clang 9, clang-format changed and now uses dynamic libraries
for the clang tooling lib that it leverages.

Differential Revision: https://phabricator.services.mozilla.com/D47265
2019-09-27 12:19:13 +00:00
Nathan Froyd
40765919d7 Bug 1579870 - add wasm support to our clang builds; r=dmajor
Differential Revision: https://phabricator.services.mozilla.com/D45201
2019-09-17 20:14:17 +00:00
David Major
41825e54fd Bug 1578775: Remove LIBCXX_LIBCPPABI_VERSION from build-clang.py r=glandium
This build workaround was made unnecessary (and in fact harmful) by 2d0b4d6bb3 (diff-140d2deaecabaad987b883a1de1c2aa4) which landed in LLVM 9.

It seems that we don't need this anyway even on our current LLVM 8 builds, so landing this separately in preparation for bug 1573211.

Reviewed as part of a larger patch in https://phabricator.services.mozilla.com/D44160#1342283

MANUAL PUSH: This may cause a toolchain rebuild.
2019-09-04 12:01:59 -04:00
Nathan Froyd
036dfbf6a9 Bug 1572724 - remove unused URL_REPO definition from build-clang.py; r=glandium
This definition is now unnecessary, given that the source code is
fetched for us from elsewhere.

Depends on D41368

Differential Revision: https://phabricator.services.mozilla.com/D41369
2019-08-09 21:12:31 +00:00
Nathan Froyd
128b7adc73 Bug 1572724 - preserve symlinks when installing libgcc; r=glandium
Otherwise we wind up with clownshoes like:

```
froydnj@hawkeye:/opt/build/froydnj/tmp/clang$ ls -l lib/libstdc++.so*
-rwxr-xr-x 1 froydnj froydnj 11633720 Aug  6 20:44 lib/libstdc++.so
-rwxr-xr-x 1 froydnj froydnj 11633720 Aug  6 20:44 lib/libstdc++.so.6
-rwxr-xr-x 1 froydnj froydnj 11633720 Aug  6 20:44 lib/libstdc++.so.6.0.24
```

and have duplicate copies of shared libraries in our toolchain packages,
which are not exactly small.

Differential Revision: https://phabricator.services.mozilla.com/D41368
2019-08-09 21:11:31 +00:00
Mike Hommey
7864ddeec6 Bug 1573378 - Make build-clang independent of what MOZ_FETCHES_DIR resolves to. r=nalexander
Differential Revision: https://phabricator.services.mozilla.com/D41711
2019-08-15 11:21:42 +09:00
Mike Hommey
6d834cb75d Bug 1571576 - Flush stderr before running subprocesses in build-clang. r=nalexander
Differential Revision: https://phabricator.services.mozilla.com/D40728
2019-08-07 13:54:22 +09:00
Mike Hommey
0205898e4a Bug 1571566 - Fix cmake error handling in build-clang.py after python3 conversion. r=dmajor
Differential Revision: https://phabricator.services.mozilla.com/D40720
2019-08-07 13:54:21 +09:00
Mike Hommey
31a7f6933c Bug 1570541 - Use git fetch tasks for clang. r=froydnj
What this means is that the sources for clang/llvm are downloaded
separately from the toolchain build (which also means we finally only
download a given version of clang once for all platforms).

In turn, this means the build-clang.py script needs to start with an
existing llvm-project tree, and we choose to make build-clang.py expect
that it's run from the llvm-project root directory.

This also means we don't need to download git for the windows toolchain
task.

Differential Revision: https://phabricator.services.mozilla.com/D40402
2019-08-07 13:54:15 +09:00
Mike Hommey
120a32afc4 Bug 1570598 - Pass the clang json file as an argument to the toolchain script. r=froydnj
Make the argument use the same format as resources, so move the
sub-script invocation accordingly.

Differential Revision: https://phabricator.services.mozilla.com/D40364
2019-08-03 07:08:49 +09:00
Mike Hommey
aeac8f1b0c Bug 1570564 - Convert build-clang.py to python 3. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D40152
2019-08-02 19:06:20 +09:00
Mike Hommey
e1026a9702 Bug 1570515 - Change how build-clang.py consumes subprocess output. r=froydnj
Bug 1546136 wrapped subprocess execution output to capture cmake's, but
at the detriment of other output, and hiding everything unless an error
occurs.

So instead, we only capture the output when the called process is cmake,
and even when it is cmake, we don't pipe stderr at all (since we only
care about cmake's stdout) and we print out stdout as it comes in rather
than later. We then later check the output for hints at the more useful
cmake logs and dump them.

While here, add verbosity to ninja output (which gives the command
lines, rather than generic "Building foo.o" output).

Differential Revision: https://phabricator.services.mozilla.com/D40142
2019-08-02 19:06:00 +09:00
Sylvestre Ledru
52aad7ba43 Bug 1566336 - Build clang from git rather than subversion. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D38361

MANUAL PUSH: avoid closing autoland while clang rebuilds.
2019-08-01 07:26:55 +09:00
Bogdan Tara
5fe3fe3210 Backed out changeset 4ba7a3e079e3 (bug 1566336) for static analysis bustage CLOSED TREE 2019-08-01 00:38:59 +03:00
Sylvestre Ledru
3108423b6d Bug 1566336 - Build clang from git rather than subversion. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D38361

MANUAL PUSH: avoid closing autoland while clang rebuilds.
2019-08-01 05:56:39 +09:00
Sylvestre Ledru
ad846f7d0a Bug 1566409 - Force the deactivation of the llvm binding generation r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D38176
2019-07-17 05:07:53 +00:00
Andrew Halberstadt
de1233b5da Bug 1563797 - Use 'backports.shutil_which' instead of 'which' in the build system r=firefox-build-system-reviewers,chmanchester
Credit: Callek for figuring out an issue in 'make check' making the binary
absolute in mozbuild.base.

Differential Revision: https://phabricator.services.mozilla.com/D37319
2019-07-11 14:04:39 +00:00
Nathan Froyd
01e4f05295 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
2019-05-21 17:53:44 +00:00
Andreea Pavel
0263bcca5b Backed out changeset ae7096d1add7 (bug 1551690) for toolchain bustages on a CLOSED TREE 2019-05-21 17:05:24 +03:00
Nathan Froyd
166d5472ce 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
2019-05-21 13:48:23 +00:00
Coroiu Cristina
01743811df Backed out changeset 2e560a9e4bcf (bug 1551690) for build bustages 2019-05-21 03:51:56 +03:00
Nathan Froyd
5cb73c3181 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
2019-05-15 21:13:17 +00:00
Nathan Froyd
cdd3a1457f Bug 1540082 - add support for extra runtime targets in build-clang.py; r=firefox-build-system-reviewers,chmanchester
This change enables us to build compiler-rt and related
libraries (e.g. address sanitizer, etc.) for whatever targets we like,
assuming that we have an accessible sysroot for the target on the build
machine.

Depends on D28404

Differential Revision: https://phabricator.services.mozilla.com/D28405
2019-04-23 19:45:06 +00:00
Nathan Froyd
5e8de22dd5 Bug 1546136 - dump cmake logs on command failures; r=firefox-build-system-reviewers,chmanchester
CMake errors can be pretty opaque, especially if CMake is being run
inside the Ninja build process.  Let's try to surface those errors to
make problems easier to debug.

Differential Revision: https://phabricator.services.mozilla.com/D28360
2019-04-23 19:44:55 +00:00
Nathan Froyd
cd646210a3 Bug 1544568 - pull out runtime library-related settings in build-clang.py; r=firefox-build-system-reviewers,chmanchester
It seems better to set switches enabling runtime libraries and switches
enabling runtime libraries to build in different places, as future
changes might only enable runtime libraries for certain targets, but not
need any special switches for building.

Depends on D27594

Differential Revision: https://phabricator.services.mozilla.com/D27595
2019-04-16 17:18:01 +00:00
Nathan Froyd
f4a64c9641 Bug 1544568 - make setting of LLVM_*_TARGETS more explicit; r=firefox-build-system-reviewers,chmanchester
`android_targets` here is a dict, not a sequence, and while `iter` on a
dict object implicitly means `dict.iterkeys()`, that's not really
obvious.  We should instead be explicit about what we're doing here.

Depends on D27593

Differential Revision: https://phabricator.services.mozilla.com/D27594
2019-04-16 17:15:15 +00:00
Nathan Froyd
672a928fcf Bug 1544568 - don't build XRay libraries; r=firefox-build-system-reviewers,chmanchester
We don't need them and we might as well be explicit about not building them.

Depends on D27592

Differential Revision: https://phabricator.services.mozilla.com/D27593
2019-04-16 17:14:15 +00:00
Nathan Froyd
62a0270fcc Bug 1544568 - move compiler-rt runtimes setup into build_one_stage; r=firefox-build-system-reviewers,chmanchester
The setup for compiler-rt is currently done before the stage 2 build,
which happens to be the final stage for our android runtime libraries
build.  But we may also want to build runtime libraries on 3-stage
bootstrap builds, in which case we don't want compiler-rt to be active
for the second stage.  Move the setup into build_one_stage so that the
setup is controllable by is_final_stage, which is set in all the place
that we care about.

Differential Revision: https://phabricator.services.mozilla.com/D27592
2019-04-16 17:13:58 +00:00
Chris Manchester
6be9702c8b Bug 1542400 - Don't set LLVM_DEFAULT_TARGET_TRIPLE to possibly erroneous value when building clang runtimes. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D26384
2019-04-08 16:28:24 +00:00
Mike Hommey
d71627074b Bug 1510897 - Don't build clang with LLVM_ENABLE_LIBCXX=ON. r=froydnj
As of clang 8, llvm-config doesn't return all flags clang was built
with, and omits some flags that do impact the libclang ABI,
-stdlib=libc++ being one of them (it might well be the only one).

Building clang with LLVM_ENABLE_LIBCXX=ON does build it with
-stdlib=libc++, but is unrelated to whether or not libc++ is built and
shipped with clang, which still happens without it.

So while versions older than clang 8 are not really affected, it doesn't
hurt to build clang without -stdlib=libc++ (especially when it
currently only applies to the clang used to cross build android with
PGO, not even the other android cross builds), in preparation for
switching to clang 8.

Differential Revision: https://phabricator.services.mozilla.com/D25031
2019-03-28 23:07:21 +00:00
Chris Manchester
64ffdf5803 Bug 1536529 - Re-factor variables for android runtimes in build-clang.py r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D24435
2019-03-28 00:28:03 +00:00
Jesse Schwartzentruber
968e02f7b9 Bug 1533560 - Enable sanitizer runtimes in Android clang. r=chmanchester
Differential Revision: https://phabricator.services.mozilla.com/D24346
2019-03-21 22:13:05 +00:00
Chris Manchester
edf3d18349 Bug 1536259 - Add missing ANDROID define for clang runtime builds. r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D23957
2019-03-19 17:47:21 +00:00
Chris Manchester
1593846020 Bug 1535771 - Append android compiler-rt flags in build-clang.py to avoid conflicts. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D23745
2019-03-15 23:19:15 +00:00
Nathan Froyd
ea23371cf3 Bug 1451104 - part 3 - inform stage2/3 clang about gcc binutils; r=glandium
We do this to encourage clang to find an new-enough linker instead of
the system one.

Differential Revision: https://phabricator.services.mozilla.com/D22881
2019-03-15 01:29:04 +00:00
Nathan Froyd
2e8945e096 Bug 1451104 - part 2 - force clang to always pick up its local GCC headers and libraries; r=glandium
We want our clang bootstrap to use the GCC headers we're building with,
not whatever sysroot it happens to find on the server we're building on.

The -gcc-toolchain argument we specify when building clang will also be
picked up by llvm-config, so we need to strip it out when building the
plugin. Otherwise, we will get peculiar failures about not being able to
find C++ header files.

Differential Revision: https://phabricator.services.mozilla.com/D22880
2019-03-15 01:28:55 +00:00
Gurzau Raul
fd60eca0b4 Backed out 6 changesets (bug 1451104) for toolchains bustage on a CLOSED TREE.
Backed out changeset 2f6199beeb71 (bug 1451104)
Backed out changeset 7c116f85ede6 (bug 1451104)
Backed out changeset 5179c8066914 (bug 1451104)
Backed out changeset 675f73d41eb4 (bug 1451104)
Backed out changeset c64bfaad8a2f (bug 1451104)
Backed out changeset 991777e081ff (bug 1451104)
2019-03-14 05:02:44 +02:00