CURDIR=           $(shell pwd)
PMCNVMSRCDIR=       $(CURDIR)/src
SHELLSRCDIR=      $(CURDIR)/SHELL
TRANSDIR=         $(CURDIR)/TRANS

NVRAMAPISTUBDIR=  $(CURDIR)/NVRAM_API_STUBS
NVRAMAPILIB=      pmcnvram
NVRAMAPILIBDIR=   $(CURDIR)/../package/api/
NVRAMAPIDIR=      $(CURDIR)/../package/api

OBJDIR=           $(CURDIR)/obj


CC=               cc
AR=               ar
CFLAGS=           -Werror -Wall -g -DPLATFORM_HOST

UNAME_S = $(shell uname -s)
ifeq ($(UNAME_S),FreeBSD)
        CFLAGS += -D OS_FREE_BSD
else
		CFLAGS += -D OS_LINUX
endif
INC=              -I. -I$(NVRAMAPIDIR)/include -I$(TRANSDIR) -I$(PMCNVMSRCDIR) -I$(SHELLSRCDIR)

PMCNVMSRC=          $(addprefix $(PMCNVMSRCDIR)/,PMCNVM_cmd.c PMCNVM_main.c PMCNVM_io.c)
PMCNVMOBJS=         $(addprefix $(OBJDIR)/,PMCNVM_cmd.o PMCNVM_main.o PMCNVM_io.o)
$(warning $(PMCNVMSRC))

TRANSSRC=         $(wildcard $(TRANSDIR)/*.c)
TRANSOBJS=        $(addprefix $(OBJDIR)/,NVRAM_cmd.o NVRAM_get_info.o NVRAM_cmd_enum.o)
$(warning $(TRANSSRC))

SHELLSRC=         $(addprefix $(SHELLSRCDIR)/,GENERAL.c SHELL_args.c SHELL_core.c)
SHELLOBJS=        $(addprefix $(OBJDIR)/,GENERAL.o SHELL_args.o SHELL_core.o)

OBJS=             $(PMCNVMOBJS) $(TRANSOBJS) $(SHELLOBJS)


NVRAMAPISTUBSRC=  $(addprefix $(NVRAMAPISTUBDIR)/, pmc_nvram_api_stubs.c)
NVRAMAPISTUBOBJS= $(addprefix $(NVRAMAPISTUBDIR)/, pmc_nvram_api_stubs.o)
NVRAMAPISTUBLIB=  nvramapi_stubs


$(OBJDIR)/%.o : $(PMCNVMSRCDIR)/%.c
		(cd $(OBJDIR); $(CC) $(CFLAGS) $(INC) -c $<)
$(OBJDIR)/%.o : $(SHELLSRCDIR)/%.*
		(cd $(OBJDIR); $(CC) $(CFLAGS) $(INC) -c $<)
$(OBJDIR)/%.o : $(TRANSDIR)/%.c
		echo CC $<
		(cd $(OBJDIR); $(CC) $(CFLAGS) $(INC) -c $<)


pmcnvm:   $(PMCNVMOBJS)  $(PMCNVMSRC)
shell:  $(SHELLOBJS) $(SHELLSRC)
trans:  $(TRANSOBJS) $(TRANSSRC)

$(PMCNVMOBJS): | $(OBJDIR)
$(SHELLOBJS): | $(OBJDIR)
$(TRANSOBJS): | $(OBJDIR)

$(OBJDIR):
		mkdir $(OBJDIR)
     
$(NVRAMAPISTUBDIR)/%.o : $(NVRAMAPISTUBDIR)/%.c
		(cd $(NVRAMAPISTUBDIR); $(CC) $(CFLAGS) -c $(INC) $<)
		
nvramstublib: $(NVRAMAPISTUBOBJS) $(NVRAMAPISTUBSRC)
		$(AR) rcs lib$(NVRAMAPISTUBLIB).a $(NVRAMAPISTUBOBJS)

pmcnvm_stub: nvramstublib pmcnvm shell trans

nvramapilib:
		ar -x $(NVRAMAPILIBDIR)/lib$(NVRAMAPILIB).a
		
pmcnvm_board: nvramapilib pmcnvm shell trans
		$(CC) $(OBJS) -pthread -L. *.o -o ./pmcnvm

		
#all: nvramlib nvramstublib client

client:
		$(CC) $(CFLAGS) -pthread $(PMCNVMSRCDIR)/PMCNVM_client.c -o ./pmcnvmClient
		
clean :
		rm -f $(OBJDIR)/*.o
		rm -f $(NVRAMAPISTUBDIR)/*.o
		rm -f ./pmcnvm
		rm -f ./*.a
		rm -f ./*.o
		rm -f ./pmcnvmClient

help:
		@echo "help - this help"
		@echo "pmcnvm_stub - build PMCNVM with stub NVRAM API functions"
		@echo "pmcnvm_board - build PMCNVM with real NVRAM API for working with board"
		@echo "client - build PMCNVM client"










