commit cf68f5ff906616842f9816701c0c45185a3cf5c5
parent e048aca80df598025dc38491abf28718c72af649
Author: MikoĊaj Lenczewski <mblenczewski@gmail.com>
Date: Sun, 6 Sep 2026 17:07:40 +0100
Fix clang build. Update packages.
Diffstat:
7 files changed, 69 insertions(+), 30 deletions(-)
diff --git a/build.sh b/build.sh
@@ -1,41 +1,33 @@
#!/bin/sh
-export CROSS_COMPILE=aarch64-linux-gnu-
-
-USE_EDK2=false
+. "$(dirname $0)/toolchain.sh"
set -ex
if $USE_EDK2; then
+ # build edk2
+ export WORKSPACE="$PWD"
+ export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi"
-# build edk2
-export WORKSPACE="$PWD"
-export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi"
-
-. edk2/edksetup.sh
-
-make -C edk2/BaseTools
+ . edk2/edksetup.sh
-export GCC5_AARCH64_PREFIX=$CROSS_COMPILE
-build -a AARCH64 -t GCC5 -b RELEASE -D X64EMU_ENABLE -D INCLUDE_TFTP_COMMAND -p Platform/SolidRun/Armada80x0McBin/Armada80x0McBin.dsc
-export BL33=$PWD/Build/Armada80x0McBin-AARCH64/RELEASE_GCC5/FV/ARMADA_EFI.fd
+ make -C edk2/BaseTools
+ export GCC5_AARCH64_PREFIX=$CROSS_COMPILE
+ build -a AARCH64 -t GCC5 -b RELEASE -D X64EMU_ENABLE -D INCLUDE_TFTP_COMMAND -p Platform/SolidRun/Armada80x0McBin/Armada80x0McBin.dsc
+ export BL33=$PWD/Build/Armada80x0McBin-AARCH64/RELEASE_GCC5/FV/ARMADA_EFI.fd
else
-
-# build u-boot
-make -C u-boot mvebu_mcbin-88f8040_defconfig
-make -C u-boot
-
-export BL33=$PWD/u-boot/u-boot.bin
-
+ # build u-boot
+ make -C u-boot HOSTCC=$HOSTCC CC=clang mvebu_mcbin-88f8040_defconfig
+ make -C u-boot HOSTCC=$HOSTCC HOSTLD=$HOSTLD CROSS_COMPILE=$UBOOT_TARGET CC=clang LD=ld.lld
+ export BL33=$PWD/u-boot/u-boot.bin
fi
# build arm-trusted-firmware
export SCP_BL2=$PWD/mv-bin/mrvl_scp_bl2.img
-#export SCP_BL2=$PWD/mrvl_scp_bl2_pm.img # TODO: find real pm-enabled blob
export MV_DDR_PATH=$PWD/mv-ddr
-make -C tfa USE_COHERENT_MEM=0 LOG_LEVEL=20 PLAT=a80x0_mcbin all fip mrvl_flash
+make -C tfa CC=clang USE_COHERENT_MEM=0 LOG_LEVEL=20 PLAT=a80x0_mcbin all fip mrvl_flash
cp tfa/build/a80x0_mcbin/release/flash-image.bin flash-image.bin
diff --git a/clean.sh b/clean.sh
@@ -1,9 +1,17 @@
#!/bin/sh
-export CROSS_COMPILE=aarch64-linux-gnu-
+. "$(dirname $0)/toolchain.sh"
set -ex
-rm -rf Build/
-make -C u-boot clean
-make -C tfa CROSS_COMPILE=$CROSS_COMPILE realclean
+if $USE_EDK2; then
+ rm -rf Build/
+ make -C tfa CROSS_COMPILE=$CROSS_COMPILE realclean
+else
+ make -C u-boot distclean
+fi
+
+make -C tfa CC=clang realclean
+make -C mv-ddr clean
+
+rm -rf boot.scr flash-image.bin
diff --git a/mrvl_scp_bl2_pm.img b/mrvl_scp_bl2_pm.img
Binary files differ.
diff --git a/patches/mv-ddr-clang-got.patch b/patches/mv-ddr-clang-got.patch
@@ -8,8 +8,8 @@ index 045284c..4733ba4 100644
LD = $(CROSS)ld
-CC = $(CROSS)gcc
-AS = $(CROSS)gcc
-+CC = $(CROSS)cc
-+AS = $(CROSS)cc
++CC ?= $(CROSS)cc
++AS ?= $(CROSS)cc
AR = $(CROSS)ar
OBJCOPY = $(CROSS)objcopy
OBJDUMP = $(CROSS)objdump
diff --git a/patches/u-boot-clang.patch b/patches/u-boot-clang.patch
@@ -0,0 +1,25 @@
+diff --git a/Makefile b/Makefile
+index 4c86f5ac409..3140fcd9a42 100644
+--- a/Makefile
++++ b/Makefile
+@@ -656,11 +656,19 @@ endif
+ ifneq ($(GCC_TOOLCHAIN),)
+ CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
+ endif
+-CLANG_FLAGS += -no-integrated-as
+ KBUILD_CFLAGS += $(CLANG_FLAGS)
+ KBUILD_CPPFLAGS += $(CLANG_FLAGS)
+ KBUILD_AFLAGS += $(CLANG_FLAGS)
+ export CLANG_FLAGS
++
++# use llvm-provided alternatives to gnu toolchain tools
++AR := llvm-ar
++NM := llvm-nm
++STRIP := llvm-strip
++OBJCOPY := llvm-objcopy
++OBJDUMP := llvm-objdump
++READELF := llvm-readelf
++
+ endif
+
+ RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
diff --git a/setup.sh b/setup.sh
@@ -12,12 +12,14 @@ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
# (cd edk2-non-osi; git submodule update --init)
git clone https://github.com/u-boot/u-boot.git
-( cd u-boot; git checkout v2026.01 )
+( cd u-boot; git checkout v2026.04; git apply ../patches/u-boot-clang.patch )
git clone https://github.com/ARM-software/arm-trusted-firmware.git tfa
-( cd tfa; git checkout lts-v2.12.9 )
+( cd tfa; git checkout lts-v2.14.0; git apply ../patches/tfa-clang.patch )
git clone https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git mv-ddr
+( cd mv-ddr; git apply ../patches/mv-ddr-clang-got.patch )
+# NOTE: mrvl_scp_bl2.img from the sdk 10.0.1.0 is power-management enabled
git clone https://github.com/MarvellEmbeddedProcessors/binaries-marvell.git mv-bin
( cd mv-bin; git checkout binaries-marvell-armada-SDK10.0.1.0 )
diff --git a/toolchain.sh b/toolchain.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+USE_EDK2=false
+
+UBOOT_TARGET=aarch64-linux-gnueabi-
+TFA_TARGET=aarch64-none-elf-
+DDR_TARGET=aarch64-none-elf-
+
+HOSTCC=$(which cc)
+HOSTLD=$(which ld)
+
+CC=clang