mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-19 13:07:55 +00:00
127 lines
3.9 KiB
Makefile
127 lines
3.9 KiB
Makefile
|
# Customisable build settings
|
||
|
|
||
|
CXX ?= clang++
|
||
|
CXXFLAGS ?=
|
||
|
INCLUDE_PYTHON_DOCS ?= no
|
||
|
DEBUG ?= no
|
||
|
PYTHON ?= python3
|
||
|
|
||
|
# Required build settings
|
||
|
|
||
|
ifneq (no,$(DEBUG))
|
||
|
CXXFLAGS += -ggdb
|
||
|
else
|
||
|
CXXFLAGS += -O3 # -flto
|
||
|
endif
|
||
|
|
||
|
CXXFLAGS += -std=c++11 -I'build/gen' -Wall -pthread -fPIC
|
||
|
|
||
|
prefix ?= /usr
|
||
|
DESTDIR ?=
|
||
|
|
||
|
.DELETE_ON_ERROR:
|
||
|
SHELL := /bin/bash
|
||
|
|
||
|
modules := connection datum json term cursor types utils
|
||
|
headers := utils error exceptions types datum connection cursor term
|
||
|
|
||
|
o_files := $(patsubst %, build/obj/%.o, $(modules))
|
||
|
d_files := $(patsubst %, build/dep/%.d, $(modules))
|
||
|
|
||
|
skip_tests := regression/1133 regression/767 regression/1005 # python-only
|
||
|
skip_tests += arity # arity errors are compile-time
|
||
|
skip_tests += geo # geo types not implemented yet
|
||
|
skip_tests += limits # possibly broken tests: https://github.com/rethinkdb/rethinkdb/issues/5940
|
||
|
|
||
|
upstream_tests := \
|
||
|
$(filter-out %.rb.%, \
|
||
|
$(filter-out $(patsubst %,test/upstream/%%, $(skip_tests)), \
|
||
|
$(filter test/upstream/$(test_filter)%, \
|
||
|
$(shell find test/upstream -name '*.yaml' | egrep -v '.(rb|js).yaml$$'))))
|
||
|
upstream_tests_cc := $(patsubst %.yaml, build/tests/%.cc, $(upstream_tests))
|
||
|
upstream_tests_o := $(patsubst %.cc, %.o, $(upstream_tests_cc))
|
||
|
|
||
|
.PRECIOUS: $(upstream_tests_cc) $(upstream_tests_o)
|
||
|
|
||
|
default: build/librethinkdb++.a build/include/rethinkdb.h build/librethinkdb++.so
|
||
|
|
||
|
all: default build/test
|
||
|
|
||
|
build/librethinkdb++.a: $(o_files)
|
||
|
ar rcs $@ $^
|
||
|
|
||
|
build/librethinkdb++.so: $(o_files)
|
||
|
$(CXX) -o $@ $(CXXFLAGS) -shared $^
|
||
|
|
||
|
build/obj/%.o: src/%.cc build/gen/protocol_defs.h
|
||
|
@mkdir -p $(dir $@)
|
||
|
@mkdir -p $(dir build/dep/$*.d)
|
||
|
$(CXX) -o $@ $(CXXFLAGS) -c $< -MP -MQ $@ -MD -MF build/dep/$*.d
|
||
|
|
||
|
build/gen/protocol_defs.h: reql/ql2.proto reql/gen.py | build/gen/.
|
||
|
$(PYTHON) reql/gen.py $< > $@
|
||
|
|
||
|
clean:
|
||
|
rm -rf build
|
||
|
|
||
|
ifneq (no,$(INCLUDE_PYTHON_DOCS))
|
||
|
build/include/rethinkdb.h: build/rethinkdb.nodocs.h reql/add_docs.py reql/python_docs.txt | build/include/.
|
||
|
$(PYTHON) reql/add_docs.py reql/python_docs.txt < $< > $@
|
||
|
else
|
||
|
build/include/rethinkdb.h: build/rethinkdb.nodocs.h | build/include/.
|
||
|
cp $< $@
|
||
|
endif
|
||
|
|
||
|
build/rethinkdb.nodocs.h: build/gen/protocol_defs.h $(patsubst %, src/%.h, $(headers))
|
||
|
( echo "// Auto-generated file, built from $^"; \
|
||
|
echo '#pragma once'; \
|
||
|
cat $^ | \
|
||
|
grep -v '^#pragma once' | \
|
||
|
grep -v '^#include "'; \
|
||
|
) > $@
|
||
|
|
||
|
build/tests/%.cc: %.yaml test/yaml_to_cxx.py
|
||
|
@mkdir -p $(dir $@)
|
||
|
$(PYTHON) test/yaml_to_cxx.py $< > $@
|
||
|
|
||
|
build/tests/upstream_tests.cc: $(upstream_tests) test/gen_index_cxx.py FORCE | build/tests/.
|
||
|
@echo '$(PYTHON) test/gen_index_cxx.py $(wordlist 1,5,$(upstream_tests)) ... > $@'
|
||
|
@$(PYTHON) test/gen_index_cxx.py $(upstream_tests) > $@
|
||
|
|
||
|
build/tests/%.o: build/tests/%.cc build/include/rethinkdb.h test/testlib.h | build/tests/.
|
||
|
$(CXX) -o $@ $(CXXFLAGS) -isystem build/include -I test -c $< -Wno-unused-variable
|
||
|
|
||
|
build/tests/%.o: test/%.cc test/testlib.h build/include/rethinkdb.h | build/tests/.
|
||
|
$(CXX) -o $@ $(CXXFLAGS) -isystem build/include -I test -c $<
|
||
|
|
||
|
build/test: build/tests/testlib.o build/tests/test.o build/tests/upstream_tests.o $(upstream_tests_o) build/librethinkdb++.a
|
||
|
@echo $(CXX) -o $@ $(CXXFLAGS) $(wordlist 1,5,$^) ...
|
||
|
@$(CXX) -o $@ $(CXXFLAGS) build/librethinkdb++.a $^
|
||
|
|
||
|
.PHONY: test
|
||
|
test: build/test
|
||
|
build/test
|
||
|
|
||
|
build/bench: build/tests/bench.o build/librethinkdb++.a
|
||
|
@$(CXX) -o $@ $(CXXFLAGS) -isystem build/include build/librethinkdb++.a $^
|
||
|
|
||
|
.PHONY: bench
|
||
|
bench: build/bench
|
||
|
build/bench
|
||
|
|
||
|
.PHONY: install
|
||
|
install: build/librethinkdb++.a build/include/rethinkdb.h build/librethinkdb++.so
|
||
|
install -m755 -d $(DESTDIR)$(prefix)/lib
|
||
|
install -m755 -d $(DESTDIR)$(prefix)/include
|
||
|
install -m644 build/librethinkdb++.a $(DESTDIR)$(prefix)/lib/librethinkdb++.a
|
||
|
install -m644 build/librethinkdb++.so $(DESTDIR)$(prefix)/lib/librethinkdb++.so
|
||
|
install -m644 build/include/rethinkdb.h $(DESTDIR)$(prefix)/include/rethinkdb.h
|
||
|
|
||
|
%/.:
|
||
|
mkdir -p $*
|
||
|
|
||
|
.PHONY: FORCE
|
||
|
FORCE:
|
||
|
|
||
|
-include $(d_files)
|