Index: build/mac_hermetic_toolchain.md |
diff --git a/build/mac_hermetic_toolchain.md b/build/mac_hermetic_toolchain.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..370c10eb44dd2e3449204ce594dcf3c98b4b12b0 |
--- /dev/null |
+++ b/build/mac_hermetic_toolchain.md |
@@ -0,0 +1,40 @@ |
+# Mac and iOS hermetic toolchain instructions |
+ |
+The following is a short explanation of why we use a the hermetic toolchain |
+and instructions on how to roll a new toolchain. |
+ |
+## How to roll a new hermetic toolchain. |
+ |
+1. Download a new version of Xcode, and confirm either mac or ios builds |
+ properly with this new version. |
+ |
+2. Run the following command: |
+ |
+ ``` |
+ src/build/package_mac_toolchain.py /path/to/Xcode.app/ [ios|mac] |
+ ``` |
+ |
+ The script will create a subset of the toolchain necessary for a build, and |
+ upload them to be used by hermetic builds. |
+ |
+ If for some reason this toolchain version has already been uploaded, the |
+ script will ask if we should create sub revision. This can be necessary when |
+ the package script has been updated to compress additional files. |
+ |
+2. Create a CL with updated [MAC|IOS]_TOOLCHAIN_VERSION and _SUB_REVISION in |
+ src/build/mac_toolchain.py with the version created by the previous command. |
+ |
+3. Run the CL thru the trybots to confirm the roll works. |
+ |
+## Why we use a hermetic toolchain. |
+ |
+Building Chrome Mac currently requires many binaries that come bundled with |
+Xcode, as well the macOS and iphoneOS SDK [also bundled with Xcode]. Note that |
+Chrome ships its own version of clang [compiler], but is dependent on the system |
erikchen
2017/01/17 19:33:09
this is no longer true with hermetic.
IMO, there
|
+install of Xcode for these other binaries. |
+ |
+Chrome should be built against the latest SDK available, but historically, |
+updating the SDK has been nontrivially difficult. Additionally, bot system |
+installs can range from Xcode 5 on some bots, to the latest and |
+greatest. Using hermetic allows for transparent, easier deployment of a |
+consistent toolchain. |