u-boot/examples/api/Makefile
Heinrich Schuchardt 1df9cbd70f examples/api: improve determination of LOAD_ADDR
The current load address for the 'demo' binary does not work for
qemu_arm_defconfig.

The suitability of an address to load an ELF binary and run it does
not only depend on the architecture but also on the memory layout of
the board.

On most boards we can assume that 8 MiB of memory is available above
$loadaddr. So $loadaddr + 0x400000 should work there.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
2025-02-04 11:57:36 -06:00

61 lines
1.9 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0+
#
# (C) Copyright 2007 Semihalf
# Provide symbol API_BUILD to signal that the API example is being built.
KBUILD_CPPFLAGS += -DAPI_BUILD
# Environment variable loadaddr is set from CONFIG_SYS_LOAD_ADDR.
# Run the examples 4 MiB above this address.
LOAD_ADDR:=${shell printf 0x%X $$(( $(CONFIG_SYS_LOAD_ADDR) + 0x400000 ))}
# Resulting ELF and binary exectuables will be named demo and demo.bin
extra-y = demo
# Source files located in the examples/api directory
OBJ-y += crt0.o
OBJ-y += demo.o
OBJ-y += glue.o
OBJ-y += libgenwrap.o
# Source files which exist outside the examples/api directory
EXT_COBJ-y += lib/crc32.o
EXT_COBJ-y += lib/ctype.o
EXT_COBJ-y += lib/div64.o
EXT_COBJ-y += lib/hexdump.o
EXT_COBJ-y += lib/string.o
EXT_COBJ-y += lib/time.o
EXT_COBJ-y += lib/vsprintf.o
EXT_COBJ-y += lib/charset.o
EXT_COBJ-$(CONFIG_LIB_UUID) += lib/uuid.o
EXT_SOBJ-$(CONFIG_PPC) += arch/powerpc/lib/ppcstring.o
ifneq ($(CONFIG_ARM)$(CONFIG_RISCV),)
EXT_SOBJ-$(CONFIG_USE_ARCH_MEMSET) += arch/$(ARCH)/lib/memset.o
endif
# Create a list of object files to be compiled
OBJS := $(OBJ-y) $(notdir $(EXT_COBJ-y) $(EXT_SOBJ-y))
targets += $(OBJS)
OBJS := $(addprefix $(obj)/,$(OBJS))
#########################################################################
quiet_cmd_link_demo = LD $@
cmd_link_demo = $(LD) --gc-sections -Ttext $(LOAD_ADDR) -o $@ $(filter-out $(PHONY), $^) $(PLATFORM_LIBS)
$(obj)/demo: $(OBJS) FORCE
$(call if_changed,link_demo)
# demo.bin is never genrated. Is this necessary?
OBJCOPYFLAGS_demo.bin := -O binary
$(obj)/demo.bin: $(obj)/demo FORCE
$(call if_changed,objcopy)
# Rule to build generic library C files
$(addprefix $(obj)/,$(notdir $(EXT_COBJ-y))): $(obj)/%.o: lib/%.c FORCE
$(call cmd,force_checksrc)
$(call if_changed_rule,cc_o_c)
# Rule to build architecture-specific library assembly files
$(addprefix $(obj)/,$(notdir $(EXT_SOBJ-y))): $(obj)/%.o: arch/$(ARCH)/lib/%.S FORCE
$(call if_changed_dep,as_o_S)