APPNAME = demo_libyclc
LIBNAME = libyclc
MODNAME = yclcmodule
EXTLIB = 
CCFLAGS4APP = -lrt -ldl -rdynamic -pthread -Wall -L ../target/ -lyclc $(EXTLIB)
CCFLAGS4LIB = -lrt -ldl -rdynamic -pthread -Wall $(EXTLIB)
#EXTRA_CFLAGS for kernel module compile
EXTRA_CFLAGS += -DKERNEL -Wall
#CC = gcc

RESULT_NOTE = "compiling done, result in directory：target."
TARGET_PATH = ./target
USRC_PATH = ./src
KSRC_PATH = ./src/kernel
#KERNEL_PATH = ./res/kernel_headfiles

SRC_PATH := $(USRC_PATH)/base/*.c \
            $(USRC_PATH)/*.c

LIB_SRC_PATH := $(USRC_PATH)/base/*.c

ifndef KERNEL_PATH
KERNEL_PATH = /lib/modules/$(shell uname -r)/build
endif
obj-m := $(MODNAME).o
$(MODNAME)-objs := $(KSRC_PATH)/src/yc_module.o \
                   $(KSRC_PATH)/src/yc_cioctl.o
#=======================配置结束=========================

default:
	@echo "Uage:"
	@echo "      make all: compile all(app_demo & lib & module)"
	@echo "      make app: compile app_demo"
	@echo "      make lib: compile lib"
	@echo "      make mod: compile kernel module"
	@echo "      make clean: clean all objects"
	@echo "      make cleanall: clean all objects and target"
all:
	@make mod
	@make lib
	@make app
app:
#	@$(CC) -c $(SRC_PATH)
#	@$(CC) -o $(APPNAME) *.o $(CCFLAGS4APP)
	@$(CC) -o $(APPNAME) $(SRC_PATH) $(CCFLAGS4APP)
	@mv $(APPNAME) $(TARGET_PATH)
	@echo $(RESULT_NOTE)
lib:
	@$(CC) -c $(LIB_SRC_PATH)
#	@$(CC) -shared -fPCI -o $(LIBNAME).so *.o $(CCFLAGS4LIB)
#	@ar -rS $(LIBNAME).a *.o
	@$(AR) -r $(LIBNAME).a *.o
#	@ranlib $(LIBNAME).a#在某些系统中还要为静态库生成一个内容表
#	@mv $(LIBNAME).so $(TARGET_PATH)
#	@mv $(LIBNAME).a $(TARGET_PATH)
	@echo $(RESULT_NOTE)
mod:
	@$(MAKE) -C $(KERNEL_PATH) M=$(PWD) modules
	@mv $(MODNAME).ko $(TARGET_PATH)
	@echo $(RESULT_NOTE)
clean:
	@rm *.o *.mod.* *.ko .$(MODNAME).* .tmp* Module.* modules.* $(KSRC_PATH)/src/*.o $(KSRC_PATH)/src/.*.o.cmd -rf
	@echo "clean done."
cleanall:
	@rm $(TARGET_PATH)/$(APPNAME) $(TARGET_PATH)/$(LIBNAME).so $(TARGET_PATH)/$(LIBNAME).a $(TARGET_PATH)/$(MODNAME).ko $(TARGET_PATH)/* -rf
	@make clean