mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 17:14:21 +00:00

The Makefile rule for the libwrappers object files places a dependency on a timestamp file. This timestamp file is created by the recipe that generates the libwrappers sources, and was presumably introduced to indicate to Make that all of the source files are generated simultaneously by that rule. Instead, we can use a grouped target rule, which uses `&:` instead of `:`. This communicates to Make that all of the targets listed are generated at once. To demonstrate, the following two Makefile rules differ in their behaviour: a.x b.x c.x: # targets may be updated independently ... # generate a.x, b.x and c.x a.x b.x c.x &: # all targets are updated at once ... # generate a.x, b.x and c.x While both recipes do generate all three files, only the second rule communicates this fact to Make. As such, Make can reason that if one of the files is up to date then all of them are, and avoid re-running the rule for any generated file that it has not already run it for. Change-Id: I10b49eb72b5276c7f9bd933900833b03a61cff2f Signed-off-by: Chris Kay <chris.kay@arm.com>
101 lines
2.6 KiB
Makefile
101 lines
2.6 KiB
Makefile
#
|
|
# Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
ifeq ($(filter-out clean,$(or $(MAKECMDGOALS),all)),)
|
|
toolchains :=
|
|
else
|
|
toolchains := aarch64
|
|
endif
|
|
|
|
include ../../make_helpers/toolchain.mk
|
|
|
|
ROMLIB_GEN = ./romlib_generator.py
|
|
BUILD_DIR = $(BUILD_PLAT)/romlib
|
|
LIB_DIR = $(BUILD_PLAT)/lib
|
|
WRAPPER_DIR = $(BUILD_PLAT)/libwrapper
|
|
LIBS = -lmbedtls -lfdt -lc
|
|
INC = $(INCLUDES:-I%=-I../../%)
|
|
PPFLAGS = $(INC) $(DEFINES) -P -x assembler-with-cpp -D__LINKER__ -MD -MP -MT $(BUILD_DIR)/romlib.ld
|
|
OBJS = $(BUILD_DIR)/jmptbl.o $(BUILD_DIR)/init.o
|
|
MAPFILE = $(BUILD_PLAT)/romlib/romlib.map
|
|
|
|
ifneq ($(PLAT_DIR),)
|
|
WRAPPER_SOURCES = $(sort $(shell $(ROMLIB_GEN) genwrappers -b $\
|
|
$(WRAPPER_DIR) --list ../../$(PLAT_DIR)/jmptbl.i))
|
|
|
|
WRAPPER_OBJS = $(WRAPPER_SOURCES:.s=.o)
|
|
endif
|
|
|
|
V ?= 0
|
|
ifeq ($(V),0)
|
|
Q := @
|
|
else
|
|
Q :=
|
|
endif
|
|
|
|
LDFLAGS := -Wl,--gc-sections -nostdlib
|
|
|
|
ifeq ($(DEBUG),1)
|
|
LDFLAGS += -Wl,-Map=$(MAPFILE)
|
|
endif
|
|
|
|
ifeq (${ARM_ARCH_MINOR},0)
|
|
ASFLAGS = -march=armv8-a
|
|
else
|
|
ASFLAGS = -march=armv8.${ARM_ARCH_MINOR}-a
|
|
endif
|
|
|
|
.PHONY: all clean distclean
|
|
|
|
all: $(BUILD_DIR)/romlib.bin $(LIB_DIR)/libwrappers.a
|
|
|
|
%.o: %.s
|
|
@echo " AS $@"
|
|
$(Q)$(aarch64-as) -c $(ASFLAGS) -o $@ $<
|
|
|
|
$(BUILD_DIR)/%.o: %.s
|
|
@echo " AS $@"
|
|
$(Q)$(aarch64-as) -c $(ASFLAGS) -o $@ $<
|
|
|
|
$(BUILD_DIR)/romlib.ld: romlib.ld.S
|
|
@echo " PP $@"
|
|
$(Q)$(aarch64-cpp) -E $(PPFLAGS) -o $@ romlib.ld.S
|
|
|
|
$(BUILD_DIR)/romlib.elf: $(OBJS) $(BUILD_DIR)/romlib.ld
|
|
@echo " LD $@"
|
|
$(Q)$(aarch64-ld) -T $(BUILD_DIR)/romlib.ld -L$(LIB_DIR) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
|
|
|
$(BUILD_DIR)/romlib.bin: $(BUILD_DIR)/romlib.elf
|
|
@echo " BIN $@"
|
|
$(Q)$(aarch64-oc) -O binary $(BUILD_DIR)/romlib.elf $@
|
|
|
|
$(WRAPPER_DIR)/jmpvar.s: $(BUILD_DIR)/romlib.elf
|
|
@echo " VAR $@"
|
|
$(Q)$(ROMLIB_GEN) genvar --output $@ $<
|
|
|
|
$(LIB_DIR)/libwrappers.a: $(WRAPPER_DIR)/jmpvar.o $(WRAPPER_OBJS)
|
|
@echo " AR $@"
|
|
$(Q)$(aarch64-ar) -rc $@ $(WRAPPER_DIR)/jmpvar.o $(WRAPPER_OBJS)
|
|
|
|
$(BUILD_DIR)/jmptbl.i: ../../$(PLAT_DIR)/jmptbl.i
|
|
@echo " PRE $@"
|
|
$(Q)$(ROMLIB_GEN) pre --output $@ --deps $(BUILD_DIR)/jmptbl.d $<
|
|
|
|
$(WRAPPER_SOURCES) &: $(BUILD_DIR)/jmptbl.i
|
|
@echo " WRP $<"
|
|
$(Q)$(ROMLIB_GEN) genwrappers --bti=$(ENABLE_BTI) -b $(WRAPPER_DIR) $<
|
|
|
|
$(WRAPPER_OBJS): $(WRAPPER_DIR)/%.o: $(WRAPPER_DIR)/%.s
|
|
|
|
$(BUILD_DIR)/jmptbl.s: $(BUILD_DIR)/jmptbl.i
|
|
@echo " TBL $@"
|
|
$(Q)$(ROMLIB_GEN) gentbl --output $@ --bti=$(ENABLE_BTI) $<
|
|
|
|
clean:
|
|
@rm -f $(BUILD_DIR)/*
|
|
|
|
-include $(BUILD_DIR)/romlib.d
|
|
-include $(BUILD_DIR)/jmptbl.d
|