#******************************************************************************* # Path information #******************************************************************************* LOCAL_DIR := $(realpath $(shell pwd)) DEMO_TOP := $(LOCAL_DIR) SOURCE_DIR := $(DEMO_TOP)/src DYNAMIC_DIR := $(DEMO_TOP)/lib INCLUDE_DIR := $(DEMO_TOP)/include OUTPUT_DIR := $(LOCAL_DIR)/output INSTALL_DIR ?= $(LOCAL_DIR)/__install #******************************************************************************* # Variables #******************************************************************************* # target TARGET ?= demo_hello PRODUCT ?= LBC2 PLATFORM_RK3568 := LBC2 #******************************************************************************* # Functions #******************************************************************************* #******************************************************************************* # Objects #******************************************************************************* sources = $(subst $(LOCAL_DIR)/,,$(shell find $(SOURCE_DIR) -name "*.c")) #$(info sources=$(sources)) filter_out_files := filter_out_dirs := sources_out := $(foreach dir,$(filter_out_dirs),$(shell find $(dir) -name "*.c")) #$(info sources_out=$(sources_out)) sources := $(filter-out $(sources_out),$(sources)) sources := $(foreach file,$(sources),$(if $(filter $(subst $(LOCAL_DIR)/,,$(strip $(patsubst %/,%,$(sort $(dir $(file)))))),$(filter_out_dirs)),,$(file))) objects = $(addprefix $(OUTPUT_DIR)/,$(patsubst %.c,%.o,$(sources))) $(info objects=$(objects)) #******************************************************************************* # Compile configure #******************************************************************************* ARCH := arm ifneq ($(filter $(PRODUCT),$(PLATFORM_RK3568)),) ARCH := arm64 #CROSS_COMPILE := $(HOME)/Workspaces/Toolchains/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- CROSS_COMPILE := $(HOME)/Workspaces/Toolchains/aarch64/aarch64-linux-android-4.9/ endif CC := $(CROSS_COMPILE)gcc LD := $(CROSS_COMPILE)ld AR := $(CROSS_COMPILE)ar STRIP := $(CROSS_COMPILE)strip export ARCH CROSS_COMPILE INC_DIRS := $(INCLUDE_DIR) LIB_DIRS := $(DYNAMIC_DIR) LIBS := $(LIBS_$(PLATFORM)) CFLAGS := CFLAGS += $(if $(INC_DIRS),$(addprefix -I,$(sort $(INC_DIRS)))) -g -Wall -O2 LDFLAGS += $(if $(LIB_DIRS),$(addprefix -L,$(sort $(LIB_DIRS)))) $(if $(LIBS),$(addprefix -l,$(sort $(LIBS)))) ARFLAGS += #******************************************************************************* # Targets #******************************************************************************* .PHONY: init $(TARGET) install clean help all: init $(TARGET) init: @mkdir -p $(OUTPUT_DIR) $(TARGET): $(objects) @echo ">>>>>>>>>>>>>>>>>>> $@ >>>>>>>>>>>>>>>>>>>" $(CC) -o $(OUTPUT_DIR)/$@ $^ $(CFLAGS) $(LDFLAGS) $(OUTPUT_DIR)/%.o: %.c @mkdir -p $(@D) @$(CC) -o $@ -c $< $(CFLAGS) install: @echo ">>>>>>>>>>>>>>>>>>> $@ >>>>>>>>>>>>>>>>>>>" @if [ -d ${INSTALL_DIR} ]; then cp -arf $(OUTPUT_DIR)/t1_test ${INSTALL_DIR}/; fi clean: @echo ">>>>>>>>>>>>>>>>>>> $@ >>>>>>>>>>>>>>>>>>>" @rm -rf $(OUTPUT_DIR) @if [ -d $(LOCAL_DIR)/__install ]; then \ rm -rf $(LOCAL_DIR)/__install; \ fi help: @echo "usage: make PRODUCT={PRODUCT}"