
# Copyright 2015-2017, Thomas Maier-Komor
# LICENSE: GPLv3, see file LICENSE for details
#

PREFIX		= /var/tmp/jwm
MKDIR		= /usr/bin/mkdir
RMDIR		= /usr/bin/rmdir
RM		= /usr/bin/rm
SED		= /usr/bin/sed
DIFF		= /usr/bin/diff
INSTALL		= /usr/bin/install -c

HGID		=$(shell if [ -d .hg ]; then hg id --id|sed 's/^/\/hg:/'; fi)
LOGVERSION	=$(shell head -1 ChangeLog|sed 's/Version //;s/://')
VERSION		=V$(LOGVERSION)$(HGID)

PROTOC		= 
PROTOBUF_LIBS	= 
PROTOBUF_CFLAGS	= 
PBSRC		= 
PBOBJ		= $(PBSRC:%.proto=build/%.pb.o)
PBFILES		= $(PBSRC:%.proto=%.pb.cc) $(PBSRC:%.proto=%.pb.h)
WFCSRC		= hostscope.wfc

CXX		= g++

DEFS		= -DWFC -D__STDC_FORMAT_MACROS -DVERSION=\"$(VERSION)\"
CXXFLAGS	= -g -Wall $(DEFS) $(PROTOBUF_CFLAGS)
LDFLAGS		=

COMMONSRC	= common.cc log.cc $(PBSRC:%.proto=%.pb.cc) $(WFCSRC:%.wfc=%_wfc.cc)
COMMONOBJ	= $(COMMONSRC:%.cc=build/%.o)

CCXXSRC		= hostscope.cc
CCXXOBJ		= $(CCXXSRC:%.cc=build/%.o)

DCXXSRC		= hostscoped.cc linuxcpu.cc linuxdisk.cc linuxprocs.cc \
		  linuxmem.cc linuxnets.cc linuxpower.cc
DCXXOBJ		= $(DCXXSRC:%.cc=build/%.o)

DEPS		= $(DCXXSRC:%.cc=.%.d) $(CCXXSRC:%.cc=.%.d) $(COMMONSRC:%.cc=.%.d)

ALLSRCS		= $(PBSRC) $(CSRC) $(COMMONSRC) $(CCXXSRC) $(DCXXSRC)

DLIBS		= -lrt $(PROTOBUF_LIBS)
CLIBS		= -lncurses -lrt $(PROTOBUF_LIBS)


all: release

release: CXXFLAGS=-g -O2 -Wall $(DEFS)
release: build hostscoped hostscope

debug: CXXFLAGS=-g -DDEBUG -Wall $(DEFS)
debug: build hostscoped hostscope

profile: CXXFLAGS	=-g -O2 -Wall -DPROFILE -I../librta $(DEFS)
profile: LIBS		= -L../librta -Xlinker -R../librta -lrta
profile: build hostscoped hostscope

settings:
	@echo "VERSION=$(VERSION)"
	@echo "CXXFLAGS=$(CXXFLAGS)"
	@echo "PBFILES=$(PBFILES)"
	@echo $(DEPS)

%.pb.h %.pb.cc: %.proto
	$(PROTOC) --cpp_out=. $<

md5: $(CCXXSRC) $(DCXXSRC) $(COMMONSRC) $(PBFILES) $(WFCSRC)
	md5sum $^

hostscope_wfc.cc: hostscope.wfc
	../wfc/bin/wfc -o $(@:.cc=) $<

clean:
	$(RM) $(DCXXOBJ) $(CCXXOBJ) $(DEPS) $(COMMONOBJ) $(PBFILES)
	$(RMDIR) build

build: $(PBSRC)
	-$(MKDIR) build

install: hostscope hostscoped
	$(MKDIR) -p $(PREFIX)/bin $(PREFIX)/sbin
	$(INSTALL) -v -s -m 0755 hostscope $(PREFIX)/bin
	$(INSTALL) -v -s -m 04755 -o root hostscoped $(PREFIX)/sbin || $(INSTALL) -v -s -m 0755 hostscoped $(PREFIX)/sbin

hostscope: $(CCXXOBJ) $(COMMONOBJ)
	$(CXX) $(LDFLAGS) $(CXXFLAGS) $^ -o $@ $(CLIBS) $(LIBS)

hostscoped: $(DCXXOBJ) $(COMMONOBJ)
	$(CXX) $(LDFLAGS) $(CXXFLAGS) $^ -o $@ $(DLIBS) $(LIBS)

build/%.d: %.c
	$(CC) -MM $(CFLAGS) $< > $@

.%.d: %.cc
	$(CXX) -MM $(CXXFLAGS) $< > $@

build/%.o: %.cc
	$(CXX) $(CXXFLAGS) -c $< -o $@

-include $(DEPS)
