mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-11 07:24:46 +00:00

CONFIG_STANDALONE_LOAD_ADDR has been used for examples/standalone but not for examples/api. 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 which is not reflected in the default value of CONFIG_STANDALONE_LOAD_ADDR. Commit32b7e39db4
("Convert CONFIG_STANDALONE_LOAD_ADDR to Kconfig") set the default on RISC-V to 0x0 though most boards used 0x80200000 before the patch. On most boards we can assume 8 MiB of memory available above $loadaddr. So we can safely use $loadaddr + 4 MiB as load address for the standalone example and eliminate CONFIG_STANDALONE_LOAD_ADDR altogether. Fixes:32b7e39db4
("Convert CONFIG_STANDALONE_LOAD_ADDR to Kconfig") Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
86 lines
2.5 KiB
Makefile
86 lines
2.5 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# (C) Copyright 2000-2006
|
|
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
|
|
extra-y := hello_world
|
|
extra-$(CONFIG_SPI_FLASH_ATMEL) += atmel_df_pow2
|
|
extra-$(CONFIG_PPC) += sched
|
|
|
|
# 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 ))}
|
|
|
|
#
|
|
# Some versions of make do not handle trailing white spaces properly;
|
|
# leading to build failures. The problem was found with GNU Make 3.80.
|
|
# Using 'strip' as a workaround for the problem.
|
|
#
|
|
ELF := $(strip $(extra-y))
|
|
|
|
extra-y += $(addsuffix .srec,$(extra-y)) $(addsuffix .bin,$(extra-y))
|
|
clean-files := *.srec *.bin
|
|
|
|
COBJS := $(ELF:=.o)
|
|
|
|
LIB = $(obj)/libstubs.o
|
|
|
|
LIBOBJS-$(CONFIG_PPC) += ppc_longjmp.o ppc_setjmp.o
|
|
LIBOBJS-y += stubs.o
|
|
|
|
targets += $(patsubst $(obj)/%,%,$(LIB)) $(COBJS) $(LIBOBJS-y)
|
|
|
|
LIBOBJS := $(addprefix $(obj)/,$(LIBOBJS-y))
|
|
ELF := $(addprefix $(obj)/,$(ELF))
|
|
|
|
# Disable LTO for these builds
|
|
CFLAGS_REMOVE_hello_world.o := $(LTO_CFLAGS)
|
|
CFLAGS_REMOVE_stubs.o := $(LTO_CFLAGS)
|
|
|
|
# For PowerPC there's no need to compile standalone applications as a
|
|
# relocatable executable. The relocation data is not needed, and
|
|
# also causes the entry point of the standalone application to be
|
|
# inconsistent.
|
|
ifeq ($(CONFIG_PPC),y)
|
|
PLATFORM_CPPFLAGS := $(filter-out $(RELFLAGS),$(PLATFORM_CPPFLAGS))
|
|
endif
|
|
|
|
# We don't want gcc reordering functions if possible. This ensures that an
|
|
# application's entry point will be the first function in the application's
|
|
# source file.
|
|
ccflags-y += $(call cc-option,-fno-toplevel-reorder)
|
|
|
|
LDFLAGS_STANDALONE += -Ttext $(LOAD_ADDR)
|
|
|
|
#########################################################################
|
|
|
|
quiet_cmd_link_lib = LD $@
|
|
cmd_link_lib = $(LD) $(ld_flags) -r -o $@ $(filter $(LIBOBJS), $^)
|
|
|
|
$(LIB): $(LIBOBJS) FORCE
|
|
$(call if_changed,link_lib)
|
|
|
|
quiet_cmd_link_elf = LD $@
|
|
cmd_link_elf = $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_STANDALONE) -g \
|
|
-o $@ -e $(SYM_PREFIX)$(@F) $< $(LIB) $(PLATFORM_LIBGCC)
|
|
|
|
$(ELF): $(obj)/%: $(obj)/%.o $(LIB) FORCE
|
|
$(call if_changed,link_elf)
|
|
|
|
$(obj)/%.srec: OBJCOPYFLAGS += -O srec
|
|
$(obj)/%.srec: $(obj)/% FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
$(obj)/%.bin: OBJCOPYFLAGS += -O binary
|
|
$(obj)/%.bin: $(obj)/% FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
# some files can only build in ARM or THUMB2, not THUMB1
|
|
|
|
ifdef CONFIG_SYS_THUMB_BUILD
|
|
ifndef CONFIG_HAS_THUMB2
|
|
|
|
CFLAGS_stubs.o := -marm
|
|
|
|
endif
|
|
endif
|