SHELL	:= /bin/sh
OUTPUT_MAKE_DEBUG ?= FALSE
CMD_MSG_ON ?= FALSE

ifeq ($(CMD_MSG_ON), TRUE)
MLOG	:=
else
MLOG	:= @
endif

ifeq ($(OUTPUT_MAKE_DEBUG), TRUE)
DIS_BUILD_WARRING 	?= FALSE
EN_MAKE_MSG			?= TRUE
else
DIS_BUILD_WARRING 	?= TRUE
EN_MAKE_MSG			?= FALSE
endif

ifeq ($(EN_MAKE_MSG), TRUE)
MAKE_FLAGS			:=
else
MAKE_FLAGS			:= -s
endif

ifneq ($(OPT), clean)
ifneq ($(OPT), install)
MAKE_FLAGS				+= -j$(shell cat /proc/cpuinfo | grep processor | wc -l)
endif
endif

.PHONY : demo database openrpc ulog klog klog_test conntrack netlink trace redismq usermanager configm webauth matchrule logging

all: demo database openrpc ulog klog klog_test conntrack netlink trace redismq usermanager configm webauth matchrule logging

ifeq ($(OPT), install)
#$(shell `find ../release -name "*.zip" -delete`)
else ifeq ($(OPT), clean)
#
else
$(shell chmod +x ./build_env.sh && ./build_env.sh)
endif

ifeq ($(OPT), clean)
#
endif


demo:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.demo.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=demo
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.demo.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=demo
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.demo.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=demo
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.demo.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=demo
else
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f module.demo.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=demo
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f user.demo.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=demo
endif

conntrack:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.api.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=conntrack
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.demoA.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=demoA
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.test.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=test
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=conntrack
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.demoA.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=demoA
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.conntrack.test.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=conntrack
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.conntrack.api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=conntrack
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.conntrack.demoA.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=demoA
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.conntrack.test.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=test
endif

netlink:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.netlink_api.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=netlink_api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.cfgrcv.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=cfgrcv
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.pdelivery.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=cfg2kernel
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv_u
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=pdeliv_rcvtest
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=netlink_uapi
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.netlink_api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=netlink_api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.cfgrcv.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=cfgrcv
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.pdelivery.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=pdeliv
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=netlink_uapi
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=cfg2kernel
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=pdeliv_u
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=pdeliv_rcvtest
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.netlink_api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=netlink_api
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.cfgrcv.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=cfgrcv
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.pdelivery.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=pdeliv
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.netlink_uapi.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=netlink_uapi
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.cfg2kernel.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=cfg2kernel
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.pdeliv_u.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=pdeliv_u
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.pdeliv.rcvtest.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=pdeliv_rcvtest
endif

trace:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.trace_relay.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=trace-relay
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.trace.api.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=trace-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.trace.test.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=trace-test
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.trace_relay.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=trace-relay
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.trace.api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=trace-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.trace.test.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=trace-test
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.trace_relay.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=trace-relay
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.trace.api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=trace-api
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.trace.test.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=trace-test
endif

openrpc:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.openrpc.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=openrpc
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.openrpc.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=openrpc
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.openrpc.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=openrpc
endif

usermanager:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.usermanager-auth.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=usermanager-auth
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.usermanager-test.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=usermanager-test
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.usermanager-auth.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=usermanager-auth
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.usermanager-test.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=usermanager-test
else
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f user.usermanager-auth.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=usermanager-auth
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f user.usermanager-test.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=usermanager-test
endif

configm:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configm.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=configm
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configmapi.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=configm-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configmtest.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=configmtest
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configm.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=configm
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configmapi.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=configm-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.configmtest.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=configmtest
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.configm.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=configm
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.configmapi.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=configm-api
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.configmtest.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=configmtest
endif


redismq:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.redismq.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=redismq
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.redismq.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=redismq
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.redismq.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=redismq
endif

ulog:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.ulog.api.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=ulog-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.ulog.log_sched.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=log-sched
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.ulog.api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=ulog-api
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.ulog.log_sched.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=log-sched
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.ulog.api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=ulog-api
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.ulog.log_sched.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=log-sched
endif

database:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.database.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=database
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.database.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=database
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.database.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=database
endif

webauth:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.web-auth.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=webauth
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f user.web-auth.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=webauth
else
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f user.web-auth.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=webauth
endif

matchrule:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.khash.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=khashtable
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.matchrule.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=matchrule
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.khash.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=khashtable
	$(MLOG)make $(MAKE_FLAGS) -C Product/build -f module.matchrule.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=matchrule

else
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f module.khash.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=khashtable
	$(MLOG)make all $(MAKE_FLAGS) -C Product/build -f module.matchrule.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=matchrule
endif

logging:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.logging.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=logging
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f user.logging.Makefile install MLOG=$(MLOG) MAKE_TARGET=logging
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f user.logging.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=logging
endif

klog:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.klog_api.api.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=klog_api
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.klog_api.api.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=klog_api
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.klog_api.api.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=klog_api
endif

klog_test:
ifeq ($(OPT), clean)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.klog_api.test.Makefile cleanall MLOG=$(MLOG) MAKE_TARGET=test_klog_api
else ifeq ($(OPT), install)
	$(MLOG)make $(MAKE_FLAGS) -C Platform/build -f module.klog_api.test.Makefile install DIR=$(DIR) MLOG=$(MLOG) MAKE_TARGET=test_klog_api
else
	$(MLOG)make all $(MAKE_FLAGS) -C Platform/build -f module.klog_api.test.Makefile MLOG=$(MLOG) DISABLE_WARRING=$(DIS_BUILD_WARRING) MAKE_TARGET=test_klog_api
endif