Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 1 | page.title=Initializing a Build Environment |
| 2 | @jd:body |
| 3 | |
| 4 | <!-- |
Clay Murphy | 768b82a | 2013-11-12 11:32:41 -0800 | [diff] [blame] | 5 | Copyright 2013 The Android Open Source Project |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 6 | |
| 7 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | you may not use this file except in compliance with the License. |
| 9 | You may obtain a copy of the License at |
| 10 | |
| 11 | http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | |
| 13 | Unless required by applicable law or agreed to in writing, software |
| 14 | distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | See the License for the specific language governing permissions and |
| 17 | limitations under the License. |
| 18 | --> |
| 19 | <div id="qv-wrapper"> |
| 20 | <div id="qv"> |
| 21 | <h2>In this document</h2> |
| 22 | <ol id="auto-toc"> |
| 23 | </ol> |
| 24 | </div> |
| 25 | </div> |
| 26 | |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 27 | <p>This section describes how to set up your local work environment to build |
| 28 | the Android source files. You will need to use Linux or Mac OS. Building under |
| 29 | Windows is not currently supported.</p> |
| 30 | <p><strong>Note</strong>: The source download is approximately 8.5GB in size. |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 31 | You will need over 30GB free to complete a single build, and |
| 32 | up to 100GB (or more) for a full set of builds.</em></p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 33 | <p>For an overview of the entire code-review and code-update process, see <a |
| 34 | href="life-of-a-patch.html">Life of a Patch</a>.</p> |
| 35 | <h2 id="choosing-a-branch">Choosing a Branch</h2> |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 36 | <p>Some of the requirements for your build environment are determined by which |
| 37 | version of the source code you plan to compile. See |
| 38 | <a href="build-numbers.html">Build Numbers</a> for a full listing of branches you may |
| 39 | choose from. You may also choose to download and build the latest source code |
| 40 | (called "master"), in which case you will simply omit the branch specification |
| 41 | when you initialize the repository.</p> |
| 42 | <p>Once you have selected a branch, follow the appropriate instructions below to |
| 43 | set up your build environment.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 44 | <h2 id="setting-up-a-linux-build-environment">Setting up a Linux build environment</h2> |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 45 | <p>These instructions apply to all branches, including master.</p> |
| 46 | <p>The Android build is routinely tested in house on recent versions of |
| 47 | Ubuntu LTS (10.04), but most distributions should have the required |
| 48 | build tools available. Reports of successes or failures on other |
| 49 | distributions are welcome.</p> |
| 50 | <p>For Gingerbread (2.3.x) and newer versions, including the master |
| 51 | branch, a 64-bit environment is required. Older versions can be |
| 52 | compiled on 32-bit systems.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 53 | <p><strong>Note</strong>: It is also possible to build Android in a virtual machine. |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 54 | If you are running Linux in a virtual machine, you will need at |
| 55 | least 16GB of RAM/swap and 30GB or more of disk space in order to |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 56 | build the Android tree.</p> |
| 57 | <p>See the <a href="building.html">Downloading and Building</a> page for the |
| 58 | list of hardware and software requirements. Then follow the detailed |
| 59 | instructions for Ubuntu and MacOS below.</p> |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 60 | |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 61 | <h3 id="installing-the-jdk">Installing the JDK</h3> |
| 62 | <p>The latest version of Android in the <a |
| 63 | href="https://android.googlesource.com/">Android Open Source Project (AOSP)</a> |
| 64 | requires Java 7. On Ubuntu, use <a href="http://openjdk.java.net/install/">OpenJDK</a>.</p> |
| 65 | <p>Java 7: For the latest version of Android</p> |
| 66 | <pre><code>$ sudo apt-get update |
| 67 | $ sudo apt-get install openjdk-7-jdk |
| 68 | </code></pre> |
| 69 | |
| 70 | <p>Optionally, update the default Java version by running:</p> |
| 71 | <pre><code>$ sudo update-alternatives --config java |
| 72 | $ sudo update-alternatives --config javac |
| 73 | </code></pre> |
| 74 | |
| 75 | <p>To develop older versions of Android, download and install the corresponding version of the <a |
| 76 | href="http://www.oracle.com/technetwork/java/javase/archive-139210.html">Java JDK</a>:<br/> |
| 77 | Java 6: for Gingerbread through KitKat<br/> |
| 78 | Java 5: for Cupcake through Froyo</p> |
| 79 | |
| 80 | <p><strong>Note</strong>: The <code>lunch</code> command in the build step will ensure that the Sun JDK is |
| 81 | used instead of any previously installed JDK.</p> |
| 82 | |
| 83 | <h3 id="installing-required-packages-ubuntu-1204">Installing required packages (Ubuntu 12.04)</h3> |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 84 | <p>You will need a 64-bit version of Ubuntu. Ubuntu 12.04 is recommended. |
Conley Owens | 7858613 | 2013-10-08 13:16:00 -0700 | [diff] [blame] | 85 | Building using an older version of Ubuntu is not supported on master or recent releases.</p> |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 86 | <pre><code>$ sudo apt-get install git gnupg flex bison gperf build-essential \ |
| 87 | zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ |
| 88 | libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ |
| 89 | libgl1-mesa-dev g++-multilib mingw32 tofrodos \ |
| 90 | python-markdown libxml2-utils xsltproc zlib1g-dev:i386 |
| 91 | $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so |
| 92 | </code></pre> |
| 93 | |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 94 | <h3 id="installing-required-packages-ubuntu-1004-1110">Installing required packages (Ubuntu 10.04 -- 11.10)</h3> |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 95 | <p>Building on Ubuntu 10.04-11.10 is no longer supported, but may be useful for building older |
| 96 | releases of AOSP.</p> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 97 | <pre><code>$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ |
| 98 | zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ |
| 99 | x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ |
| 100 | libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ |
| 101 | libxml2-utils xsltproc |
| 102 | </code></pre> |
| 103 | <p>On Ubuntu 10.10:</p> |
| 104 | <pre><code>$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so |
| 105 | </code></pre> |
| 106 | <p>On Ubuntu 11.10:</p> |
| 107 | <pre><code>$ sudo apt-get install libx11-dev:i386 |
| 108 | </code></pre> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 109 | <h3 id="configuring-usb-access">Configuring USB Access</h3> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 110 | <p>Under GNU/linux systems (and specifically under Ubuntu systems), |
| 111 | regular users can't directly access USB devices by default. The |
| 112 | system needs to be configured to allow such access.</p> |
| 113 | <p>The recommended approach is to create a file |
| 114 | <code>/etc/udev/rules.d/51-android.rules</code> (as the root user) and to copy |
| 115 | the following lines in it. <code><username></code> must be replaced by the |
| 116 | actual username of the user who is authorized to access the phones |
| 117 | over USB.</p> |
| 118 | <pre><code># adb protocol on passion (Nexus One) |
| 119 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>" |
| 120 | # fastboot protocol on passion (Nexus One) |
| 121 | SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>" |
| 122 | # adb protocol on crespo/crespo4g (Nexus S) |
| 123 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>" |
| 124 | # fastboot protocol on crespo/crespo4g (Nexus S) |
| 125 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>" |
| 126 | # adb protocol on stingray/wingray (Xoom) |
| 127 | SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>" |
| 128 | # fastboot protocol on stingray/wingray (Xoom) |
| 129 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>" |
| 130 | # adb protocol on maguro/toro (Galaxy Nexus) |
| 131 | SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>" |
| 132 | # fastboot protocol on maguro/toro (Galaxy Nexus) |
| 133 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>" |
| 134 | # adb protocol on panda (PandaBoard) |
| 135 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>" |
Martin Storsjo | 62678bb | 2013-09-30 13:38:16 +0300 | [diff] [blame] | 136 | # adb protocol on panda (PandaBoard ES) |
| 137 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", MODE="0600", OWNER="<username>" |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 138 | # fastboot protocol on panda (PandaBoard) |
| 139 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>" |
| 140 | # usbboot protocol on panda (PandaBoard) |
| 141 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>" |
| 142 | # usbboot protocol on panda (PandaBoard ES) |
| 143 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>" |
| 144 | # adb protocol on grouper/tilapia (Nexus 7) |
| 145 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>" |
| 146 | # fastboot protocol on grouper/tilapia (Nexus 7) |
| 147 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>" |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 148 | # adb protocol on manta (Nexus 10) |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 149 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>" |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 150 | # fastboot protocol on manta (Nexus 10) |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 151 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>" |
| 152 | </code></pre> |
| 153 | <p>Those new rules take effect the next time a device is plugged in. |
| 154 | It might therefore be necessary to unplug the device and plug it |
| 155 | back into the computer.</p> |
| 156 | <p>This is known to work on both Ubuntu Hardy Heron (8.04.x LTS) and |
| 157 | Lucid Lynx (10.04.x LTS). Other versions of Ubuntu or other |
| 158 | variants of GNU/linux might require different configurations.</p> |
| 159 | <p><a name="ccache"></a></p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 160 | <h3 id="setting-up-ccache">Setting up ccache</h3> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 161 | <p>You can optionally tell the build to use the ccache compilation tool. |
| 162 | Ccache acts as a compiler cache that can be used to speed-up rebuilds. |
| 163 | This works very well if you do "make clean" often, or if you frequently |
| 164 | switch between different build products.</p> |
| 165 | <p>Put the following in your .bashrc or equivalent.</p> |
| 166 | <pre><code>export USE_CCACHE=1 |
| 167 | </code></pre> |
| 168 | <p>By default the cache will be stored in ~/.ccache. |
| 169 | If your home directory is on NFS or some other non-local filesystem, |
| 170 | you will want to specify the directory in your .bashrc as well.</p> |
| 171 | <pre><code>export CCACHE_DIR=<path-to-your-cache-directory> |
| 172 | </code></pre> |
| 173 | <p>The suggested cache size is 50-100GB. |
| 174 | You will need to run the following command once you have downloaded |
| 175 | the source code:</p> |
| 176 | <pre><code>prebuilts/misc/linux-x86/ccache/ccache -M 50G |
| 177 | </code></pre> |
| 178 | <p>When building Ice Cream Sandwich (4.0.x) or older, ccache is in |
| 179 | a different location:</p> |
| 180 | <pre><code>prebuilt/linux-x86/ccache/ccache -M 50G |
| 181 | </code></pre> |
| 182 | <p>This setting is stored in the CCACHE_DIR and is persistent.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 183 | <h3 id="using-a-separate-output-directory">Using a separate output directory</h3> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 184 | <p>By default, the output of each build is stored in the out/ |
| 185 | subdirectory of the matching source tree.</p> |
| 186 | <p>On some machines with multiple storage devices, builds are |
| 187 | faster when storing the source files and the output on |
| 188 | separate volumes. For additional performance, the output |
| 189 | can be stored on a filesystem optimized for speed instead |
| 190 | of crash robustness, since all files can be re-generated |
| 191 | in case of filesystem corruption.</p> |
| 192 | <p>To set this up, export the <code>OUT_DIR_COMMON_BASE</code> variable |
| 193 | to point to the location where your output directories |
| 194 | will be stored.</p> |
| 195 | <pre><code>export OUT_DIR_COMMON_BASE=<path-to-your-out-directory> |
| 196 | </code></pre> |
| 197 | <p>The output directory for each separate source tree will be |
| 198 | named after the directory holding the source tree.</p> |
| 199 | <p>For instance, if you have source trees as <code>/source/master1</code> |
| 200 | and <code>/source/master2</code> and <code>OUT_DIR_COMMON_BASE</code> is set to |
| 201 | <code>/output</code>, the output directories will be <code>/output/master1</code> |
| 202 | and <code>/output/master2</code>.</p> |
| 203 | <p>It's important in that case to not have multiple source |
| 204 | trees stored in directories that have the same name, |
| 205 | as those would end up sharing an output directory, with |
| 206 | unpredictable results.</p> |
| 207 | <p>This is only supported on Jelly Bean (4.1) and newer, |
| 208 | including the master branch.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 209 | <h2 id="setting-up-a-mac-os-x-build-environment">Setting up a Mac OS X build environment</h2> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 210 | <p>In a default installation, OS X runs on a case-preserving but case-insensitive |
| 211 | filesystem. This type of filesystem is not supported by git and will cause some |
| 212 | git commands (such as "git status") to behave abnormally. Because of this, we |
| 213 | recommend that you always work with the AOSP source files on a case-sensitive |
| 214 | filesystem. This can be done fairly easily using a disk image, discussed below.</p> |
| 215 | <p>Once the proper filesystem is available, building the master branch in a modern |
| 216 | OS X environment is very straightforward. Earlier branches, including ICS, |
| 217 | require some additional tools and SDKs.</p> |
| 218 | <h3 id="creating-a-case-sensitive-disk-image">Creating a case-sensitive disk image</h3> |
| 219 | <p>You can create a case-sensitive filesystem within your existing OS X environment |
| 220 | using a disk image. To create the image, launch Disk |
| 221 | Utility and select "New Image". A size of 25GB is the minimum to |
| 222 | complete the build, larger numbers are more future-proof. Using sparse images |
| 223 | saves space while allowing to grow later as the need arises. Be sure to select |
| 224 | "case sensitive, journaled" as the volume format.</p> |
| 225 | <p>You can also create it from a shell with the following command:</p> |
| 226 | <pre><code># hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg |
| 227 | </code></pre> |
| 228 | <p>This will create a .dmg (or possibly a .dmg.sparsefile) file which, once mounted, acts as a drive with the required formatting for Android development. For a disk image named "android.dmg" stored in your home directory, you can add the following to your <code>~/.bash_profile</code> to mount the image when you execute "mountAndroid":</p> |
| 229 | <pre><code># mount the android file image |
| 230 | function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; } |
| 231 | </code></pre> |
| 232 | <p>Once mounted, you'll do all your work in the "android" volume. You can eject it (unmount it) just like you would with an external drive.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 233 | <h3 id="master-branch">Master branch</h3> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 234 | <p>To build the latest source in a Mac OS environment, you will need an Intel/x86 |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 235 | machine running MacOS 10.8 (Mountain Lion), along with Xcode |
| 236 | 4.5.2 and Command Line Tools.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 237 | <p>You will also need the <a |
| 238 | href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html">Java 7 JDK</a>. |
| 239 | Select the file: jdk-7u51-macosx-x64.dmg</p> |
| 240 | |
| 241 | <h3 id="branch-40x-and-all-earlier-branches">Branch 4.2.x and earlier branches</h3> |
Conley Owens | 6c2621e | 2013-10-08 09:45:30 -0700 | [diff] [blame] | 242 | <p>To build 4.2.x and earlier source in a Mac OS environment, you will need an Intel/x86 |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 243 | machine running MacOS 10.6 (Snow Leopard) or MacOS 10.7 (Lion), along with Xcode |
| 244 | 4.2 (Apple's Developer Tools). Although Lion does not come with a JDK, it should |
| 245 | install automatically when you attempt to build the source.</p> |
| 246 | <p>The remaining sections for Mac OS X only apply to those who wish to build |
| 247 | earlier branches.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 248 | <h3 id="branch-40x-and-all-earlier-branches">Branch 4.0.x and all earlier branches</h3> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 249 | <p>To build android-4.0.x and earlier branches in a Mac OS environment, you need an |
| 250 | Intel/x86 machine running MacOS 10.5 (Leopard) or MacOS 10.6 (Snow Leopard). You |
| 251 | will need the MacOS 10.5 SDK.</p> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 252 | <h4 id="installing-required-packages">Installing required packages</h4> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 253 | <ul> |
| 254 | <li> |
| 255 | <p>Install Xcode from <a href="http://developer.apple.com/">the Apple developer site</a>. |
| 256 | We recommend version 3.1.4 or newer, i.e. gcc 4.2. |
| 257 | Version 4.x could cause difficulties. |
| 258 | If you are not already registered as an Apple developer, you will have to |
| 259 | create an Apple ID in order to download.</p> |
| 260 | </li> |
| 261 | <li> |
| 262 | <p>Install MacPorts from <a href="http://www.macports.org/install.php">macports.org</a>.</p> |
| 263 | <p><em>Note: Make sure that <code>/opt/local/bin</code> appears in your path BEFORE <code>/usr/bin</code>. If not, add</em> </p> |
| 264 | <pre><code>export PATH=/opt/local/bin:$PATH |
| 265 | </code></pre> |
| 266 | <p><em>to your <code>~/.bash_profile</code>.</em></p> |
| 267 | </li> |
| 268 | <li> |
| 269 | <p>Get make, git, and GPG packages from MacPorts: </p> |
| 270 | <pre><code>$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg |
| 271 | </code></pre> |
| 272 | <p>If using Mac OS 10.4, also install bison:</p> |
| 273 | <pre><code>$ POSIXLY_CORRECT=1 sudo port install bison |
| 274 | </code></pre> |
| 275 | </li> |
| 276 | </ul> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 277 | <h4 id="reverting-from-make-382">Reverting from make 3.82</h4> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 278 | <p>For versions of Android before ICS, there is a bug in gmake 3.82 that prevents android from building. You can install version 3.81 using MacPorts by taking the following steps:</p> |
| 279 | <ul> |
| 280 | <li> |
| 281 | <p>Edit <code>/opt/local/etc/macports/sources.conf</code> and add a line that says</p> |
| 282 | <pre><code>file:///Users/Shared/dports |
| 283 | </code></pre> |
| 284 | <p>above the rsync line. Then create this directory: </p> |
| 285 | <pre><code>$ mkdir /Users/Shared/dports |
| 286 | </code></pre> |
| 287 | </li> |
| 288 | <li> |
| 289 | <p>In the new <code>dports</code> directory, run </p> |
| 290 | <pre><code>$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/ |
| 291 | </code></pre> |
| 292 | </li> |
| 293 | <li> |
| 294 | <p>Create a port index for your new local repository: </p> |
| 295 | <pre><code>$ portindex /Users/Shared/dports |
| 296 | </code></pre> |
| 297 | </li> |
| 298 | <li> |
| 299 | <p>Finally, install the old version of gmake with </p> |
| 300 | <pre><code>$ sudo port install gmake @3.81 |
| 301 | </code></pre> |
| 302 | </li> |
| 303 | </ul> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 304 | <h4 id="setting-a-file-descriptor-limit">Setting a file descriptor limit</h4> |
Robert Ly | 40e3b6d | 2013-04-17 18:12:10 -0700 | [diff] [blame] | 305 | <p>On MacOS the default limit on the number of simultaneous file descriptors open is too low and a highly parallel build process may exceed this limit.<br /> |
| 306 | </p> |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 307 | <p>To increase the cap, add the following lines to your <code>~/.bash_profile</code>: </p> |
| 308 | <pre><code># set the number of open files to be 1024 |
| 309 | ulimit -S -n 1024 |
| 310 | </code></pre> |
Clay Murphy | 6d00f3b | 2014-03-26 17:39:24 -0700 | [diff] [blame^] | 311 | <h2 id="next-download-the-source">Next: Download the source</h2> |
| 312 | <p>Your build environment is good to go! Proceed to <a href="downloading.html">downloading the source</a>.</p> |