Add make macros to build library archives
This patch adds all the make macros needed to create a library archive and to use it in the link stage. Change-Id: I26597bfd6543649d0b68a9b1e06aec1ba353e6de Signed-off-by: Roberto Vargas <roberto.vargas@arm.com>
This commit is contained in:
parent
f68bc8a1c2
commit
5fee02873b
2
Makefile
2
Makefile
|
@ -670,6 +670,8 @@ ifeq (${ERROR_DEPRECATED},0)
|
|||
CPPFLAGS += -Wno-error=deprecated-declarations -Wno-error=cpp
|
||||
endif
|
||||
|
||||
$(eval $(call MAKE_LIB_DIR))
|
||||
|
||||
# Expand build macros for the different images
|
||||
ifeq (${NEED_BL1},yes)
|
||||
$(eval $(call MAKE_BL,1))
|
||||
|
|
|
@ -189,6 +189,24 @@ GZIP_SUFFIX := .gz
|
|||
|
||||
MAKE_DEP = -Wp,-MD,$(DEP) -MT $$@ -MP
|
||||
|
||||
|
||||
# MAKE_C_LIB builds a C source file and generates the dependency file
|
||||
# $(1) = output directory
|
||||
# $(2) = source file (%.c)
|
||||
# $(3) = library name
|
||||
define MAKE_C_LIB
|
||||
$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2))))
|
||||
$(eval DEP := $(patsubst %.o,%.d,$(OBJ)))
|
||||
|
||||
$(OBJ): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | lib$(3)_dirs
|
||||
@echo " CC $$<"
|
||||
$$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) $(MAKE_DEP) -c $$< -o $$@
|
||||
|
||||
-include $(DEP)
|
||||
|
||||
endef
|
||||
|
||||
|
||||
# MAKE_C builds a C source file and generates the dependency file
|
||||
# $(1) = output directory
|
||||
# $(2) = source file (%.c)
|
||||
|
@ -243,6 +261,18 @@ $(1): $(2) $(filter-out %.d,$(MAKEFILE_LIST)) | bl$(3)_dirs
|
|||
|
||||
endef
|
||||
|
||||
# MAKE_LIB_OBJS builds both C source files
|
||||
# $(1) = output directory
|
||||
# $(2) = list of source files
|
||||
# $(3) = name of the library
|
||||
define MAKE_LIB_OBJS
|
||||
$(eval C_OBJS := $(filter %.c,$(2)))
|
||||
$(eval REMAIN := $(filter-out %.c,$(2)))
|
||||
$(eval $(foreach obj,$(C_OBJS),$(call MAKE_C_LIB,$(1),$(obj),$(3))))
|
||||
|
||||
$(and $(REMAIN),$(error Unexpected source files present: $(REMAIN)))
|
||||
endef
|
||||
|
||||
|
||||
# MAKE_OBJS builds both C and assembly source files
|
||||
# $(1) = output directory
|
||||
|
@ -274,6 +304,41 @@ endef
|
|||
# This must be set to a C string (including quotes where applicable).
|
||||
BUILD_MESSAGE_TIMESTAMP ?= __TIME__", "__DATE__
|
||||
|
||||
.PHONY: libraries
|
||||
|
||||
|
||||
# MAKE_LIB_DIR macro defines the target for the directory where
|
||||
# libraries are created
|
||||
define MAKE_LIB_DIR
|
||||
$(eval LIB_DIR := ${BUILD_PLAT}/lib)
|
||||
$(eval $(call MAKE_PREREQ_DIR,${LIB_DIR},${BUILD_PLAT}))
|
||||
endef
|
||||
|
||||
# MAKE_LIB macro defines the targets and options to build each BL image.
|
||||
# Arguments:
|
||||
# $(1) = Library name
|
||||
define MAKE_LIB
|
||||
$(eval BUILD_DIR := ${BUILD_PLAT}/lib$(1))
|
||||
$(eval LIB_DIR := ${BUILD_PLAT}/lib)
|
||||
$(eval SOURCES := $(LIB$(call uppercase,$(1))_SRCS))
|
||||
$(eval OBJS := $(addprefix $(BUILD_DIR)/,$(call SOURCES_TO_OBJS,$(SOURCES))))
|
||||
|
||||
$(eval $(call MAKE_PREREQ_DIR,${BUILD_DIR},${BUILD_PLAT}))
|
||||
$(eval $(call MAKE_LIB_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
|
||||
|
||||
.PHONY : lib${1}_dirs
|
||||
lib${1}_dirs: | ${BUILD_DIR} ${LIB_DIR}
|
||||
libraries: ${LIB_DIR}/lib$(1).a
|
||||
LDPATHS = -L${LIB_DIR}
|
||||
LDLIBS += -l$(1)
|
||||
|
||||
all: ${LIB_DIR}/lib$(1).a
|
||||
|
||||
${LIB_DIR}/lib$(1).a: $(OBJS)
|
||||
@echo " AR $$@"
|
||||
$$(Q)$$(AR) cr $$@ $$?
|
||||
endef
|
||||
|
||||
# MAKE_BL macro defines the targets and options to build each BL image.
|
||||
# Arguments:
|
||||
# $(1) = BL stage (2, 2u, 30, 31, 32, 33)
|
||||
|
@ -313,7 +378,7 @@ bl${1}_dirs: | ${OBJ_DIRS}
|
|||
$(eval $(call MAKE_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
|
||||
$(eval $(call MAKE_LD,$(LINKERFILE),$(BL_LINKERFILE),$(1)))
|
||||
|
||||
$(ELF): $(OBJS) $(LINKERFILE) | bl$(1)_dirs $(BL_LIBS)
|
||||
$(ELF): $(OBJS) $(LINKERFILE) | bl$(1)_dirs libraries $(BL_LIBS)
|
||||
@echo " LD $$@"
|
||||
ifdef MAKE_BUILD_STRINGS
|
||||
$(call MAKE_BUILD_STRINGS, $(BUILD_DIR)/build_message.o)
|
||||
|
@ -323,7 +388,8 @@ else
|
|||
$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -xc -c - -o $(BUILD_DIR)/build_message.o
|
||||
endif
|
||||
$$(Q)$$(LD) -o $$@ $$(TF_LDFLAGS) $$(LDFLAGS) -Map=$(MAPFILE) \
|
||||
--script $(LINKERFILE) $(BUILD_DIR)/build_message.o $(OBJS) $(LDLIBS) $(BL_LIBS)
|
||||
--script $(LINKERFILE) $(BUILD_DIR)/build_message.o \
|
||||
$(OBJS) $(LDPATHS) $(LDLIBS) $(BL_LIBS)
|
||||
|
||||
$(DUMP): $(ELF)
|
||||
@echo " OD $$@"
|
||||
|
|
Loading…
Reference in New Issue