ROOT_DIR = $(shell pwd)
SRC_DIR = src
OBJ_DIR = out
BIN_DIR = build
DEMO_DIR = demo
INCLUDE_DIR = include
SHARED_LIB_SOURCES = $(filter-out $(SRC_DIR)/driver_ble.c $(SRC_DIR)/driver_hostap.c, $(wildcard $(SRC_DIR)/*.c))
SHARED_LIB_OBJECTS = $(SHARED_LIB_SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
WIFI_DEMO_SRC = $(DEMO_DIR)/wifi_demo.c
WIFI_DEMO_OBJ = $(OBJ_DIR)/wifi_demo.o
WIFI_DEMO = $(BIN_DIR)/wifi_demo
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_LDFLAGS = $(SECURE_LDFLAG_FOR_SHARE_LIBRARY)
DEMO_CFLAGS = $(SECURE_CFLAG_FOR_DEMO)
DEMO_LDFLAGS = $(SECURE_LDFLAG_FOR_DEMO)
SHARED_LIB_LIBS += -lwpa_client -lbluetooth -lpthread -lglib-2.0 -lnl-3 -lnl-genl-3
DEMO_LIB_LIBS += -lwpa_client -lbluetooth -lpthread -lglib-2.0 -lnl-3 -lnl-genl-3
SHARED_LIB_LDFLAGS += -L$(ROOT_DIR)/lib_install/aarch64/lib -L$(ROOT_DIR)/out/aarch64/bluez-5.63/lib/.libs/ -L$(ROOT_DIR)/out/aarch64/bluez-5.63/src/.libs/
SHARED_LIB_LDFLAGS += -L$(ROOT_DIR)/out/aarch64/wpa_supplicant-2.9//lib/.libs/ -L$(ROOT_DIR)/out/aarch64/wpa_supplicant-2.9/src
SHARED_LIB_INCLUDES += -I$(ROOT_DIR)/$(INCLUDE_DIR) -I$(ROOT_DIR)/lib_install/aarch64/include -I/usr/local/include -I$(ROOT_DIR)/lib_install/aarch64/include/libnl3
SHARED_LIB_CFLAGS += -O2 -Wall -Wextra -Werror=format-security
DEMO_LDFLAGS += -L$(ROOT_DIR)/lib_install/aarch64/lib -L$(ROOT_DIR)/out/aarch64/bluez-5.63/lib/.libs/ -L$(ROOT_DIR)/out/aarch64/bluez-5.63/src/.libs/
DEMO_LDFLAGS += -L$(ROOT_DIR)/out/aarch64/wpa_supplicant-2.9//lib/.libs/ -L$(ROOT_DIR)/out/aarch64/wpa_supplicant-2.9/src
DEMO_INCLUDES += -I$(ROOT_DIR)/$(INCLUDE_DIR) -I$(ROOT_DIR)/lib_install/aarch64/include -I$(ROOT_DIR)/lib_install/aarch64/include/libnl3
DEMO_LDFLAGS += -L./$(BIN_DIR)/
DEMO_CFLAGS += -O2 -Wall -Wextra -Werror=format-security
GLIB_INCLUDES += -I$(ROOT_DIR)/lib_install/aarch64/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include/
DEBUG_SHARED_LIB_CFLAGS = -g3 -DDEBUG -fsanitize=address -fsanitize=undefined
DEBUG_SHARED_LIB_LDFLAGS = -fsanitize=address -fsanitize=undefined
RELEASE_CFLAGS = -DNDEBUG -flto
RELEASE_LDFLAGS = -flto
TARGET_ARCH=aarch64-linux-gnu
SHARED_LIB = $(BIN_DIR)/sharekit_driver.so
UNSTRIP_SHARED_LIB = $(BIN_DIR)/sharekit_driver.unstripped.so
export CC=/usr/bin/${TARGET_ARCH}-gcc
export CXX=/usr/bin/${TARGET_ARCH}-g++
export AR=/usr/bin/${TARGET_ARCH}-ar
export RANLIB=/usr/bin/${TARGET_ARCH}-ranlib
export LD=/usr/bin/${TARGET_ARCH}-ld
export STRIP=/usr/bin/${TARGET_ARCH}-strip
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CC) $(SHARED_LIB_CFLAGS) $(SHARED_LIB_INCLUDES) -c $< -o $@ $(GLIB_INCLUDES)
$(SHARED_LIB):$(SHARED_LIB_OBJECTS)
@echo "==========start link========="
$(CC) -shared $(SHARED_LIB_LDFLAGS) -o $(SHARED_LIB) $(SHARED_LIB_OBJECTS) $(LIBS) $(SHARED_LIB_LIBS)
cp $(SHARED_LIB) $(UNSTRIP_SHARED_LIB)
$(STRIP) --strip-all $(UNSTRIP_SHARED_LIB)
@echo "==========link finished========="
sharekit_driver:$(SHARED_LIB)
$(WIFI_DEMO_OBJ): $(WIFI_DEMO_SRC) | $(OBJ_DIR)
$(CC) $(DEMO_CFLAGS) $(DEMO_INCLUDES) -c $< -o $@ $(GLIB_INCLUDES)
$(WIFI_DEMO): $(WIFI_DEMO_OBJ) | $(BIN_DIR)
@echo "==========start link wifi_demo========="
$(CC) $(DEMO_LDFLAGS) -Wl,-rpath=$(BIN_DIR) -o $@ $< $(SHARED_LIB) $(DEMO_LIB_LIBS)
@echo "==========wifi_demo link finished========="
demo:$(WIFI_DEMO)
clean:
@echo "==========start cleaning========="
rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.d
@echo "==========clean finished========="
all: sharekit_driver demo
rebuild: clean all
.PHONY: all clean rebuild sharekit_driver demo