|
| 1 | +CMAKE_COMMON_FLAGS ?= -DCMAKE_EXPORT_COMPILE_COMMANDS=ON |
| 2 | +CMAKE_DEBUG_FLAGS ?= -DUSERVER_SANITIZE='addr ub' |
| 3 | +CMAKE_RELEASE_FLAGS ?= |
| 4 | +NPROCS ?= $(shell nproc) |
| 5 | +CLANG_FORMAT ?= clang-format |
| 6 | +DOCKER_COMPOSE ?= docker-compose |
| 7 | + |
| 8 | +# NOTE: use Makefile.local to override the options defined above. |
| 9 | +-include Makefile.local |
| 10 | + |
| 11 | +CMAKE_DEBUG_FLAGS += -DCMAKE_BUILD_TYPE=Debug $(CMAKE_COMMON_FLAGS) |
| 12 | +CMAKE_RELEASE_FLAGS += -DCMAKE_BUILD_TYPE=Release $(CMAKE_COMMON_FLAGS) |
| 13 | + |
| 14 | +.PHONY: all |
| 15 | +all: test-debug test-release |
| 16 | + |
| 17 | +# Run cmake |
| 18 | +.PHONY: cmake-debug |
| 19 | +cmake-debug: |
| 20 | + cmake -B build_debug $(CMAKE_DEBUG_FLAGS) |
| 21 | + |
| 22 | +.PHONY: cmake-release |
| 23 | +cmake-release: |
| 24 | + cmake -B build_release $(CMAKE_RELEASE_FLAGS) |
| 25 | + |
| 26 | +build_debug/CMakeCache.txt: cmake-debug |
| 27 | +build_release/CMakeCache.txt: cmake-release |
| 28 | + |
| 29 | +# Build using cmake |
| 30 | +.PHONY: build-debug build-release |
| 31 | +build-debug build-release: build-%: build_%/CMakeCache.txt |
| 32 | + cmake --build build_$* -j $(NPROCS) --target service_template |
| 33 | + |
| 34 | +# Test |
| 35 | +.PHONY: test-debug test-release |
| 36 | +test-debug test-release: test-%: build-% |
| 37 | + cmake --build build_$* -j $(NPROCS) --target service_template_unittest |
| 38 | + cmake --build build_$* -j $(NPROCS) --target service_template_benchmark |
| 39 | + cd build_$* && ((test -t 1 && GTEST_COLOR=1 PYTEST_ADDOPTS="--color=yes" ctest -V) || ctest -V) |
| 40 | + pycodestyle tests |
| 41 | + |
| 42 | +# Start the service (via testsuite service runner) |
| 43 | +.PHONY: start-debug start-release |
| 44 | +start-debug start-release: start-%: |
| 45 | + cmake --build build_$* -v --target=start-service_template |
| 46 | + |
| 47 | +.PHONY: service-start-debug service-start-release |
| 48 | +service-start-debug service-start-release: service-start-%: start-% |
| 49 | + |
| 50 | +# Cleanup data |
| 51 | +.PHONY: clean-debug clean-release |
| 52 | +clean-debug clean-release: clean-%: |
| 53 | + cmake --build build_$* --target clean |
| 54 | + |
| 55 | +.PHONY: dist-clean |
| 56 | +dist-clean: |
| 57 | + rm -rf build_* |
| 58 | + rm -rf tests/__pycache__/ |
| 59 | + rm -rf tests/.pytest_cache/ |
| 60 | + |
| 61 | +# Install |
| 62 | +.PHONY: install-debug install-release |
| 63 | +install-debug install-release: install-%: build-% |
| 64 | + cmake --install build_$* -v --component service_template |
| 65 | + |
| 66 | +.PHONY: install |
| 67 | +install: install-release |
| 68 | + |
| 69 | +# Format the sources |
| 70 | +.PHONY: format |
| 71 | +format: |
| 72 | + find src -name '*pp' -type f | xargs $(CLANG_FORMAT) -i |
| 73 | + find tests -name '*.py' -type f | xargs autopep8 -i |
| 74 | + |
| 75 | +# Internal hidden targets that are used only in docker environment |
| 76 | +.PHONY: --in-docker-start-debug --in-docker-start-release |
| 77 | +--in-docker-start-debug --in-docker-start-release: --in-docker-start-%: install-% |
| 78 | + /home/user/.local/bin/service_template \ |
| 79 | + --config /home/user/.local/etc/service_template/static_config.yaml \ |
| 80 | + --config_vars /home/user/.local/etc/service_template/config_vars.yaml |
| 81 | + |
| 82 | +# Build and run service in docker environment |
| 83 | +.PHONY: docker-start-debug docker-start-release |
| 84 | +docker-start-debug docker-start-release: docker-start-%: |
| 85 | + $(DOCKER_COMPOSE) run -p 8080:8080 --rm service_template-container make -- --in-docker-start-$* |
| 86 | + |
| 87 | +.PHONY: docker-start-service-debug docker-start-service-release |
| 88 | +docker-start-service-debug docker-start-service-release: docker-start-service-%: docker-start-% |
| 89 | + |
| 90 | +# Start specific target in docker environment |
| 91 | +.PHONY: docker-cmake-debug docker-build-debug docker-test-debug docker-clean-debug docker-install-debug docker-cmake-release docker-build-release docker-test-release docker-clean-release docker-install-release |
| 92 | +docker-cmake-debug docker-build-debug docker-test-debug docker-clean-debug docker-install-debug docker-cmake-release docker-build-release docker-test-release docker-clean-release docker-install-release: docker-%: |
| 93 | + $(DOCKER_COMPOSE) run --rm service_template-container make $* |
| 94 | + |
| 95 | +# Stop docker container and cleanup data |
| 96 | +.PHONY: docker-clean-data |
| 97 | +docker-clean-data: |
| 98 | + $(DOCKER_COMPOSE) down -v |
0 commit comments