ifndef OBJ_DIR
	OBJ_DIR = obj
endif

all:demo

install:libpm_install libinput-uevent_install pm-demo_install

uninstall:libpm_uninstall libinput-uevent_uninstall pm-demo_uninstall

clean:lib_clean pm-demo_clean

dir:
	mkdir -p $(OBJ_DIR)

pm-dir = src
utils-dir = utils
input_uevent-dir = input_uevent
demo-dir = demo

TARGET = $(OBJ_DIR)/libpm.so
TARGET_INC = src/pm.h
CFLAGS = -Wall \
		 -g \
		 -O \
		 -fPIC \
		 -Iutils
LIBS = -lpthread \
	   -lrt
SRCS = $(wildcard $(pm-dir)/*.c $(utils-dir)/*.c)
OBJS = $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(SRCS)))

libpm:dir $(OBJS)
	$(CC) $(CFLAGS) -shared -o $(TARGET) $(OBJS) $(LIBS)

$(OBJS):$(SRCS)
	$(foreach var,$^,\
		$(CC) $(CFLAGS) -c $(var) -o $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(var)));\
	)

libpm_install:
	cp $(TARGET) /usr/lib
	cp $(TARGET_INC) /usr/include

libpm_uninstall:
	rm -f /usr/lib/$(notdir $(TARGET))
	rm -f usr/include/$(notdir $(TARGET_INC))

TARGET_I = $(OBJ_DIR)/libinput-uevent.so
TARGET_I_INC = input_uevent/input_uevent.h
CFLAGS_I = -Wall \
		   -g \
		   -O \
		   -fPIC \
		   -D_GNU_SOURCE \
		   -Iutils
LIBS_I = -lpthread \
		 -lrt
SRCS_I = $(wildcard $(input_uevent-dir)/*.c $(utils-dir)/*.c)
OBJS_I = $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(SRCS_I)))

libinput-uevent:dir $(OBJS_I)
	$(CC) $(CFLAGS_I) -shared -o $(TARGET_I) $(OBJS_I) $(LIBS_I)

$(OBJS_I):$(SRCS_I)
	$(foreach var,$^,\
		$(CC) $(CFLAGS_I) -c $(var) -o $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(var)));\
	)

libinput-uevent_install:
	cp $(TARGET_I) /usr/lib
	cp $(TARGET_I_INC) /usr/include

libinput-uevent_uninstall:
	rm -f /usr/lib/$(notdir $(TARGET_I))
	rm -f /usr/include/$(notdir $(TARGET_I_INC))

lib_clean:
	rm -f $(OBJ_DIR)/*.o
	rm -f $(OBJ_DIR)/*.so

TARGET_D = $(OBJ_DIR)/pm-demo
CFLAGS_D = -Wall \
		   -g \
		   -O \
		   -Iinput_uevent \
		   -Isrc
LIBS_D = -linput-uevent \
		 -lpm \
		 -lpthread
LIBPATH_D = -L$(OBJ_DIR)
SRCS_D = $(wildcard $(demo-dir)/*.c)
OBJS_D = $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(SRCS_D)))

demo:dir libpm libinput-uevent $(OBJS_D)
	$(CC) $(CFLAGS_D) -o $(TARGET_D) $(OBJS_D) $(LIBPATH_D) $(LIBS_D)

$(OBJS_D):$(SRCS_D)
	$(foreach var,$^,\
		$(CC) $(CFLAGS_D) -c $(var) -o $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(var)));\
	)

pm-demo_install:
	cp $(TARGET_D) /usr/bin

pm-demo_uninstall:
	rm -f /usr/bin/$(notdir $(TARGET_D))

pm-demo_clean:
	rm -f $(OBJ_DIR)/*.o
	rm -f $(TARGET_D)
