11CMAKE_COMMON_FLAGS ?= -DUSERVER_OPEN_SOURCE_BUILD=1 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
2-
32CMAKE_DEBUG_FLAGS ?= -DUSERVER_SANITIZE='addr ub'
43CMAKE_RELEASE_FLAGS ?=
54CMAKE_OS_FLAGS ?= -DUSERVER_FEATURE_CRYPTOPP_BLAKE2=0 -DUSERVER_FEATURE_REDIS_HI_MALLOC=1
65NPROCS ?= $(shell nproc)
76CLANG_FORMAT ?= clang-format
7+ DOCKER_COMPOSE ?= docker-compose
88
99ifeq ($(KERNEL ) ,Darwin)
1010CMAKE_COMMON_FLAGS += -DUSERVER_NO_WERROR=1 -DUSERVER_CHECK_PACKAGE_VERSIONS=0 \
@@ -17,124 +17,91 @@ CMAKE_COMMON_FLAGS += -DUSERVER_NO_WERROR=1 -DUSERVER_CHECK_PACKAGE_VERSIONS=0 \
1717endif
1818
1919
20- # NOTE: use Makefile.local for customization
20+ # NOTE: use Makefile.local to override the options defined above.
2121-include Makefile.local
2222
23+ CMAKE_DEBUG_FLAGS += -DCMAKE_BUILD_TYPE=Debug $(CMAKE_COMMON_FLAGS )
24+ CMAKE_RELEASE_FLAGS += -DCMAKE_BUILD_TYPE=Release $(CMAKE_COMMON_FLAGS )
25+
26+ .PHONY : all
2327all : test-debug test-release
2428
25- # Debug cmake configuration
26- build_debug/Makefile :
27- @git submodule update --init
28- @mkdir -p build_debug
29- @cd build_debug && \
30- cmake -DCMAKE_BUILD_TYPE=Debug $(CMAKE_COMMON_FLAGS) $(CMAKE_DEBUG_FLAGS) $(CMAKE_OS_FLAGS) $(CMAKE_OPTIONS) ..
31-
32- # Release cmake configuration
33- build_release/Makefile :
34- @git submodule update --init
35- @mkdir -p build_release
36- @cd build_release && \
37- cmake -DCMAKE_BUILD_TYPE=Release $(CMAKE_COMMON_FLAGS) $(CMAKE_RELEASE_FLAGS) $(CMAKE_OS_FLAGS) $(CMAKE_OPTIONS) ..
38-
39- # build using cmake
40- build-impl-% : build_% /Makefile
41- @cmake --build build_$* -j $(NPROCS ) --target realmedium_sample
42-
43- # test
44- test-impl-% : build-impl-%
45- @cmake --build build_$* -j $(NPROCS ) --target realmedium_sample_unittest
46- @cd build_$* && (( test - t 1 && GTEST_COLOR= 1 PYTEST_ADDOPTS= "-- color= yes" ctest - V) || ctest - V)
47- @pep8 tests
48-
49- # testsuite service runner
50- service-impl-start-% : build-impl-%
51- @cd ./build_$* && $(MAKE ) start-realmedium-sample
52-
53- # clean
54- clean-impl-% :
55- cd build_$* && $(MAKE ) clean
56-
57- # dist-clean
58- .PHONY : dist-clean
59- dist-clean :
60- @rm -rf build_*
61- @rm -f ./configs/static_config.yaml
29+ # Run cmake
30+ .PHONY : cmake-debug
31+ cmake-debug :
32+ cmake -B build_debug $(CMAKE_DEBUG_FLAGS )
6233
63- # format
64- .PHONY : format
65- format :
66- @find src -name ' *pp' -type f | xargs $(CLANG_FORMAT ) -i
67- @find tests -name ' *.py' -type f | xargs autopep8 -i
68-
69- .PHONY : cmake-debug build-debug test-debug clean-debug cmake-release build-release test-release clean-release install install-debug docker-cmake-debug docker-build-debug docker-test-debug docker-clean-debug docker-cmake-release docker-build-release docker-test-release docker-clean-release docker-install docker-install-debug docker-start-service-debug docker-start-service docker-clean-data
70-
71- install-debug : build-debug
72- @cd build_debug && \
73- cmake --install . -v --component realmedium_sample
74-
75- install : build-release
76- @cd build_release && \
77- cmake --install . -v --component realmedium_sample
78-
79- # Hide target, use only in docker environment
80- --debug-start-in-docker : install
81- @ulimit -n 100000
82- @sed -i ' s/config_vars.yaml/config_vars.docker.yaml/g' /home/user/.local/etc/realmedium_sample/static_config.yaml
83- @psql ' postgresql://user:password@service-postgres:5432/realmedium_db-1' -f ./postgresql/schemas/db-1.sql
84- @/home/user/.local/bin/realmedium_sample \
85- --config /home/user/.local/etc/realmedium_sample/static_config.yaml
86-
87- # Hide target, use only in docker environment
88- --debug-start-in-docker-debug : install-debug
89- @sed -i ' s/config_vars.yaml/config_vars.docker.yaml/g' /home/user/.local/etc/realmedium_sample/static_config.yaml
90- @psql ' postgresql://user:password@service-postgres:5432/realmedium_db-1' -f ./postgresql/schemas/db-1.sql
91- @/home/user/.local/bin/realmedium_sample \
92- --config /home/user/.local/etc/realmedium_sample/static_config.yaml
93-
94- # Start targets makefile in docker enviroment
95- docker-impl-% :
96- docker-compose run --rm realmedium-sample make $*
97-
98- # Build and runs service in docker environment
99- docker-start-service-debug :
100- @docker-compose run -p 8080:8080 --rm realmedium-sample make -- --debug-start-in-docker-debug
101-
102- # Build and runs service in docker environment
103- docker-start-service :
104- @docker-compose run -p 8080:8080 --rm realmedium-sample make -- --debug-start-in-docker
34+ .PHONY : cmake-release
35+ cmake-release :
36+ cmake -B build_release $(CMAKE_RELEASE_FLAGS )
10537
106- # Stop docker container and remove PG data
107- docker-clean-data :
108- @docker-compose down -v
109- @rm -rf ./.pgdata
38+ build_debug/CMakeCache.txt : cmake-debug
39+ build_release/CMakeCache.txt : cmake-release
11040
111- # Explicitly specifying the targets to help shell with completions
112- cmake-debug : build_debug/Makefile
113- cmake-release : build_release/Makefile
41+ # Build using cmake
42+ .PHONY : build-debug build-release
43+ build-debug build-release : build-% : build_% /CMakeCache.txt
44+ cmake --build build_$* -j $(NPROCS ) --target realmedium_sample
11445
115- build-debug : build-impl-debug
116- build-release : build-impl-release
46+ # Test
47+ .PHONY : test-debug test-release
48+ test-debug test-release : test-% : build-%
49+ cmake --build build_$* -j $(NPROCS ) --target realmedium_sample_unittest
50+ cd build_$* && (( test - t 1 && GTEST_COLOR= 1 PYTEST_ADDOPTS= "-- color= yes" ctest - V) || ctest - V)
51+ pycodestyle tests
11752
118- test-debug : test-impl-debug
119- test-release : test-impl-release
53+ # Start the service (via testsuite service runner)
54+ .PHONY : service-start-debug service-start-release
55+ service-start-debug service-start-release : service-start-% : build-%
56+ cmake --build build_$* -v --target start-realmedium_sample
12057
121- service-start-debug : service-impl-start-debug
122- service-start-release : service-impl-start-release
58+ # Cleanup data
59+ .PHONY : clean-debug clean-release
60+ clean-debug clean-release : clean-% :
61+ cmake --build build_$* --target clean
12362
124- clean-debug : clean-impl-debug
125- clean-release : clean-impl-release
63+ .PHONY : dist-clean
64+ dist-clean :
65+ rm -rf build_*
66+ rm -rf tests/__pycache__/
67+ rm -rf tests/.pytest_cache/
68+
69+ # Install
70+ .PHONY : install-debug install-release
71+ install-debug install-release : install-% : build-%
72+ cmake --install build_$* -v --component realmedium_sample
73+
74+ .PHONY : install
75+ install : install-release
76+
77+ # Format the sources
78+ .PHONY : format
79+ format :
80+ find src -name ' *pp' -type f | xargs $(CLANG_FORMAT ) -i
81+ find tests -name ' *.py' -type f | xargs autopep8 -i
12682
127- docker-cmake-debug : docker-impl-cmake-debug
128- docker-cmake-release : docker-impl-cmake-release
83+ # Set environment for --in-docker-start
84+ export DB_CONNECTION := postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@service-postgres:5432/${POSTGRES_DB}
12985
130- docker-build-debug : docker-impl-build-debug
131- docker-build-release : docker-impl-build-release
86+ # Internal hidden targets that are used only in docker environment
87+ --in-docker-start-debug --in-docker-start-release : --in-docker-start-% : install-%
88+ psql ${DB_CONNECTION} -f ./postgresql/data/initial_data.sql
89+ /home/user/.local/bin/realmedium_sample \
90+ --config /home/user/.local/etc/realmedium_sample/static_config.yaml \
91+ --config_vars /home/user/.local/etc/realmedium_sample/config_vars.docker.yaml
13292
133- docker-test-debug : docker-impl-test-debug
134- docker-test-release : docker-impl-test-release
93+ # Build and run service in docker environment
94+ .PHONY : docker-start-service-debug docker-start-service-release
95+ docker-start-service-debug docker-start-service-release : docker-start-service-% :
96+ $(DOCKER_COMPOSE ) run -p 8080:8080 --rm realmedium-sample make -- --in-docker-start-$*
13597
136- docker-clean-debug : docker-impl-clean-debug
137- docker-clean-release : docker-impl-clean-release
98+ # Start targets makefile in docker environment
99+ .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
100+ 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-% :
101+ $(DOCKER_COMPOSE ) run --rm realmedium-sample make $*
138102
139- docker-install : docker-impl-install
140- docker-install-debug : docker-impl-install-debug
103+ # Stop docker container and remove PG data
104+ .PHONY : docker-clean-data
105+ docker-clean-data :
106+ $(DOCKER_COMPOSE ) down -v
107+ rm -rf ./.pgdata
0 commit comments