HiSilicon Cross-Compilation Toolchains

May 9, 2026 ยท View on GitHub

Cross-compiler toolchains extracted from HiSilicon SDKs, hosted as release assets for use in CI pipelines.

Toolchain Reference

ToolchainGCCLibcFloatDefault archMultilib targetsCROSS_COMPILESource SDKs
arm-hisiv100nptl-linux4.4.1uClibc 0.9.32.1softfparmv5tearmv5te, armv7-aarm-hisiv100-linux-uclibcgnueabi-Hi3518_SDK_V1.0.B.0, Hi3518E V100R001C01SPC0B0
arm-hisiv200-linux4.4.1glibc 2.11softfparmv5tearmv5te, armv7-aarm-hisiv200-linux-gnueabi-Hi3518_SDK_V1.0.B.0, Hi3518E V100R001C01SPC0B0
arm-hisiv300-linux4.8.3 (Linaro)uClibc 0.9.33.2softfparmv5teARM926, A9, A7arm-hisiv300-linux-uclibcgnueabi-Hi3518E_SDK_V1.0.4.0, Hi3516A_SDK_V1.0.5.0
arm-hisiv500-linux4.9.4 (Linaro)uClibc 0.9.33.2softfparmv5teARM926, A9, A7arm-hisiv500-linux-uclibcgnueabi-Hi3516CV300_SDK, Hi3516C V300R001C01SPC040
arm-hisiv510-linux6.2.1 (Linaro)uClibc 0.9.33.2softfparmv5teARM926, A9, A7, A17, A53, A73, M7arm-hisiv510-linux-uclibcgnueabi-Hi3518E V200R001C01SPC050, Hi3516A V100R001C01SPC080
arm-hisiv600-linux4.9.4 (Linaro)glibc 2.20softfparmv5teARM926, A9, A7arm-hisiv600-linux-gnueabi-Hi3516C V300R001C02SPC040
arm-hisiv610-linux6.2.1 (Linaro)glibc 2.24softfparmv5teARM926, A9, A7arm-hisiv610-linux-gnueabi-Hi3536D V100R001C02SPC020
arm-himix100-linux6.3.0uClibc 0.9.33.2softfparmv5teARM926, A9, A7, A17, A53, A73arm-himix100-linux-Hi3516EV200 series
arm-himix200-linux6.3.0glibc 2.24softfparmv5teARM926, A9, A7, A17, A53, A73arm-himix200-linux-Hi3516CV500, Hi3519V101

All toolchains default to soft-float ABI (gnueabi). Hard-float variants are available via multilib flags, e.g.:

-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4

Archive Format

Most archives are .tgz files with a nested structure:

<name>.tgz
  +-- <name>/
      +-- <name>.tar.bz2    # actual toolchain
      +-- <name>.install     # vendor install script (not needed for CI)
      +-- runtime_*.tgz     # runtime libraries

Exceptions:

  • arm-hisiv300-linux.tar.bz2 is the inner archive directly (no .tgz wrapper).
  • arm-himix200-linux.tgz is split into two parts due to the 2 GB GitHub release asset limit.
  • arm-hisiv610-linux.tgz is split into two parts for the same reason.

Usage in CI

Extracting

# Standard .tgz archives (two-step extraction)
tar xzf arm-hisiv510-linux.tgz
tar xjf arm-hisiv510-linux/arm-hisiv510-linux.tar.bz2

# arm-hisiv300 (single-step, bare tar.bz2)
tar xjf arm-hisiv300-linux.tar.bz2

# arm-himix200 / arm-hisiv610 (reassemble split parts first)
cat arm-himix200-linux.tgz.part* > arm-himix200-linux.tgz
tar xzf arm-himix200-linux.tgz
tar xjf arm-himix200-linux/arm-himix200-linux.tar.bz2

cat arm-hisiv610-linux.tgz.part* > arm-hisiv610-linux.tgz
tar xzf arm-hisiv610-linux.tgz
tar xjf arm-hisiv610-linux/arm-hisiv610-linux.tar.bz2

Building

The vendor install script creates target/bin/ with absolute symlinks to /opt/hisi-linux/... which only work on the original install path. For CI, use the full CROSS_COMPILE prefix (from the table above) with the bin/ directory on PATH:

export PATH="$PWD/arm-hisiv510-linux/bin:$PATH"
make CROSS_COMPILE=arm-hisiv510-linux-uclibcgnueabi-

Downloading in GitHub Actions

- name: Download toolchain
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: gh release download v1 -R OpenIPC/toolchains -p 'arm-hisiv510-linux.tgz'