MXVER:=`awk '{if($$2=="MX_SER_VERSION"){print $$3}}' ../../mx_ver.h | sed s/\"//g`
TARGET_DRIVER1:=mxser
TARGET_DRIVER2:=mxupcie
CPLD_PATH:=../CPLD/Source
LVER:=$(shell uname -r)
MOD_DIR:= /lib/modules/$(LVER)/updates/moxa
DEPMOD_CONF_DIR:= /etc/depmod.d
DEPMOD_CONF:= $(DEPMOD_CONF_DIR)/moxa-smartio.conf
EXTRA_CFLAGS  += -DOS_LINUX

##############################################################
all: module
install: module
	@mkdir -p $(MOD_DIR)
	@cp -f ./$(TARGET_DRIVER1).ko $(MOD_DIR)/
	@cp -f ./$(TARGET_DRIVER2).ko $(MOD_DIR)/
	@mkdir -p $(DEPMOD_CONF_DIR)
	@printf '%s\n' "override $(TARGET_DRIVER1) * updates/moxa" "override $(TARGET_DRIVER2) * updates/moxa" > $(DEPMOD_CONF)
	@chmod 0644 $(DEPMOD_CONF)
	@depmod -a $(LVER)
	@for module in $(TARGET_DRIVER1) $(TARGET_DRIVER2); do module_path=$$(modinfo -n $$module 2>/dev/null); case "$$module_path" in */updates/moxa/$$module.ko|*/updates/moxa/$$module.ko.*) ;; *) echo "Error: $$module resolves to unexpected module: $$module_path"; exit 1 ;; esac; done
	@echo " "
	@echo "**********************************************************************"
	@echo -n " MOXA Smartio/Industio Family Multiport Board Driver "
	@echo $(MXVER)
	@echo " installed successfully."
	@echo "**********************************************************************"

k6p1: module_k6p1
	@mkdir -p $(MOD_DIR)
	@cp -f ./$(TARGET_DRIVER1).ko $(MOD_DIR)/
	@cp -f ./$(TARGET_DRIVER2).ko $(MOD_DIR)/
	@mkdir -p $(DEPMOD_CONF_DIR)
	@printf '%s\n' "override $(TARGET_DRIVER1) * updates/moxa" "override $(TARGET_DRIVER2) * updates/moxa" > $(DEPMOD_CONF)
	@chmod 0644 $(DEPMOD_CONF)
	@depmod -a $(LVER)
	@for module in $(TARGET_DRIVER1) $(TARGET_DRIVER2); do module_path=$$(modinfo -n $$module 2>/dev/null); case "$$module_path" in */updates/moxa/$$module.ko|*/updates/moxa/$$module.ko.*) ;; *) echo "Error: $$module resolves to unexpected module: $$module_path"; exit 1 ;; esac; done
	@echo " "
	@echo "**********************************************************************"
	@echo -n " MOXA Smartio/Industio Family Multiport Board Driver "
	@echo $(MXVER)
	@echo " installed successfully."
	@echo "**********************************************************************"


ifneq ($(KERNELRELEASE),)
obj-m := $(TARGET_DRIVER1).o $(TARGET_DRIVER2).o 
$(TARGET_DRIVER2)-objs := mxpcie.o ${CPLD_PATH}/cpld.o ${CPLD_PATH}/gpio.o
else
KDIR	:= /lib/modules/$(LVER)/build
PWD	:= $(shell pwd)

module: envchk
	@$(MAKE) -s -C $(KDIR) M=$(PWD) modules 2>> build.log \
	&& cp -f ./build.log ../../build.log \
	&& exit 0 \
	|| echo "Build Fail! Please check build.log for further information" \
	&& echo "and send it to support@moxa.com." \
	&& cp -f ./build.log ../../build.log \
	&& exit 1

module_k6p1: envchk
	@$(MAKE) EXTRA_CFLAGS+=" -DOS_LINUX -DKERNEL6_PATCH1" -s -C $(KDIR) M=$(PWD) modules 2>> build.log \
	&& cp -f ./build.log ../../build.log \
	&& exit 0 \
	|| echo "Build Fail! Please check build.log for further information" \
	&& echo "and send it to support@moxa.com." \
	&& cp -f ./build.log ../../build.log \
	&& exit 1

envchk:
	@./mxconf | tee build.log

clean: clean_local

endif

uninstall: clean_lib unload_driver remove_msg

clean_local:
	@rm -f *.o
	@rm -rf ./.tmp_versions
	@rm -f $(TARGET_DRIVER1).mod*
	@rm -f $(TARGET_DRIVER2).mod*
	@rm -f .$(TARGET_DRIVER1)*
	@rm -f .$(TARGET_DRIVER2)*
	@rm -f $(TARGET_DRIVER1).ko
	@rm -f $(TARGET_DRIVER2).ko
	@rm -f mxpcie.dwo
	@rm -f mxser.dwo
	@rm -f .modules.order.cmd
	@rm -f .Module.symvers.cmd
	@rm -f .cache.mk
	@rm -f mxpcie.o.ur-safe
	@rm -f mxser.o.ur-safe
	@rm -f mxpcie.o
	@rm -f .mxpcie.o.cmd
	@rm -f mxupcie.o	
	@rm -f .mxupcie.o.cmd
	@rm -f *.symvers
	@rm -f *.log
	@rm -f ../../*.log
	@rm -f *.markers
	@rm -f *.order
	@rm -f ${CPLD_PATH}/*.o
	@rm -f ${CPLD_PATH}/.cpld.o.cmd ${CPLD_PATH}/.gpio.o.cmd
	@rm -f ${CPLD_PATH}/*.dwo

clean_lib:
	@rm -f $(DEPMOD_CONF)
	@rm -f $(MOD_DIR)/$(TARGET_DRIVER1).ko*
	@rm -f $(MOD_DIR)/$(TARGET_DRIVER2).ko*
	@rm -f /lib/modules/$(LVER)/kernel/drivers/char/$(TARGET_DRIVER1).ko
	@rm -f /lib/modules/$(LVER)/kernel/drivers/char/$(TARGET_DRIVER2).ko
	@rm -f /lib/modules/$(LVER)/misc/$(TARGET_DRIVER1).ko
	@rm -f /lib/modules/$(LVER)/misc/$(TARGET_DRIVER2).ko
	@rm -f /dev/mxser
	@rm -f /dev/mxupcie
	@rm -f /etc/moxa/moxa_unbind
	@rm -f /etc/systemd/system/moxa_unbind.service
	@depmod -a

unload_driver:	
	@if lsmod | grep -q $(TARGET_DRIVER1) ; then rmmod $(TARGET_DRIVER1) ; fi
	@if lsmod | grep -q $(TARGET_DRIVER2) ; then rmmod $(TARGET_DRIVER2) ; fi

remove_msg:
	@echo "**********************************************************************"
	@echo -n " MOXA Smartio/Industio Family Multiport Board Driver "
	@echo $(MXVER)
	@echo " removed compeleted."
	@echo "**********************************************************************"

