124 lines
4.3 KiB
Plaintext
124 lines
4.3 KiB
Plaintext
# ==============================================================================
|
||
# common makefile
|
||
#FileName: makefile.common
|
||
#Author: xianfeng.du
|
||
#Data: 2022-08-10
|
||
#Description: common
|
||
# ==============================================================================
|
||
VERSION = 1.00
|
||
|
||
ifneq ($(findstring ape,$(build_variable)),)
|
||
DEFINES += APE_INT
|
||
else
|
||
DEFINES += RFM_INT
|
||
endif
|
||
#DEFINES += APE_CORE_MASK=\"$(ape_core_mask)\"
|
||
DEFINES += APE_CORE_MASK=$(ape_core_mask)
|
||
DEFINES += PLATFORM_BUILD_DATA=$(platform_build_data)
|
||
|
||
DEFINES += SPU_VERSION=\"${spu_version}\"
|
||
DEFINES += SPU_TAG=\"${spu_tag}\"
|
||
DEFINES += SPU_BUILD_DATE=\"${spu_build_date}\"
|
||
|
||
ifeq ($(backhaul_option), pcie)
|
||
DEFINES += PCIE_BACKHAUL
|
||
endif
|
||
|
||
CC_FLAGS += $(foreach d,$(DEFINES),-D$(d))
|
||
$(info "DEFINES=" $(DEFINES))
|
||
$(info "LINK_FILE=" $(LINK_FILE))
|
||
|
||
# ==============================================================================
|
||
# files and dirs definition
|
||
# ==============================================================================
|
||
LIB_DIRS += $(DIRS_LIB_FOLDER)
|
||
SRC_DIRS += $(addsuffix /src, $(DIRS_SRC_FOLDER))
|
||
INC_DIRS += $(patsubst %/src,%/inc,$(sort $(SRC_DIRS)))
|
||
|
||
#Flatten files
|
||
#main.c files
|
||
MAIN_SRC_FILE := $(shell find $(DIRS_SRC_FOLDER) -name "*main.s.c")
|
||
TOP_SRC_FILE += $(MAIN_SRC_FILE)
|
||
TOP_DIR := $(sort $(dir $(TOP_SRC_FILE)))
|
||
ABS_TOP_DIR := $(patsubst %/,%,$(abspath $(TOP_DIR)))
|
||
|
||
#src files
|
||
ABS_SRC_DIRS := $(foreach d,$(SRC_DIRS),$(abspath $(d)))
|
||
SRC_FILES := $(foreach d,$(ABS_SRC_DIRS),$(wildcard $(d)/*.c))
|
||
|
||
# Allow certain files to be excluded from the build
|
||
EXCL_SRCS_FILES += $(TOP_SRC_FILE)
|
||
EXCL_SRCS_FILES += $(DIR_COMMON)/driver/src/ucp_wdt.s.c
|
||
EXCL_SRCS_FILES += $(DIR_COMMON)/utility/src/ucp_mem_dump.s.c
|
||
|
||
# Filter source files (allow files to be excluded)
|
||
FINAL_SRCS_FILES := $(foreach f,$(SRC_FILES),$(if $(findstring $(abspath $(f)),$(abspath $(EXCL_SRCS_FILES))),,$(f)))
|
||
|
||
# ==============================================================================
|
||
# Variables: Output Files
|
||
# ==============================================================================
|
||
TARGET_DIR := $(BUILD_DIR)/$(build_variable)
|
||
OBJ_TARGET := $(TARGET_DIR)/obj
|
||
OBJ_LIB := $(TARGET_DIR)/lib
|
||
OBJ_TOP := $(TARGET_DIR)/top
|
||
|
||
TARGET_LIB := $(TARGET_DIR)/lib$(build_variable).a
|
||
ifneq ($(findstring ape,$(build_variable)),)
|
||
TARGET_BIN := $(TARGET_DIR)/$(build_variable)$(ape_id).out
|
||
else
|
||
TARGET_BIN := $(TARGET_DIR)/$(build_variable).out
|
||
endif
|
||
|
||
OBJ_FILES := $(foreach f,$(FINAL_SRCS_FILES),$(OBJ_TARGET)/$(patsubst %.c,%.o,$(notdir $(f))))
|
||
OBJ_FILES_TOP := $(foreach f,$(TOP_SRC_FILE),$(OBJ_TOP)/$(patsubst %.c,%.o,$(notdir $(f))))
|
||
OBJ_FILES_LIB := $(wildcard $(OBJ_LIB)/*.o)
|
||
|
||
OBJ_FILES_MAIN := $(foreach f,$(MAIN_SRC_FILE),$(OBJ_TOP)/$(patsubst %.c,%.o,$(notdir $(f))))
|
||
#$(info "OBJ_FILES_MAIN=" $(OBJ_FILES_MAIN))
|
||
|
||
# ==============================================================================
|
||
# Rules: Compilation
|
||
# ==============================================================================
|
||
define DO_BUILD_OBJ
|
||
$(2)/%.o: $(1)/%.c | $(2)
|
||
@echo "# Compiling $(DIA_FLAGS) $$< -> $$@"
|
||
$(PREFIX)$(UCP_CC)/clang $(DIA_FLAGS) $(TAR_FLAGS) $(CC_FLAGS) -o $$@ -c $$< $(patsubst %,-I %,$(INC_DIRS))
|
||
endef
|
||
|
||
define DO_BUILD_DIR
|
||
$(1):
|
||
# @echo "# Creating directory $$@"
|
||
mkdir -p $$@
|
||
endef
|
||
|
||
define DO_BUILD
|
||
$(eval $(call DO_BUILD_DIR,$(1)))
|
||
$(foreach d,$(sort $(2)),$(eval $(call DO_BUILD_OBJ,$(d),$(1))))
|
||
endef
|
||
|
||
$(eval $(call DO_BUILD,$(OBJ_TARGET),$(ABS_SRC_DIRS)))
|
||
$(eval $(call DO_BUILD,$(OBJ_TOP),$(ABS_TOP_DIR)))
|
||
|
||
$(TARGET_BIN):$(OBJ_FILES) $(OBJ_FILES_TOP)
|
||
@echo "# Linking objects to form $@"
|
||
$(PREFIX)$(UCP_CC)/ld.lld $(GC_FLAGS) -o $@ $^ $(USER_OBJS) $(patsubst %,-L %,$(LIB_DIRS)) $(LD_FLAGS) -T$(LINK_FILE)
|
||
|
||
$(TARGET_LIB):$(OBJ_FILES) $(OBJ_FILES_LIB) $(OBJ_FILES_MAIN)
|
||
@echo "# Linking objects to form $@"
|
||
$(PREFIX)ar rcs -o $@ $^
|
||
|
||
# ==============================================================================
|
||
# Rules: Targets
|
||
# ==============================================================================
|
||
.DEFAULT_GOAL := all
|
||
.PHONY: bin lib clean
|
||
all: bin lib
|
||
|
||
bin: $(TARGET_BIN)
|
||
|
||
lib: $(TARGET_LIB)
|
||
|
||
clean:
|
||
@echo "deleted all files"
|
||
rm -rf $(BUILD_DIR)
|