nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 1 | # Updating Clang format binaries |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 2 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 3 | Instructions on how to update the [clang-format binaries](clang_format.md) that |
| 4 | come with a checkout of Chromium. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 5 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 6 | ## Prerequisites |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 7 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 8 | You'll need a Windows machine, a Linux machine, and a Mac; all capable of |
| 9 | building clang-format. You'll also need permissions to upload to the appropriate |
| 10 | google storage bucket. Chromium infrastructure team members have this, and |
| 11 | others can be granted the permission based on need. Talk to ncarter or hinoka |
| 12 | about getting access. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 13 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 14 | ## Pick a head svn revision |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 15 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 16 | Consult http://llvm.org/svn/llvm-project/ for the current head revision. This |
| 17 | will be the CLANG_REV you'll use later to check out each platform to a |
| 18 | consistent state. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 19 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 20 | ## Build a release-mode clang-format on each platform |
| 21 | |
qyearsley | c0dc6f4 | 2016-12-02 22:13:39 | [diff] [blame] | 22 | Follow the official instructions here: |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 23 | http://clang.llvm.org/get_started.html. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 24 | |
| 25 | Windows step-by-step: |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 26 | |
| 27 | ```shell |
| 28 | # [double check you have the tools you need] |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 29 | where cmake.exe # You need to install this. |
| 30 | where svn.exe # Maybe fix with: set PATH=%PATH%;D:\src\depot_tools\svn_bin |
dbeam | b71beb8 | 2017-01-26 05:52:40 | [diff] [blame] | 31 | "c:\Program Files (x86)\Microsoft Visual Studio 14.0\vc\vcvarsall.bat" amd64_x86 |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 32 | |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 33 | set CLANG_REV=198831 # You must change this value (see above) |
| 34 | |
| 35 | [from a clean directory, check out and build] |
| 36 | rmdir /S /Q llvm |
| 37 | rmdir /S /Q llvm-build |
| 38 | mkdir llvm |
| 39 | mkdir llvm-build |
| 40 | svn co http://llvm.org/svn/llvm-project/llvm/trunk@%CLANG_REV% llvm |
| 41 | cd llvm\tools |
| 42 | svn co http://llvm.org/svn/llvm-project/cfe/trunk@%CLANG_REV% clang |
| 43 | cd ..\..\llvm-build |
| 44 | set CC=cl |
| 45 | set CXX=cl |
dbeam | b71beb8 | 2017-01-26 05:52:40 | [diff] [blame] | 46 | cmake -G Ninja ..\llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_CRT_RELEASE=MT ^ |
| 47 | -DLLVM_ENABLE_ASSERTIONS=NO -DLLVM_ENABLE_THREADS=NO ^ |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 48 | -DPYTHON_EXECUTABLE=d:\src\depot_tools\python276_bin\python.exe |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 49 | ninja clang-format |
| 50 | bin\clang-format.exe --version |
| 51 | ``` |
| 52 | |
| 53 | Mac & Linux step-by-step: |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 54 | |
| 55 | ```shell |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 56 | # Check out. |
| 57 | export CLANG_REV=198831 # You must change this value (see above) |
| 58 | rm -rf llvm |
| 59 | rm -rf llvm-build |
| 60 | mkdir llvm |
| 61 | mkdir llvm-build |
| 62 | svn co http://llvm.org/svn/llvm-project/llvm/trunk@$CLANG_REV llvm |
| 63 | cd llvm/tools |
| 64 | svn co http://llvm.org/svn/llvm-project/cfe/trunk@$CLANG_REV clang |
| 65 | cd ../../llvm-build |
| 66 | |
| 67 | # Option 1: with cmake |
dbeam | b71beb8 | 2017-01-26 05:52:40 | [diff] [blame] | 68 | MACOSX_DEPLOYMENT_TARGET=10.9 cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \ |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 69 | -DLLVM_ENABLE_ASSERTIONS=NO -DLLVM_ENABLE_THREADS=NO ../llvm/ |
| 70 | time caffeinate ninja clang-format |
| 71 | strip bin/clang-format |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 72 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 73 | # (On Linux, to build with clang, which produces smaller binaries, add this to |
| 74 | # your cmake invocation. |
| 75 | # On Mac, the system compiler is already clang so it's not needed there.) |
| 76 | -DCMAKE_C_COMPILER=$PWD/../chrome/src/third_party/llvm-build/Release+Asserts/bin/clang -DCMAKE_CXX_COMPILER=$PWD/../chrome/src/third_party/llvm-build/Release+Asserts/bin/clang++ |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 77 | ``` |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 78 | |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 79 | Platform specific notes: |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 80 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 81 | * Windows: Visual Studio 2013 only. |
| 82 | * Linux: so far (as of January 2014) we've just included a 64-bit binary. It's |
| 83 | important to disable threading, else clang-format will depend on |
| 84 | libatomic.so.1 which doesn't exist on Precise. |
| 85 | * Mac: Remember to set `MACOSX_DEPLOYMENT_TARGET` when building! If you get |
| 86 | configure warnings, you may need to install XCode 5 and avoid a goma |
| 87 | environment. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 88 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 89 | ## Upload each binary to google storage |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 90 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 91 | Copy the binaries into your chromium checkout (under |
| 92 | `src/buildtools/(win|linux64|mac)/clang-format(.exe?)`). For each binary, you'll |
| 93 | need to run upload_to_google_storage.py according to the instructions in |
thakis | b4016a5 | 2017-02-28 00:06:07 | [diff] [blame] | 94 | [README.txt](https://chromium.googlesource.com/chromium/buildtools/+/master/clang_format/README.txt). |
| 95 | This will upload the binary into a publicly accessible google storage bucket, |
| 96 | and update `.sha1` file in your Chrome checkout. You'll check in the `.sha1` |
| 97 | file (but NOT the clang-format binary) into source control. In order to be able |
| 98 | to upload, you'll need write permission to the bucket -- see the prerequisites. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 99 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 100 | ## Copy the helper scripts and update README.chromium |
| 101 | |
| 102 | There are some auxiliary scripts that ought to be kept updated in lockstep with |
| 103 | the clang-format binary. These get copied into |
| 104 | third_party/clang_format/scripts in your Chromium checkout. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 105 | |
| 106 | The `README.chromium` file ought to be updated with version and date info. |
| 107 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 108 | ## Upload a CL according to the following template |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 109 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 110 | Update clang-format binaries and scripts for all platforms. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 111 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 112 | I followed these instructions: |
| 113 | https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang_format_binaries.md |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 114 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 115 | The binaries were built at clang revision ####### on ####DATETIME####. |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 116 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 117 | BUG= |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 118 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 119 | The change should **always** include new `.sha1` files for each platform (we |
| 120 | want to keep these in lockstep), should **never** include `clang-format` |
| 121 | binaries directly. The change should **always** update `README.chromium` |
andybons | 3322f76 | 2015-08-24 21:37:09 | [diff] [blame] | 122 | |
nodir | 06cbaa0 | 2015-08-25 17:15:24 | [diff] [blame] | 123 | clang-format binaries should weigh in at 1.5MB or less. Watch out for size |
| 124 | regressions. |