# disable make builtin variables:
MAKEFLAGS += -r -R

CONVERTER=ipc_converter

MQTT_LIB=libmqtt_session.so
IPC_LIB=libipc_helper.so

MYCFLAGS := -Iinclude $(CFLAGS) -Werror -ggdb -fno-omit-frame-pointer # -finstrument-functions

MQTT_LIB_SRC=mqtt_session/mqtt_session_mosq.c mqtt_session/mqtt_session_recv.c cJSON.c
MQTT_LIB_OBJS=$(subst .c,.o, $(MQTT_LIB_SRC))

IPC_LIB_SRC=ipc_session_helper.c
IPC_LIB_OBJ=$(subst .c,.o, $(IPC_LIB_SRC))

CCFLAGS_SO := $(MYCFLAGS) -Os -fPIC
LIBS += -lpthread -lrt -lmosquitto
LDFLAGS_C = $(LDFLAGS) -shared
PCLNT :=
ifneq ($(wildcard $(COLNT_DIR)),)
PCLNT += pclnt_wrapper
$(info PCLNT-TING PACKAGE libipc_session)
endif

.PHONY: all clean distclean demo
all: $(MQTT_LIB) $(IPC_LIB) demo $(CONVERTER)

demo: $(MQTT_LIB) $(IPC_LIB)
	$(PCLNT) $(CC) $(MYCFLAGS) -o mqtt_demo demo/mqtt_demo.c -L. $(LDFLAGS) $(LIBS) -lipc_helper -lmqtt_session

$(CONVERTER): $(MQTT_LIB) $(IPC_LIB)
	$(PCLNT) $(CC) $(MYCFLAGS) -o $(CONVERTER) converter.c -L. $(LDFLAGS) $(LIBS) -lipc_helper -lmqtt_session

$(IPC_LIB):$(IPC_LIB_OBJ) $(MQTT_LIB)
	$(PCLNT) $(CC) $(LDFLAGS_C) -o $(IPC_LIB) $(IPC_LIB_OBJ) $(LIBPATH) -L. $(LIBS) -lmqtt_session

# target executable

$(MQTT_LIB):$(MQTT_LIB_OBJS)
	$(PCLNT) $(CC) $(LDFLAGS_C) -o $(MQTT_LIB) $(MQTT_LIB_OBJS) $(LIBPATH) $(LIBS)

# object files
%.o: %.c
	$(PCLNT) $(CC) $(CCFLAGS_SO) -c -o $@ $(INCLPATH) $<
%.o: %.cpp
	$(PCLNT) $(CC) -c $(MYCFLAGS) -o $@ $<

# clean
clean:
	rm -rf *.o */*.o *.so mqtt_demo ipc_converter

# distclean
distclean: clean
	rm -f $(LIBNAME)
