1- CMAKE_COMMON_FLAGS ?= -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
2- CMAKE_DEBUG_FLAGS ?= --preset debug
3- CMAKE_RELEASE_FLAGS ?= --preset release
1+ PROJECT_NAME = service_template
42NPROCS ?= $(shell nproc)
53CLANG_FORMAT ?= clang-format
64DOCKER_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 )
5+ PRESETS ?= debug release debug-custom release-custom
136
147.PHONY : all
158all : test-debug test-release
169
1710# 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 )
11+ .PHONY : $(addprefix cmake-, $(PRESETS ) )
12+ $(addprefix cmake-, $(PRESETS ) ) : cmake-% :
13+ cmake --preset $*
2514
26- build_debug/CMakeCache.txt : cmake-debug
27- build_release/CMakeCache.txt : cmake-release
15+ $(addsuffix /CMakeCache.txt, $(addprefix build-, $(PRESETS ) ) ) : build-% /CMakeCache.txt: cmake-%
2816
2917# 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 pg_service_template
18+ .PHONY : $( addprefix build-, $( PRESETS ) )
19+ $( addprefix build-, $( PRESETS ) ) : build-% : build- % /CMakeCache.txt
20+ cmake --build build- $* -j $(NPROCS ) --target $( PROJECT_NAME )
3321
3422# Test
35- .PHONY : test-debug test-release
36- test-debug test-release : test-% : build-%
37- cmake --build build_$* -j $(NPROCS ) --target pg_service_template_unittest
38- cmake --build build_$* -j $(NPROCS ) --target pg_service_template_benchmark
39- cd build_$* && (( test - t 1 && GTEST_COLOR= 1 PYTEST_ADDOPTS= "-- color= yes" ctest - V) || ctest - V)
23+ .PHONY : $(addprefix test-, $(PRESETS ) )
24+ $(addprefix test-, $(PRESETS ) ) : test-% : build-% /CMakeCache.txt
25+ cmake --build build-$* -j $(NPROCS )
26+ cd build-$* && (( test - t 1 && GTEST_COLOR= 1 PYTEST_ADDOPTS= "-- color= yes" ctest - V) || ctest - V)
4027 pycodestyle tests
4128
4229# Start the service (via testsuite service runner)
43- .PHONY : start-debug start-release
44- start-debug start-release : start-% : build-%
45- cmake --build build_$* -v --target start-pg_service_template
46-
47- .PHONY : service-start-debug service-start-release
48- service-start-debug service-start-release : service-start-% : start-%
30+ .PHONY : $(addprefix start-, $(PRESETS ) )
31+ $(addprefix start-, $(PRESETS ) ) : start-% :
32+ cmake --build build-$* -v --target start-$(PROJECT_NAME )
4933
5034# Cleanup data
51- .PHONY : clean-debug clean-release
52- clean-debug clean-release : clean-% :
53- cmake --build build_ $* --target clean
35+ .PHONY : $( addprefix clean-, $( PRESETS ) )
36+ $( addprefix clean-, $( PRESETS ) ) : clean-% :
37+ cmake --build build- $* --target clean
5438
5539.PHONY : dist-clean
5640dist-clean :
57- rm -rf build_ *
41+ rm -rf build *
5842 rm -rf tests/__pycache__/
5943 rm -rf tests/.pytest_cache/
44+ rm -rf .ccache
45+ rm -rf .vscode/.cache
46+ rm -rf .vscode/compile_commands.json
6047
6148# Install
62- .PHONY : install-debug install-release
63- install-debug install-release : install-% : build-%
64- cmake --install build_ $* -v --component pg_service_template
49+ .PHONY : $( addprefix install-, $( PRESETS ) )
50+ $( addprefix install-, $( PRESETS ) ) : install-% : build-%
51+ cmake --install build- $* -v --component $( PROJECT_NAME )
6552
6653.PHONY : install
6754install : install-release
@@ -76,24 +63,22 @@ format:
7663export DB_CONNECTION := postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@service-postgres:5432/${POSTGRES_DB}
7764
7865# Internal hidden targets that are used only in docker environment
79- --in-docker-start-debug --in-docker-start-release : --in-docker-start-% : install-%
66+ .PHONY : $(addprefix --in-docker-start-, $(PRESETS ) )
67+ $(addprefix --in-docker-start-, $(PRESETS ) ) : --in-docker-start-% : install-%
8068 psql ${DB_CONNECTION} -f ./postgresql/data/initial_data.sql
81- /home/user/.local/bin/pg_service_template \
82- --config /home/user/.local/etc/pg_service_template /static_config.yaml \
83- --config_vars /home/user/.local/etc/pg_service_template /config_vars.docker.yaml
69+ /home/user/.local/bin/$( PROJECT_NAME ) \
70+ --config /home/user/.local/etc/$( PROJECT_NAME ) /static_config.yaml \
71+ --config_vars /home/user/.local/etc/$( PROJECT_NAME ) /config_vars.docker.yaml
8472
8573# Build and run service in docker environment
86- .PHONY : docker-start-debug docker-start-release
74+ .PHONY : $( addprefix docker-start-, $( PRESETS ) )
8775docker-start-debug docker-start-release : docker-start-% :
88- $(DOCKER_COMPOSE ) run -p 8080:8080 --rm pg_service_template-container make -- --in-docker-start-$*
89-
90- .PHONY : docker-start-service-debug docker-start-service-release
91- docker-start-service-debug docker-start-service-release : docker-start-service-% : docker-start-%
76+ $(DOCKER_COMPOSE ) run -p 8080:8080 --rm service_template-container make -- --in-docker-start-$*
9277
9378# Start targets makefile in docker environment
94- .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
95- 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-% :
96- $(DOCKER_COMPOSE ) run --rm pg_service_template -container make $*
79+ .PHONY : $( addprefix docker-cmake-, $( PRESETS ) ) $( addprefix docker-build-, $( PRESETS ) ) $( addprefix docker-test-, $( PRESETS ) ) $( addprefix docker-clean-, $( PRESETS ) ) $( addprefix docker-install-, $( PRESETS ) )
80+ $( addprefix docker-cmake-, $( PRESETS ) ) $( addprefix docker-build-, $( PRESETS ) ) $( addprefix docker-test-, $( PRESETS ) ) $( addprefix docker-clean-, $( PRESETS ) ) $( addprefix docker-install-, $( PRESETS ) ) : docker-% :
81+ $(DOCKER_COMPOSE ) run --rm $( PROJECT_NAME ) -container make $*
9782
9883# Stop docker container and remove PG data
9984.PHONY : docker-clean-data
0 commit comments