commit | 0c36fd864adeaba19087039cfea35b9e8a81cacb | [log] [tgz] |
---|---|---|
author | Paul Kirth <paulkirth@google.com> | Thu Feb 22 23:40:19 2024 +0000 |
committer | Paul Kirth <paulkirth@google.com> | Thu Feb 22 23:41:02 2024 +0000 |
tree | 0b3d71f39a7c4faa34da42a3d92286904ffaf1d6 | |
parent | 1efed8bd73d40acecdb6387ef4f551c53e5e5073 [diff] |
[patches] Cherrypick RISC-V TLSDESC support Includes commits: 3fa17954dedd59bfad9cef1778719fb6312a5949 03a61d34ebf4f8eeaa6861bec3ab39c75bb41778 ccb99f221422b8de5e1ae04d3427f15878f7cd93 849951f8759171cb6c74d3ccbcf154506fc1f0ae 1117fdd7c16873eb389e988c6a39ad922bae0fd0 1f454ede4660477c3782595975def90c26c19881 36b4a9ccd9f7e04010476e6b2a311f2052a4ac20 407f9c06ea2a4f3fc32647ba22e5b60f695ca4b3 Bug: 322861399 Change-Id: I27a735db8d67a2b39008273163fe8bf7409a6d4f
For the latest version of this doc, please make sure to visit: Android Clang/LLVM Toolchain Readme Doc
You can also visit the Android Clang/LLVM Prebuilts Readme Doc for more information about our prebuilt toolchains (and what versions they are based upon).
$ mkdir llvm-toolchain && cd llvm-toolchain $ repo init -u https://android.googlesource.com/platform/manifest -b llvm-toolchain $ repo sync -c $ python toolchain/llvm_android/build.py
The built toolchain will be installed to out/install/$HOST/clang-dev
.
The Android LLVM team has an internal docker image with dependencies required to build LLVM with MLGO. External users can create a docker image with this configuration from scratch:
# Googlers $ toolchain/llvm_android/docker/prod_env.sh # Other users $ toolchain/llvm_android/docker/test_env.sh # Build toolchain with mlgo $ toolchain/llvm_android/build.py --mlgo
Use
--no-mlgo
option to build without MLGO.
Some common options to build.py
. Use build.py --help
for an updated list of convenience options:
--no-build windows
skips building clang for Windows (relevant when building on Linux).--skip-tests
skips running tests in the LLVM projects.--lto
to build with ThinLTO. LTO is enabled in official Android Clang/LLVM prebuilts but the flag is off by default. This option only affects the second stage Clang toolchain and not the on-device targets (compiler-rt, lldb-server etc).--no-mlgo
to disable MLGO support (see MLGO).If you have an additional llvm tree built and present in your $PATH
, then build.py
might fail during the Windows build of libcxxabi with the error 'libstdc++ version must be at least 4.8.'
. The solution is to remove that path from your $PATH
before invoking build.py
.
To rebuild a particular toolchain, find the manifest file for that release:
$ $TOOLCHAIN_DIR/bin/clang -v Android (6317467 based on r365631c1) clang version 9.0.8...
The build number for that toolchain is 6317467
and the manifest is found in $TOOLCHAIN_DIR/manifest_6317467.xml
Rebuild the toolchain with that manifest:
$ mkdir llvm-toolchain && cd llvm-toolchain $ repo init -u https://android.googlesource.com/platform/manifest -b llvm-toolchain $ cp $TOOLCHAIN_DIR/manifest_6317467.xml .repo/manifests $ repo init -m manifest_6317467.xml $ repo sync -c # Optional: Apply any LLVM/Clang modifications to toolchain/llvm-project $ python toolchain/llvm_android/build.py
This section is out-of-date. The source of truth is moved to http://go/android-llvm-update-process
We can use either llvm-toolchain or master-plus-llvm branch. master-plus-llvm branch is a combination of llvm-toolchain and aosp-master, which can test building platform and create the build switch CL in the same tree. llvm-toolchain is more suitable when trying to reproduce a toolchain from a different release.
$ mkdir master-plus-llvm && cd master-plus-llvm $ repo init -u https://android.googlesource.com/platform/manifest -b master-plus-llvm $ repo sync -c
# replace r407598 with the update version $ export NEW_REVISION=r407598 $ cd toolchain/llvm_android $ ./merge_from_upstream.py --rev $NEW_REVISION
In android_version.py: _patch_level = ‘1’ _svn_revision = $NEW_REVISION
$ ./build.py
Examples are in aosp/1515350 and aosp/1515697.
It is to speed up compile time for the new compiler. The profdata is generated in go/ab/aosp-master-plus-llvm, target Clang-PGO.
An example is in aosp/1513058.
Use cherrypick_cl.py to cherry pick upstream patches:
$ ./cherrypick_cl.py --sha <upstream_patch1_sha> <upstream_patch2_sha> ... --verify-merge --create-cl
We want to find all patches before $NEW_REVISION but reverted after $NEW_REVISION in upstream. Search “revert-checker/android” emails to find candidates, and cherry pick them.
We may revert upstream patches locally or add local patches. Put patch files in patches/, and add patch info at the end of patches/PATCHES.json.
An example is in aosp/1556717.
Clang prebuilts are generated in go/ab/aosp-llvm-toolchain. Use update-prebuilts.py to download them.
$ ./update-prebuilts.py <build_number from aosp-llvm-toolchain>
Then upload clang prebuilts in prebuilts/clang/host/linux-x86, prebuilts/clang/host/darwin-x86, and prebuilts/clang/host/windows-x86 for testing.
An example is in aosp/1532505.
In build/soong/cc/config/global.go: ClangDefaultVersion = “clang-$NEW_VERSION” ClangDefaultShortVersion = “<NEW_CLANG_MAJOR_VERSION>.0.1”
If ther are new compiler warnings we need to suppress, add them at the end of ClangExtraNoOverrideCflags in build/soong/cc/config/clang.go.
If there are new sanitizer flags we need to suppress, add them in build/soong/cc/sanitize.go.
An example is in aosp/1541244.
Put clang linux-x86 prebuilt CL and soong CL in the same topic. Run presubmit check.
Cherry pick the prebuilt and soong CLs to internal main, and run presubmit check. Some tests (like bionic fortify tests) only run there.
Use toolchain/llvm_android/test/scripts/test_prebuilts.py.
$ test/scripts/test_prebuilts.py --prebuilt_cl <linux-x86 cl no> --soong_cl <soong cl no> \ --tag "test_clang_${NEW_VERSION}_v1" --test_kind platform --build <build_number of prebuilts> \ --verbose
The test results are shown in go/forrest. After all tests complete. Run test/scripts/update_results.py
to upload results to go/android-llvm-testing-dashboard.
Some device_boot_health_check tests are flaky. So it is unlikely to get fully green results.
Below tests have been affected by compiler updates. It's better to test them manually on all architectures (arm, arm64, x86, x86_64). bionic_unit_tests or CtsBionicTestCases CtsNNAPITestCases CtsMediaV2TestCases
Run on wine using test/platform/run_windows_tests.sh.
We used to build platform on darwin. But probably we will change to only build and run selected tests.
Currently we submit prebuilts before the soong CL. This usually needs the soong CL to wait for at least six hours to pass presubmit check. Maybe we can submit them together if that is supported by RBE.
All places need to switch to the new compiler are listed in https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+/master/README.md.
The updates in the kernel and NDK are done separately.
After switching, we also need to update the doc.
We have a public mailing list that you can subscribe to: android-llvm@googlegroups.com