1Android Clang/LLVM 2================== 3 4For the latest version of this doc, please make sure to visit: 5[Android Clang/LLVM Toolchain Readme Doc](https://android.googlesource.com/platform/external/clang/+/dev/ReadmeAndroid.md) 6 7Platform Projects 8----------------- 9 10The LLVM toolchain is primarily composed of the following projects: 11 12* **external/clang** 13* **external/compiler-rt** 14* **external/llvm** 15 16Each of these projects has three important branches: 17 18* *aosp/master* 19 20 This is the branch that will be present in most platform trees. As such, 21 platform components that use clang or LLVM will build against the headers and 22 libraries in this branch. 23 24 This branch does not contain a full history. Updates to this are done via a 25 squashed merge from the *dev* branch. Aside from updates, patches usually 26 shouldn't be submitted to this branch. Any that are will need to be 27 cherry-picked to *dev*. 28 29* *aosp/dev* 30 31 The primary purpose of this branch is allowing us to decouple the platform 32 compilers from RenderScript and other platform components that depend on LLVM 33 libraries. This means we can update the platform compilers even if 34 RenderScript will need substantial modification for API changes. 35 36 Updates are performed in this branch, and the platform compilers are built 37 from this branch. 38 39* *aosp/upstream-master* 40 41 This branch is an automatically updated direct mirror of the upstream master 42 branch. This is a read only branch that is the merge source for updates to 43 *dev*. 44 45 46Development Flow 47---------------- 48 49Rebases take place in the **aosp/llvm** tree. This tree is a manifest that uses 50the appropriate *dev* branches of each LLVM project and contains only the 51projects needed to build the platform compilers. Updates are done by merging 52from the *aosp/upstream-master* branch. 53 54Conflicts are resolved manually and then a patch is produced to adapt 55Android.mk files (as well as to add/delete any updated source files). 56Prebuilts are then generated using these projects and placed into the proper 57**prebuilts/clang/host** subprojects. 58 59The prebuilt projects contain multiple versions to make it easy to check in a 60new compiler that may not be ready to be enabled by default. Each new toolchain 61will add the following paths: 62 63 prebuilts/clang/host/linux-x86/clang-$BUILD_NUMBER 64 prebuilts/clang/host/darwin-x86/clang-$BUILD_NUMBER 65 prebuilts/clang/host/windows-x86/clang-$BUILD_NUMBER 66 67In order to prepare for the actual rebase (including updating dependent 68projects), we will copy each **external/** *aosp/dev* project to its 69corresponding **external/** *aosp/master* project as a squashed single CL. 70This makes rollbacks simpler, and it also reduces churn on the Android build 71servers. 72This also has the side effect of not spamming non-Android @google.com 73committers to upstream LLVM projects, since their commits will be batched up 74into a single copy commit on each tracked **external/** project. 75 76Prebuilts for llvm-rs-cc and bcc\_compat also need to be generated for 77**prebuilts/sdk**. 78This is done by running **frameworks/rs/update\_rs\_prebuilts.sh** on both Mac 79and Linux. This is done from the normal AOSP platform tree rather than the LLVM 80tree. 81After this completes, the **prebuilts/sdk** project will have a prepared 82branch/CL that can be uploaded for review/commit. 83 84 85Fixing Bugs 86----------- 87 88If we find a host-side bug that needs to be fixed, it may trigger an update of 89the host prebuilts (i.e. rebase). 90Device-side fixes can be pushed directly to **external/** *aosp/master* and then 91copied to **external/** *aosp/dev* to speed up the process (assuming that it 92doesn’t affect the host builds). 93 94 95Looking at Upstream 96------------------- 97 98The upstream repositories are automatically mirrored to the 99*aosp/upstream-master* branch. Update with `git fetch aosp upstream-master`. 100 101 102Communication 103------------- 104 105We have a public mailing list that you can subscribe to: 106[android-llvm@googlegroups.com](https://groups.google.com/forum/#!forum/android-llvm) 107 108 109Guides for Updating Toolchains 110------------------------------ 111 112* [Updating platform toolchains](ToolchainPrebuilts.md) 113* [Updating RenderScript prebuilts](RenderScriptPrebuilts.md) 114