DEV Community

Cover image for Building AOSP on macOS
Sriteja Sugoor
Sriteja Sugoor

Posted on

Building AOSP on macOS

In this post, we will see how to build Android source code on macOS.

Disclaimer:

  1. Building AOSP on Mac is not officially supported. So we may not be able to build all tools.
  2. The steps mentioned below are for macOS Monterey. For other versions, steps might be similar only.

Step 1: Setting up File system

The default file system on macOS 10.13 and later which is called Apple File System (APFS) is case-insensitive. But to build AOSP, we need a case-sensitive file system. If you try building on default file system, the build will fail to start with the below message.

 20:48:42 You are building on a case-insensitive filesystem. 20:48:42 Please move your source tree to a case-sensitive filesystem. 20:48:42 ************************************************************ 20:48:42 Case-insensitive filesystems not supported 
Enter fullscreen mode Exit fullscreen mode

So, first we need to create a case-sensitive file system, before we can start downloading the code.

  1. Open Disk Utility Disk Utility
  2. Click on + icon in the top menu.
  3. Give any name you want to the volume and select APFS (Case-sensitive) in the format section and click on add. New Volume Popup
  4. Optionally, you can customise size options if you want. But beware that, you need at least 130GB of space on you system in order to download the source code.

Step 2: Downloading the source

So, android team has made an utility called repo, which helps in managing multiple repositories. We will be using this utility to download android source.

Install repo using brew.

 ❯ brew install repo 
Enter fullscreen mode Exit fullscreen mode

Create and base directory inside the new volume, where you want to clone all the repos required for building inside the volume you created in first step. Replace
<volume_name> with exact name.

 ❯ cd /Volumes/<volume_name> ❯ mkdir source ❯ cd source 
Enter fullscreen mode Exit fullscreen mode

Now let's initialise repo. This will create a .repo/ directory with Git repositories for the Repo source code and the manifest files which specifies where the various repositories included in the Android source. Also the below command will ask you for your name and email if you haven't already set it in git config

 ❯ repo init -u https://android.googlesource.com/platform/manifest Downloading Repo source from https://gerrit.googlesource.com/git-repo remote: Total 7372 (delta 3971), reused 7372 (delta 3971) Downloading manifest from https://android.googlesource.com/platform/manifest remote: Finding sources: 100% (98897/98897) remote: Total 98897 (delta 31617), reused 98888 (delta 31617) Your identity is: Your Name <email> If you want to change this, please re-run 'repo init' with --config-name repo has been initialised in /path/to/folder/ If this is not the directory in which you want to initialise repo, please run: rm -r /path/to/folder/.repo and try again. 
Enter fullscreen mode Exit fullscreen mode

Now clone the source. Also remember to pass the -c, it will tell repo clone only master branch, else it will try to clone all the branches. Optionally you can pass the -j flag to specify number of threads for faster cloning.

 ❯ repo sync -c -j8 
Enter fullscreen mode Exit fullscreen mode

