Kernel Compilation

Packages for mainline compilation (GCC suite):

aarch64-linux-gnu-binutils
aarch64-linux-gnu-gcc

Clang packages:

clang
clang-format-all-git

Below commands assume you have a sensible .config in the output directory. If defconfig has been modified in-tree to include all the necessary drivers, run the same command below but with defconfig (instead of Image.gz dtbs) below to generate .config.

Kernel make command, using gcc:

make \
ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
CROSS_COMPILE_ARM32=arm-none-eabi- \
Image.gz dtbs

Kernel make command, using clang:

make \
ARCH=arm64 \
CC=clang \
AR=llvm-ar \
NM=llvm-nm \
LD=ld.lld \
STRIP=llvm-strip \
OBJCOPY=llvm-objcopy \
OBJDUMP=llvm-objdump \
OBJSIZE=llvm-size \
READELF=llvm-readelf \
HOSTCC=clang \
HOSTCXX=clang++ \
HOSTAR=llvm-ar \
HOSTLD=ld.lld \
Image.gz dtbs

Note

SoMainline shares one defconfig for all devices, so you do not need to specify one as you might be used to from downstream Android kernels.

For convenience, SoMainline also provides a repo to generate and update a “prebuilt” kernel that can be included from the Android device tree instead of using “inline” compilation. No prebuilts are shipped yet but they can be generated with the included ./build-kernels-gcc.sh script, that runs about the same code as above.

In case you are only interested in kernel development and do not want to incur the overhead of the AOSP build system, use the Out-Of-Tree kernel build scripts.