libinvdb/Makefile

116 lines
3.1 KiB
Makefile

INC = -Ibuild -Isource/include -I/usr/include/zdb -Igoogletest/googletest/include
LIB = -Lbuild -Lgoogletest/googletest
UNITTESTLIBS = -lzdb -lpthread -lgtest_main -lgtest
SOLIBS = -lzdb -lpthread
CXXSOURCE = $(wildcard source/*.cc)
CSOURCE = $(wildcard source/*.c)
HEADERS = $(wildcard source/include/*.h source/include/*.hh)
SOURCE = $(CSOURCE) $(CXXSOURCE)
COBJ = $(CSOURCE:source/%.c=build/%.o)
CXXOBJ = $(CXXSOURCE:source/%.cc=build/%.o)
OBJ = $(COBJ) $(CXXOBJ)
UNITTEST_CXXSOURCE = $(wildcard unittest/*.cc)
UNITTEST_CXXOBJ = $(UNITTEST_CXXSOURCE:unittest/%.cc=build/unittest/%.o)
UNITTEST_TARGETS = $(UNITTEST_CXXOBJ:%.o=%)
UNITTEST_LOGS = $(UNITTEST_TARGETS:%=%.xml)
PRECOMPILED_HEADERS = $(HEADERS:source/include/%.hh=build/%.hh.gch)
TESTDBS = $(UNITTEST_TARGETS:build/unittest/%=build/unittest/%.db)
LIBTARGETS = build/libinvdb.so
CXXDEPEND = $(CXXSOURCE:source/%.cc=build/%.cc.d) \
$(UNITTEST_CXXSOURCE:unittest/%.cc=build/unittest/%.cc.d)
HEADERDEPEND = $(HEADERS:source/include/%.hh=build/%.hh.d)
DEPEND = $(CXXDEPEND) $(HEADERDEPEND)
TARGETS = $(LIBTARGETS) $(UNITTEST_TARGETS)
UNITTEST_LD_LIBRARY_PATH = build
.PRECIOUS: $(DEPEND) $(OBJ) $(UNITTEST_CXXOBJ) $(UNITTEST_LOGS) \
$(PRECOMPILED_HEADERS)
.SECONDARY: $(DEPEND) $(OBJ) $(UNITTEST_CXXOBJ) $(UNITTEST_LOGS) \
$(PRECOMPILED_HEADERS)
CC := gcc
CXX := g++
LD := g++
CXXFLAGS := -std=c++14 -g -fPIC -Wno-virtual-move-assign -Wno-format-security
SOFLAGS := -shared
.PHONY: all depend clean mrproper googletest submodules test \
clean_testresults directories
all: directories depend $(TARGETS) test
depend: $(DEPEND)
clean: clean_testresults
rm -f build/*.o
rm -f build/unittest/*.o
rm -f $(TARGETS)
rm -f $(UNITTEST_LOGS)
rm -f build/unittest/*.db
rm -f $(PRECOMPILED_HEADERS)
clean_testresults:
rm -f $(UNITTEST_TARGETS)
mrproper: clean
rm -f build/*.d
rm -f build/unittest/*.d
cd googletest && make clean
cd googletest/googletest && make clean
googletest:
git submodule init
git submodule update googletest
cd googletest && cmake . && make
cd googletest/googletest && cmake . && make
submodules: googletest
directories:
mkdir -p build/unittest
mkdir -p googletest
test: $(UNITTEST_LOGS)
build/unittest/%.db: data/clean.db
cp $< $@
build/unittest/%.xml: build/unittest/% build/unittest/%.db
LD_LIBRARY_PATH=$(UNITTEST_LD_LIBRARY_PATH) $< --gtest_output=\"xml:$@\"\
\sqlite://$(CURDIR)/$<.db 2>&1
build/%.cc.d: source/%.cc
$(CXX) -MM $< -o $@ $(INC) $(CXXFLAGS)
build/%.o: source/%.cc build/%.cc.d $(PRECOMPILED_HEADERS)
$(CXX) -c $< -o $@ $(INC) $(CXXFLAGS)
build/%.so: $(OBJ)
$(LD) $(SOFLAGS) $(OBJ) $(SOLIBS) -o $@
build/unittest/%.cc.d: unittest/%.cc
$(CXX) -MM $< -o $@ $(INC) $(CXXFLAGS)
build/unittest/%.o: unittest/%.cc build/unittest/*.cc.d $(PRECOMPILED_HEADERS)
$(CXX) $(INC) -c $(CXXFLAGS) $< -o $@
build/unittest/%: build/unittest/%.o $(LIBTARGETS)
$(LD) $(LIB) $< $(LIBTARGETS:build/lib%.so=-l%) \
$(UNITTESTLIBS) -o $@
build/%.hh.d: source/include/%.hh
$(CXX) $(INC) -MM $(CXXFLAGS) $< -o $@
build/%.hh.gch: source/include/%.hh build/%.hh.d
$(CXX) $(INC) -c $(CXXFLAGS) $< -o $@
include $(wildcard build/*.d)
include $(wildcard build/unittest/*.d)