## 单独调试使用,为了-j编译速度快一点
MAKEFLAGS += -j32
CC = /opt/aarch64--glibc--bleeding-edge-2018.11-1/bin/aarch64-buildroot-linux-gnu-gcc
LNXALL_LIB = ../../../target/install/opt/lnxall_app/
EMS = proto_forward
EMU = emu_lc
EMS_BUILD_DIR = ./ems_build
EMU_BUILD_DIR = ./emu_build

SOFT_VERSION:=$(shell jq .version ../package.json)

COM_INC_DIR += -I$(LNXALL_LIB)/include
COM_INC_DIR += -I$(LNXALL_LIB)/include/lib60870
COM_INC_DIR += -I$(LNXALL_LIB)/include/dy_utils

SRC_DIR = .
########## EMS
EMS_INC_DIR = $(COM_INC_DIR)
EMS_INC_DIR += -I./common -I./adpaper -I./cc_lc_com -I./cloud
EMS_INC_DIR += -I./ems -I./iec104_server -I./lc -I./libmodbus
EMS_INC_DIR += -I./log_module -I./mac_mul -I./mqtt_emms2 -I./opcua 
EMS_INC_DIR += -I./snapshoot -I./alarm_control -I./

EMS_LDFLAGS = -L$(LNXALL_LIB)/lib
EMS_LDFLAGS += -Wl,-rpath=/opt/lnxall_app/lib -Wl,-rpath-link=$(LNXALL_LIB)/lib -ldyutils
EMS_LDFLAGS += -lpthread -lmqtt_session -llib60870 -llz4 -lcrypto -lcurl -llua  -lopen62541 -lsqlite3 -lxlsxwriter -lz -lm -llnxhal -lrt

EMS_SRCS = $(wildcard $(SRC_DIR)/adapter/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/adapter/*/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/cc_lc_com/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/cloud/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/ems/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/iec104_server/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/libmodbus/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/log_module/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/mac_mul/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/opcua/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/mqtt_emms2/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/snapshoot/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/north_mqtt/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/alarm_control/*.c)
EMS_SRCS += $(wildcard $(SRC_DIR)/*.c)

EMS_OBJS = $(patsubst $(SRC_DIR)/%.c, $(EMS_BUILD_DIR)/%.o, $(EMS_SRCS))

EMS_CFLAGS += -DNDEBUG -g -Wall -fPIC -O2
EMS_CFLAGS += -fno-omit-frame-pointer -ggdb -fstack-protector-all -fno-strict-aliasing
EMS_CFLAGS += -DEN_OPCUA -DEN_EMS '-DSW_VERSION=$(SOFT_VERSION)' -DEN_SQLITE -DSUPPORT_LED=1 -D_GNU_SOURCE
EMS_CFLAGS += $(EMS_INC_DIR)


define create_ems_build_dirs
$(foreach dir,$(sort $(dir $(EMS_OBJS))),mkdir -p $(dir);)
endef
########## EMU
EMU_INC_DIR = $(COM_INC_DIR)
EMU_INC_DIR += -I./common -I./adpaper -I./cc_lc_com -I./cloud
EMU_INC_DIR += -I./ems -I./iec104_server -I./lc -I./libmodbus 
EMU_INC_DIR += -I./log_module -I./mac_mul -I./opcua -I./snapshoot -I./

EMU_LDFLAGS = -L$(LNXALL_LIB)/lib
EMU_LDFLAGS += -Wl,-rpath=/opt/lnxall_app/lib -Wl,-rpath-link=$(LNXALL_LIB)/lib -ldyutils
EMU_LDFLAGS += -lpthread -lmqtt_session -llib60870 -llz4 -lcrypto -lcurl -llua  -lopen62541 -lsqlite3 -lxlsxwriter -lz -lm -llnxhal -lrt

EMU_SRCS = $(wildcard $(SRC_DIR)/adapter/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/cc_lc_com/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/cloud/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/lc/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/libmodbus/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/log_module/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/mac_mul/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/opcua/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/snapshoot/*.c)
EMU_SRCS += $(wildcard $(SRC_DIR)/*.c)

EMU_OBJS = $(patsubst $(SRC_DIR)/%.c, $(EMU_BUILD_DIR)/%.o, $(EMU_SRCS))

EMU_CFLAGS += -DNDEBUG -g -Wall -fPIC -O2 -D_GNU_SOURCE -fno-omit-frame-pointer -ggdb -fstack-protector-all -fno-strict-aliasing 
EMU_CFLAGS += -DSUPPORT_LED=1 -DEN_OPCUA -DEN_LC '-DSW_VERSION=$(SOFT_VERSION)' -DEN_SQLITE
EMU_CFLAGS += $(EMU_INC_DIR)


define create_emu_build_dirs
$(foreach dir,$(sort $(dir $(EMU_OBJS))),mkdir -p $(dir);)
endef

############
all: $(EMS) $(EMU)
$(EMS): $(EMS_BUILD_DIR) $(EMS_OBJS)
	$(CC) -o $@ $(EMS_OBJS) $(EMS_LDFLAGS)

$(EMS_BUILD_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) $(EMS_CFLAGS) -c $< -o $@

$(EMS_BUILD_DIR):
	$(call create_ems_build_dirs)
###########
$(EMU): $(EMU_BUILD_DIR) $(EMU_OBJS)
	$(CC) -o $@ $(EMU_OBJS) $(EMU_LDFLAGS)

$(EMU_BUILD_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) $(EMU_CFLAGS) -c $< -o $@

$(EMU_BUILD_DIR):
	$(call create_emu_build_dirs)

clean:
	rm -rf $(EMS) $(EMU) $(EMS_BUILD_DIR) $(EMU_BUILD_DIR)

rebuild: clean all

.PHONY: all clean rebuild