Note that the above step will take time to download and check out, depending on your network bandwidth and processing speed of your system. You will get the below message once finished.

 repo sync has finished successfully. /usr/local/Cellar/python@3.10/3.10.5/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 17 leaked semaphore objects to clean up at shutdown warnings.warn('resource_tracker: There appear to be %d ' 
Enter fullscreen mode Exit fullscreen mode

If you did get the above message, then congrats 🥳 you have completed the most time taking step. But due to some issue, if it failed then try out the Troubleshooting steps. Still not resolved? then comment below, will try to resolve it.

Step 3: Environment setup and build configuration

Before, we can start the build, we need to some configuration steps.

  • Commands Setup

Android source offers some helper commands for building, we can add them to our path in current session with below command.

 ❯ source build/envsetup.sh 
Enter fullscreen mode Exit fullscreen mode

You can use the hmm command to list all the helper commands that are added.

  • Selecting Build target

We can select the build target, i.e for which product and architecture we want to build for using the lunch command. Just run lunch without any arguments, it will show you some of the available configurations.

 ❯ lunch You're building on Darwin Lunch menu .. Here are the common combinations: 1. aosp_arm-eng 2. aosp_arm64-eng 3. aosp_barbet-userdebug 4. aosp_bramble-userdebug 5. aosp_bramble_car-userdebug 6. aosp_car_arm-userdebug 7. aosp_car_arm64-userdebug 8. aosp_car_x86-userdebug 9. aosp_car_x86_64-userdebug 10. aosp_cf_arm64_auto-userdebug 11. aosp_cf_arm64_phone-userdebug 12. aosp_cf_x86_64_foldable-userdebug 13. aosp_cf_x86_64_pc-userdebug 14. aosp_cf_x86_64_phone-userdebug 15. aosp_cf_x86_64_tv-userdebug 16. aosp_cf_x86_auto-userdebug 17. aosp_cf_x86_phone-userdebug 18. aosp_cf_x86_tv-userdebug 19. aosp_coral-userdebug 20. aosp_coral_car-userdebug 21. aosp_flame-userdebug 22. aosp_flame_car-userdebug 23. aosp_oriole-userdebug 24. aosp_oriole_car-userdebug 25. aosp_raven-userdebug 26. aosp_raven_car-userdebug 27. aosp_redfin-userdebug 28. aosp_redfin_car-userdebug 29. aosp_redfin_vf-userdebug 30. aosp_slider-userdebug 31. aosp_sunfish-userdebug 32. aosp_sunfish_car-userdebug 33. aosp_trout_arm64-userdebug 34. aosp_trout_x86-userdebug 35. aosp_whitefin-userdebug 36. aosp_x86-eng 37. aosp_x86_64-eng 38. arm_krait-eng 39. arm_v7_v8-eng 40. armv8-eng 41. armv8_cortex_a55-eng 42. armv8_kryo385-eng 43. beagle_x15-userdebug 44. beagle_x15_auto-userdebug 45. car_ui_portrait-userdebug 46. car_x86_64-userdebug 47. db845c-userdebug 48. gsi_car_arm64-userdebug 49. gsi_car_x86_64-userdebug 50. hikey-userdebug 51. hikey64_only-userdebug 52. hikey960-userdebug 53. hikey960_tv-userdebug 54. hikey_tv-userdebug 55. poplar-eng 56. poplar-user 57. poplar-userdebug 58. qemu_trusty_arm64-userdebug 59. rb5-userdebug 60. sdk_car_arm-userdebug 61. sdk_car_arm64-userdebug 62. sdk_car_portrait_x86_64-userdebug 63. sdk_car_x86-userdebug 64. sdk_car_x86_64-userdebug 65. silvermont-eng 66. uml-userdebug 67. yukawa-userdebug 68. yukawa_sei510-userdebug Which would you like? [aosp_arm-eng] Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-eng): 
Enter fullscreen mode Exit fullscreen mode

Select any configuration that you would like to build for.

Step 3: Building

You can simply run the m command to build.

 ❯ m 
Enter fullscreen mode Exit fullscreen mode

And it will start the build for the target we specified. You can also specify number of threads for the build with -j argument

 
 

Thank you for reading till the end. It is just the first part of the whole series, in next parts we will look into Soong Build system, building for different architectures, cross compiling and more. Stay tuned!!

Also let me know the feedback for this article in the comments!

Top comments (2)

Collapse
 
arpitxgit profile image
dungexn

I'm working on Android eSIM Implementation building a LPA,
Followed your guide to building AOSP on macOS, I'm using macbook pro with m1 chip.
I passed this build target lunch aosp_cf_x86_64_phone-userdebug
And then when i run m command to build,
It failed with this message at the end,
`FAIL
17:08:30 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.

failed to build some targets (14 seconds) ####`

Do you know anything about this? Your guide helped with everything and a lot for that, let me know.

Collapse
 
navylover profile image
navylover

Awesome! Thank you.