Home | History | Annotate | Download | only in clang
      1 Android Clang/LLVM
      2 ==================
      3 
      4 For 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 
      7 Platform Projects
      8 -----------------
      9 
     10 The LLVM toolchain is primarily composed of the following projects:
     11 
     12 * **external/clang**
     13 * **external/compiler-rt**
     14 * **external/llvm**
     15 
     16 Each 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 
     46 Development Flow
     47 ----------------
     48 
     49 Rebases take place in the **aosp/llvm** tree. This tree is a manifest that uses
     50 the appropriate *dev* branches of each LLVM project and contains only the
     51 projects needed to build the platform compilers. Updates are done by merging
     52 from the *aosp/upstream-master* branch.
     53 
     54 Conflicts are resolved manually and then a patch is produced to adapt
     55 Android.mk files (as well as to add/delete any updated source files).
     56 Prebuilts are then generated using these projects and placed into the proper
     57 **prebuilts/clang/host** subprojects.
     58 
     59 The prebuilt projects contain multiple versions to make it easy to check in a
     60 new compiler that may not be ready to be enabled by default. Each new toolchain
     61 will 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 
     67 In order to prepare for the actual rebase (including updating dependent
     68 projects), we will copy each **external/** *aosp/dev* project to its
     69 corresponding **external/** *aosp/master* project as a squashed single CL.
     70 This makes rollbacks simpler, and it also reduces churn on the Android build
     71 servers.
     72 This also has the side effect of not spamming non-Android @google.com
     73 committers to upstream LLVM projects, since their commits will be batched up
     74 into a single copy commit on each tracked **external/** project.
     75 
     76 Prebuilts for llvm-rs-cc and bcc\_compat also need to be generated for
     77 **prebuilts/sdk**.
     78 This is done by running **frameworks/rs/update\_rs\_prebuilts.sh** on both Mac
     79 and Linux. This is done from the normal AOSP platform tree rather than the LLVM
     80 tree.
     81 After this completes, the **prebuilts/sdk** project will have a prepared
     82 branch/CL that can be uploaded for review/commit.
     83 
     84 
     85 Fixing Bugs
     86 -----------
     87 
     88 If we find a host-side bug that needs to be fixed, it may trigger an update of
     89 the host prebuilts (i.e. rebase).
     90 Device-side fixes can be pushed directly to **external/** *aosp/master* and then
     91 copied to **external/** *aosp/dev* to speed up the process (assuming that it
     92 doesnt affect the host builds).
     93 
     94 
     95 Looking at Upstream
     96 -------------------
     97 
     98 The upstream repositories are automatically mirrored to the
     99 *aosp/upstream-master* branch. Update with `git fetch aosp upstream-master`.
    100 
    101 
    102 Communication
    103 -------------
    104 
    105 We have a public mailing list that you can subscribe to:
    106 [android-llvm (a] googlegroups.com](https://groups.google.com/forum/#!forum/android-llvm)
    107 
    108 
    109 Guides for Updating Toolchains
    110 ------------------------------
    111 
    112 * [Updating platform toolchains](ToolchainPrebuilts.md)
    113 * [Updating RenderScript prebuilts](RenderScriptPrebuilts.md)
    114