docs/building.md
Building and developing Helium
Navigation
Software requirements
- macOS 12+
- Xcode 26
- Homebrew
- Perl (for creating a
.dmgpackage)
Build dependencies
- Install package dependencies via Homebrew:
brew install python@3.13 wget zstd coreutils readline - Install Python dependencies via
pip3:pip3 install requests pillow- Note that you might need to use
--break-system-packagesif you don't want to use a dedicated Python environment for building Helium.
- Note that you might need to use
- Install Metal toolchain:
xcodebuild -downloadComponent MetalToolchain - Unlink binutils to use the one provided with Xcode:
brew unlink binutils - Restart your terminal.
Official (non-development) build
First, ensure the Xcode application is open.
If you want to notarize the build, you need to have an Apple Developer ID and a valid Apple Developer Program membership. You also need to set the following environment variables:
MACOS_CERTIFICATE_NAME: The Full Name of the Developer ID Certificate you created (typeG2 Sub-CA (Xcode 11.4.1 or later)) in Apple Developer portal, e.g.: Developer ID Application: Your Name (K1234567)PROD_MACOS_NOTARIZATION_APPLE_ID: The email you used to register your Apple Account and Apple Developer ProgramPROD_MACOS_NOTARIZATION_TEAM_ID: Your Apple Developer Team ID, which can be found in the Apple Developer membership pagePROD_MACOS_NOTARIZATION_PWD: An app-specific password generated in the Apple ID account settingsPROD_MACOS_SPECIAL_ENTITLEMENTS_PROFILE_PATH: Path to the provisioning profile that allows you to use entitlements which need to be specifically approved by Apple.
If you don't have an Apple Developer ID to sign the build (or you don't want to sign it), you can simply not specify MACOS_CERTIFICATE_NAME.
| 1 | git clone --recurse-submodules https://github.com/imputnet/helium-macos.git |
| 2 | cd helium-macos |
to switch to the desired release or development branch.
Finally, run the following (if you are building for the same architecture as your Mac, i.e. x86_64 for Intel Macs or arm64 for Apple Silicon Macs, or if you are building for arm64 on an Intel Mac and you set the appropriate build flag):
| 1 | ./build.sh |
or, if you want to build for x86_64 on an Apple Silicon Mac:
| 1 | ./build.sh x86_64 |
Use ./build.sh -c to clone Chromium instead of downloading prepared archives.
Once it's complete, a .dmg should appear in build/.
NOTE: If the build fails, you must take additional steps before re-running the build:
- If the build fails while downloading the Chromium source code, it can be fixed by removing
build/downloads_cacheand re-running the build instructions. - If the build fails at any other point after downloading, it can be fixed by removing
build/srcand re-running the build instructions.
Development build and environment
Make sure your system meets the requirements and that you've installed all dependencies.
On top of basic dependencies, you'll need quilt to create/update patches:
| 1 | brew install quilt |
Basics
Load the dev util script:
sh1 source dev.sh Setup the dev environment fully for the first time:
sh1 he setup Use
he setup -cto clone Chromium instead of downloading prepared archives.Build your first development binary:
sh1 he build Run the development build with a dedicated data dir:
sh1 he run Done! You have your own home-grown Helium ready for tinkering.
Creating a new patch
Go to the build dir:
sh1 cd build/src Create a new patch with quilt:
sh1 quilt new <path_to_patch> Add files to this patch:
sh1 quilt add <path_to_file1> <path_to_file2> - Note: path here is relative to
build/src
- Note: path here is relative to
Modify files, test them by building and running Helium.
When you're done, refresh the patch:
sh1 quilt refresh Unmerge the patch series:
sh1 he unmerge Commit the patch & series change to a new branch and make a PR!
Dev util help menu
To see all commands available in dev.sh, just run he.
quilt manual
Confused about quilt? Run man quilt to read more about its functionality.
Updating for a new Chromium release
Load the dev util script:
sh1 source dev.sh Download sources, set up GN, and prepare third-party dependencies:
sh1 he presetup Switch to src directory
sh1 cd build/src Use
quiltto refresh all patches:quilt push -a --refresh- If an error occurs, go to the next step. Otherwise, skip to Step 7.
Use
quiltto fix the broken patch:- Run
quilt push -f - Edit the broken files as necessary by adding (
quilt edit ...orquilt add ...) or removing (quilt remove ...) files as necessary- When removing large chunks of code, remove each line instead of using language features to hide or remove the code. This makes the patches less susceptible to breakages when using quilt's refresh command (e.g. quilt refresh updates the line numbers based on the patch context, so it's possible for new but desirable code in the middle of the block comment to be excluded.). It also helps with readability when someone wants to see the changes made based on the patch alone.
- Refresh the patch:
quilt refresh - Go back to Step 5.
- Run
After all patches are fixed, run
he version && he configureto finish build env setup.Build and run Helium to verify that everything functions as intended:
he build && he runRun
he validate configand resolve the error if it occurs.Run
he popto pop all applied patches.Validate that patches are applied correctly:
he validate configUnmerge main and platform patches:
he unmergeEnsure that patches and series are formatted correctly, e.g. no blank lines.
Check the consistency of the series file:
he validate seriesUse git to add changes and commit. Refer to recent commit history for an appropriate commit comment.