ROOT_DIR = $(shell pwd)
SRC_DIR = src
OBJ_DIR = out
BIN_DIR = build
SHARED_LIB_TARGET = $(BIN_DIR)/libbleadapter.so
UNSTRIP_SHARED_LIBBLE_ADAPTER = $(BIN_DIR)/libbleadapter.unstripped.so
# for linux secure compile options
SECURE_CFLAG_FOR_SHARE_LIBRARY = -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-common -fPIC
SECURE_LDFLAG_FOR_SHARE_LIBRARY = -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections -Wl,--no-undefined -Wl,--as-needed
SECURE_CFLAG_FOR_DEMO= -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-common -fPIC
SECURE_LDFLAG_FOR_DEMO = -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections -Wl,--no-undefined -Wl,--as-needed
SHARED_LIB_CFLAGS = $(SECURE_CFLAG_FOR_SHARE_LIBRARY)
SHARED_LIB_CFLAGS += -O2 -Wall -Wextra -Werror=format-security -std=gnu11
SHARED_LIB_LDFLAGS = $(SECURE_LDFLAG_FOR_SHARE_LIBRARY)
SHARED_LIB_LDFLAGS += -L$(ROOT_DIR)/out/aarch64/bluez-5.63/lib/.libs
SHARED_LIB_LDFLAGS += -L$(ROOT_DIR)/out/aarch64/glib-2.58.3/glib/.libs
SHARED_LIB_LIBS += -lbluetooth -lpthread -lglib-2.0 #-lnl-3 -lnl-genl-3
SHARED_LIB_INCLUDES += -I$(ROOT_DIR)/include
SHARED_LIB_INCLUDES += -I$(ROOT_DIR)/lib_install/aarch64/include
SHARED_LIB_INCLUDES += -I$(ROOT_DIR)/out/aarch64/glib-2.58.3
SHARED_LIB_INCLUDES += -I$(ROOT_DIR)/out/aarch64/glib-2.58.3/glib
# for release
RELEASE_CFLAGS = -DNDEBUG -flto
RELEASE_LDFLAGS = -flto
# default compile target and default arch
TARGET_ARCH=aarch64-linux-gnu
# define compile commmand
TARGET_ARCH = aarch64-none-linux-gnu
TOOLCHAIN_PATH = /opt/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/
CROSS_COMPILE = $(TOOLCHAIN_PATH)/bin/$(TARGET_ARCH)
SPDLOG_INCLUDE = -I$(TOOLCHAIN_PATH)/include
SPDLOG_LIB_DIR = -L$(TOOLCHAIN_PATH)/lib -L$(TOOLCHAIN_PATH)/$(TARGET_ARCH)/lib64
SYSROOT = $(TOOLCHAIN_PATH)/aarch64-none-linux-gnu/libc
# 工具定义
CC = $(CROSS_COMPILE)-gcc
CXX = $(CROSS_COMPILE)-g++
AR = $(CROSS_COMPILE)-ar
RANLIB = $(CROSS_COMPILE)-ranlib
LD = $(CROSS_COMPILE)-ld
STRIP = $(CROSS_COMPILE)-strip
#原本想防止目录没有新建,确保文件夹存在
#$(OBJ_DIR) $(BIN_DIR):
# mkdir -p $@
# shared library compile and link
SHARED_LIB_SRC = \
$(SRC_DIR)/driver_ble_client.c \
$(SRC_DIR)/driver_ble_client_callback_wrapper.c \
$(SRC_DIR)/driver_ble_common.c \
$(SRC_DIR)/driver_ble_common_utility.c \
$(SRC_DIR)/driver_ble_discovery.c \
$(SRC_DIR)/driver_ble_mem.c \
$(SRC_DIR)/driver_ble_server.c \
$(SRC_DIR)/driver_ble_thread.c
SHARED_LIB_OBJECTS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SHARED_LIB_SRC))
$(SHARED_LIB_OBJECTS): $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CC) $(SHARED_LIB_CFLAGS) $(SHARED_LIB_INCLUDES) -c $< -o $@
$(SHARED_LIB_TARGET): $(SHARED_LIB_OBJECTS)
@echo "==========start link========="
$(CC) -shared $(SHARED_LIB_LDFLAGS) -o $(SHARED_LIB_TARGET) $(SHARED_LIB_OBJECTS) $(SHARED_LIB_LIBS)
cp $(SHARED_LIB_TARGET) $(UNSTRIP_SHARED_LIBBLE_ADAPTER)
$(STRIP) --strip-all $(UNSTRIP_SHARED_LIBBLE_ADAPTER)
@echo "==========link finished========="
bleadapter:$(SHARED_LIB_TARGET)
# clean
clean:
@echo "==========start cleaning========="
rm -f $(SHARED_LIB_OBJECTS) $(BIN_DIR)/libbleadapter.*
@echo "==========clean finished========="
all: bleadapter
#目标
.PHONY: all clean bleadapter