This project aims to build a version of Electron that supports the Loong64 architecture.
Note: The Electron binaries require glibc >= 2.38
.
- Check releases for available versions.
- Install the
electron
npm package with corresponding version and specify the download mirror like this:
ELECTRON_MIRROR="https://github.com/darkyzhou/electron-loong64/releases/download/" electron_use_remote_checksums=1 npm install electron@THE_VERSION
You may also refer to darkyzhou/electron-builder-loong64 for insturctions on how to build your Electron project with electron-builder.
dev
: The development branch, containing the latest patches and build scripts.X.Y.Z
: The release branches, corresponding to the release versions of Electron.
Special thanks to @jiegec and AOSC team for their invaluable Chromium patches in AOSC-Dev/chromium-loongarch64, which make this project possible.
- This project builds upon the official Electron repository by applying custom patches. See
electron.patch
for details. - The build process runs in a dedicated container environment that includes all necessary build tools and dependencies. See
Dockerfile.builder
for details.
- Linux host machine with Loong64 architecture
- Docker with docker-buildx installed
- LATX version 1.4.4 (required for running
ghcr.io/darkyzhou/electron-buildtools
image) - System resources: minimum 32GiB RAM and 200GiB free disk space
- Launch a
ghcr.io/darkyzhou/electron-buildtools
container. All subsequent steps should be executed inside this container. - Change the variables inside
./scripts/env.sh
according to your environment and needs. - Run following scripts in sequence.
# Clone or update the local electron repository
./scripts/update.sh
# Apply patches from electron-loong64
./scripts/patch.sh
# Fetch or update the dependencies of electron
# Note: This could take a really long time, grab your coffee or take a sleep!
./scripts/sync.sh
- Launch a
ghcr.io/darkyzhou/electron-builder:deepin-25-llvm-20-rustc-188
container. All subsequent steps should be executed inside this container. - Run following scripts in sequence.
# Replace binaries with native ones
./scripts/binaries.sh
./scripts/rollup.sh
# Build the electron
# Note: This could also take a long time, better get some sleep.
./scripts/build.sh
# Package the electron
./scripts/package.sh
-
Launch a
ghcr.io/darkyzhou/electron-buildtools
container. All subsequent steps should be executed inside this container. -
Update versions and sync sources:
- Edit
ELECTRON_VERSION
to point to the new version to build inenv.sh
. - Run
scripts/update.sh
.
- Edit
-
Update dependencies:
- Run
scripts/sync.sh
. This will apply all original patches from the Electron repository.
- Run
-
Apply Chromium patches:
- Apply the consolidated Chromium patch file (e.g.,
chromium-131.0.6778.85.diff
) to$BUILD_ROOT/src
. - Resolve any conflicts if any.
- Apply the consolidated Chromium patch file (e.g.,
-
Export Chromium patches using
npx e patches
command:Note:
$BUILD_ROOT/src
is a git repository containing submodules, including$BUILD_ROOT/src/electron
and a few folders in$BUILD_ROOT/src/third_party
.- Run
scripts/export.sh
to commit changes for both chromium and submodule changes. - Run
npx e patches $NAME
to export patches for submodule commits. - Export changes in
$BUILD_ROOT/src/electron
topatches/
.
- Run
-
Apply Electron patches from
patches/electron.patch
. -
Run
scripts/sync.sh
again to sync the sources and apply all patches.
Common compilation errors:
relocation R_LARCH_B26 out of range: 172745664 is not in [-134217728, 134217727]
- Root cause: The library was compiled without the
-mcmodel=medium
flag. For more details, see laelf.adoc. - Resolution: Recompile the library with the
-mcmodel=medium
flag. SeeDockerfile.libffi
for implementation examples.
- Root cause: The library was compiled without the