116 lines
3.1 KiB
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)
|