1a430382fSYann Gautier# 271ba1647SYann Gautier# Copyright (c) 2023-2025, STMicroelectronics - All Rights Reserved 3a430382fSYann Gautier# 4a430382fSYann Gautier# SPDX-License-Identifier: BSD-3-Clause 5a430382fSYann Gautier# 6a430382fSYann Gautier 7a430382fSYann Gautier# Compilation rules 8a430382fSYann Gautier.PHONY: check_dtc_version stm32image clean_stm32image check_boot_device 9a430382fSYann Gautier 10a430382fSYann Gautierall: check_dtc_version stm32image ${STM32_TF_STM32} 11a430382fSYann Gautier 12a430382fSYann Gautierdistclean realclean clean: clean_stm32image 13a430382fSYann Gautier 14a430382fSYann Gautierbl2: check_boot_device 15a430382fSYann Gautier 16a430382fSYann Gautiercheck_boot_device: 177c4e1eeaSChris Kay $(q)if [ ${STM32MP_EMMC} != 1 ] && \ 18a430382fSYann Gautier [ ${STM32MP_SDMMC} != 1 ] && \ 19a430382fSYann Gautier [ ${STM32MP_RAW_NAND} != 1 ] && \ 20a430382fSYann Gautier [ ${STM32MP_SPI_NAND} != 1 ] && \ 21a430382fSYann Gautier [ ${STM32MP_SPI_NOR} != 1 ] && \ 22a430382fSYann Gautier [ ${STM32MP_UART_PROGRAMMER} != 1 ] && \ 23a430382fSYann Gautier [ ${STM32MP_USB_PROGRAMMER} != 1 ]; then \ 24a430382fSYann Gautier echo "No boot device driver is enabled"; \ 25a430382fSYann Gautier false; \ 26a430382fSYann Gautier fi 27a430382fSYann Gautier 28a430382fSYann Gautierstm32image: ${STM32IMAGE} 29a430382fSYann Gautier 30*0d35f9e5SYann Gautier${STM32IMAGE}: ${STM32IMAGE_SRC} | $$(@D)/ 310b4722cfSYann Gautier $(q)${MAKE} CPPFLAGS="" BUILD_PLAT=$(abspath ${BUILD_PLAT}) --no-print-directory -C ${STM32IMAGEPATH} 32a430382fSYann Gautier 33a430382fSYann Gautierclean_stm32image: 340b4722cfSYann Gautier $(q)${MAKE} BUILD_PLAT=$(abspath ${BUILD_PLAT}) --no-print-directory -C ${STM32IMAGEPATH} clean 35a430382fSYann Gautier 36a430382fSYann Gautiercheck_dtc_version: 377c4e1eeaSChris Kay $(q)if [ ${DTC_VERSION} -lt 10407 ]; then \ 3838ac8bbbSYann Gautier echo "dtc version too old (${DTC_V}), you need at least version 1.4.7"; \ 39a430382fSYann Gautier false; \ 40a430382fSYann Gautier fi 41a430382fSYann Gautier 42a430382fSYann Gautier# Create DTB file for BL2 43f4dd18c2SChris Kay${BUILD_PLAT}/fdts/%-bl2.dts: fdts/%.dts fdts/${BL2_DTSI} | $$(@D)/ 4471ba1647SYann Gautier $(q)echo '#include "$(patsubst %.dts,%$(SP_EXT).dts,$(patsubst fdts/%,%,$<))"' > $@ 457c4e1eeaSChris Kay $(q)echo '#include "${BL2_DTSI}"' >> $@ 46a430382fSYann Gautier 47a430382fSYann Gautier${BUILD_PLAT}/fdts/%-bl2.dtb: ${BUILD_PLAT}/fdts/%-bl2.dts 48a430382fSYann Gautier 49a430382fSYann Gautier${BUILD_PLAT}/$(PLAT)-%.o: ${BUILD_PLAT}/fdts/%-bl2.dtb $(STM32_BINARY_MAPPING) bl2 507c4e1eeaSChris Kay $(s)echo " AS $${PLAT}.S" 517c4e1eeaSChris Kay $(q)$($(ARCH)-as) -x assembler-with-cpp $(TF_CFLAGS_$(ARCH)) ${ASFLAGS} ${TF_CFLAGS} \ 52a430382fSYann Gautier -DDTB_BIN_PATH=\"$<\" \ 53a430382fSYann Gautier -c $(word 2,$^) -o $@ 54a430382fSYann Gautier 55a430382fSYann Gautier$(eval $(call MAKE_LD,${STM32_TF_LINKERFILE},$(STM32_LD_FILE),bl2)) 56a430382fSYann Gautier 57a430382fSYann Gautiertf-a-%.elf: $(PLAT)-%.o ${STM32_TF_LINKERFILE} 587c4e1eeaSChris Kay $(s)echo " LDS $<" 598620bd0bSChris Kayifeq ($($(ARCH)-ld-id),gnu-gcc) 606d26d75cSYann Gautier $(q)$($(ARCH)-ld) -o $@ $(subst --,-Wl$(comma)--,${STM32_TF_ELF_LDFLAGS}) -nostartfiles -no-pie -Wl,-Map=$(@:.elf=.map) -Wl,-dT ${STM32_TF_LINKERFILE} $< 6177625312SYann Gautierelse 626d26d75cSYann Gautier $(q)$($(ARCH)-ld) -o $@ ${STM32_TF_ELF_LDFLAGS} -no-pie -Map=$(@:.elf=.map) --script ${STM32_TF_LINKERFILE} $< 6377625312SYann Gautierendif 64a430382fSYann Gautier 65a430382fSYann Gautiertf-a-%.bin: tf-a-%.elf 667c4e1eeaSChris Kay $(q)$($(ARCH)-oc) -O binary $< $@ 677c4e1eeaSChris Kay $(s)echo 687c4e1eeaSChris Kay $(s)echo "Built $@ successfully" 697c4e1eeaSChris Kay $(s)echo 70a430382fSYann Gautier 71a430382fSYann Gautiertf-a-%.stm32: tf-a-%.bin ${STM32_DEPS} 727c4e1eeaSChris Kay $(s)echo 737c4e1eeaSChris Kay $(s)echo "Generate $@" 74fa4acc2aSYann Gautierifeq ($($(ARCH)-ld-id),llvm-lld) 75fa4acc2aSYann Gautier $(eval LOADADDR = 0x$(shell cat $(@:.stm32=.map) | grep '\.data$$' | awk '{print $$1}')) 76fa4acc2aSYann Gautier $(eval ENTRY = 0x$(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}')) 77fa4acc2aSYann Gautierelse 789f72f5eaSYann Gautier $(eval LOADADDR = $(shell cat $(@:.stm32=.map) | grep '^RAM' | awk '{print $$2}')) 79a430382fSYann Gautier $(eval ENTRY = $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}')) 80fa4acc2aSYann Gautierendif 817c4e1eeaSChris Kay $(q)${STM32IMAGE} -s $< -d $@ \ 82a430382fSYann Gautier -l $(LOADADDR) -e ${ENTRY} \ 83a430382fSYann Gautier -v ${STM32_TF_VERSION} \ 84a430382fSYann Gautier -m ${STM32_HEADER_VERSION_MAJOR} \ 85a430382fSYann Gautier -n ${STM32_HEADER_VERSION_MINOR} \ 86a430382fSYann Gautier -b ${STM32_HEADER_BL2_BINARY_TYPE} 877c4e1eeaSChris Kay $(s)echo 88