PROG_RESOURCE_MANAGER_DAEMON=uos-resource-manager
PROG_USB_GUARD_DAEMON=uos-usb-guard-daemon
PROG_USB_GUARD=uos-usb-guard

PROG_RESOURCE_MANAGER_DAEMON_FILE_CONF=com.deepin.daemon.ResourceManager.conf
PROG_USB_GUARD_DAEMON_FILE_CONF=com.deepin.daemon.USBGuard.conf
PROG_RESOURCE_MANAGER_DAEMON_FILE_SYSTEMD=uos-resource-manager.service
PROG_USB_GUARD_DAEMON_FILE_SYSTEMD=uos-usb-guard-daemon.service

PROG_MODULE_CONF=uos_resources.conf
PROG_UDEV_RULE=88-filter-block-device.rules

FILE_SCRIPT_NOTIFY=notify

DIR_CONF=misc/conf
DIR_SYSTEMD=misc/systemd
DIR_MODULE_CONF=misc/modules-load.d
DIR_RESOURCE_MANAGER=cmd/uos-resource-manager
DIR_USB_GUARD_DAEMON=cmd/uos-usb-guard-daemon
DIR_USB_GUARD=cmd/uos-usb-guard
DIR_UDEV_RULE=rules.d

DIR_KERNEL_MODULE=module/*
DRIVER_VERSION=uos_resources-1.0.3

PREFIX=/usr
PWD=$(shell pwd)
GOCODE=/usr/share/gocode
GOPATH_DIR=gopath
GOPKG_PREFIX=uos-resource-manager
export GO111MODULE=off

ARCH = $(shell cc -dumpmachine)
MAKE_PIE=-buildmode=pie

ifeq ($(ARCH), $(findstring $(ARCH), mips64el-linux-gnuabi64 sw_64-sunway-linux-gnu sw_64-linux-gnu loongarch64-linux-gnu))
	MAKE_PIE=
endif

all: build

prepare:
		@if [ ! -d ${GOPATH_DIR}/src/${GOPKG_PREFIX} ]; then \
				mkdir -p ${GOPATH_DIR}/src/${GOPKG_PREFIX}; \
				ln -sf ${PWD}/pkg ${GOPATH_DIR}/src/${GOPKG_PREFIX}; \
		fi

build: prepare
		env GOPATH=${PWD}/${GOPATH_DIR}:${GOCODE} go build -ldflags '-w -s -extldflags=-Wl,-z,relro,-z,now' ${MAKE_PIE} -o ${PWD}/${PROG_RESOURCE_MANAGER_DAEMON} ./${DIR_RESOURCE_MANAGER}
		env GOPATH=${PWD}/${GOPATH_DIR}:${GOCODE} go build -ldflags '-w -s -extldflags=-Wl,-z,relro,-z,now' ${MAKE_PIE} -o ${PWD}/${PROG_USB_GUARD_DAEMON} ./${DIR_USB_GUARD_DAEMON}
		env GOPATH=${PWD}/${GOPATH_DIR}:${GOCODE} go build -ldflags '-w -s -extldflags=-Wl,-z,relro,-z,now' ${MAKE_PIE} -o ${PWD}/${PROG_USB_GUARD} ./${DIR_USB_GUARD}

install:
		mkdir -pv ${DESTDIR}${PREFIX}/bin/
		mkdir -pv ${DESTDIR}${PREFIX}/sbin/
		mkdir -pv ${DESTDIR}${PREFIX}/lib/
		mkdir -pv ${DESTDIR}${PREFIX}/share/dbus-1/system.d/
		mkdir -pv ${DESTDIR}${PREFIX}/lib/udev/rules.d/
		mkdir -pv ${DESTDIR}${PREFIX}/lib/systemd/system
		mkdir -pv ${DESTDIR}${PREFIX}/lib/modules-load.d
		mkdir -pv ${DESTDIR}${PREFIX}/src/${DRIVER_VERSION}
		cp -rf ${PROG_RESOURCE_MANAGER_DAEMON} ${DESTDIR}${PREFIX}/sbin/
		cp -rf ${PROG_USB_GUARD_DAEMON} ${DESTDIR}${PREFIX}/sbin/
		cp -rf ${PROG_USB_GUARD} ${DESTDIR}${PREFIX}/bin/
		cp -rf misc/tools/${FILE_SCRIPT_NOTIFY}.sh ${DESTDIR}${PREFIX}/lib/${FILE_SCRIPT_NOTIFY}
		cp -rf ${DIR_CONF}/${PROG_RESOURCE_MANAGER_DAEMON_FILE_CONF} ${DESTDIR}${PREFIX}/share/dbus-1/system.d/
		cp -rf ${DIR_CONF}/${PROG_USB_GUARD_DAEMON_FILE_CONF} ${DESTDIR}${PREFIX}/share/dbus-1/system.d/
		cp -rf ${DIR_SYSTEMD}/${PROG_RESOURCE_MANAGER_DAEMON_FILE_SYSTEMD} ${DESTDIR}${PREFIX}/lib/systemd/system/
		cp -rf ${DIR_SYSTEMD}/${PROG_USB_GUARD_DAEMON_FILE_SYSTEMD} ${DESTDIR}${PREFIX}/lib/systemd/system/		
		cp -rf ${DIR_MODULE_CONF}/${PROG_MODULE_CONF} ${DESTDIR}${PREFIX}/lib/modules-load.d
		cp -rf ${DIR_UDEV_RULE}/${PROG_UDEV_RULE} ${DESTDIR}${PREFIX}/lib/udev/rules.d/
		cp -rf ${DIR_KERNEL_MODULE} ${DESTDIR}${PREFIX}/src/${DRIVER_VERSION}

uninstall:
		rm ${DESTDIR}${PREFIX}/lib/${FILE_SCRIPT_NOTIFY}
		rm ${DESTDIR}${PREFIX}/sbin/${PROG_RESOURCE_MANAGER_DAEMON}
		rm ${DESTDIR}${PREFIX}/sbin/${PROG_USB_GUARD_DAEMON}		
		rm ${DESTDIR}${PREFIX}/bin/${PROG_USB_GUARD}
		rm ${DESTDIR}${PREFIX}/share/dbus-1/system.d/${PROG_RESOURCE_MANAGER_DAEMON_FILE_CONF}
		rm ${DESTDIR}${PREFIX}/share/dbus-1/system.d/${PROG_USB_GUARD_DAEMON_FILE_CONF}
		rm ${DESTDIR}${PREFIX}/lib/udev/rules.d/${PROG_UDEV_RULE}
		rm ${DESTDIR}${PREFIX}/lib/systemd/system/${PROG_RESOURCE_MANAGER_DAEMON_FILE_SYSTEMD}
		rm ${DESTDIR}${PREFIX}/lib/systemd/system/${PROG_USB_GUARD_DAEMON_FILE_SYSTEMD}
		rm ${DESTDIR}${PREFIX}/lib/modules-load.d/${PROG_MODULE_CONF}
		rm ${DESTDIR}${PREFIX}/src/${DRIVER_VERSION} -rf

clean:
		rm -rf ${GOPATH_DIR} ${PROG_RESOURCE_MANAGER_DAEMON} ${PROG_USB_GUARD_DAEMON} ${PROG_USB_GUARD}

rebuild: clean build
