Skip to content

Commit 4f420fd

Browse files
authored
feat build: allow debug-custom and release-custom cmake presets (#87)
Also: 1. changes the naming schema of build dirs from `build_PRESET` to `build-PRESET` 2. drops the ability to customize build options using `Makefile.local`
1 parent c1e38ee commit 4f420fd

File tree

3 files changed

+30
-66
lines changed

3 files changed

+30
-66
lines changed

.vscode/cmake-variants.yaml

Lines changed: 0 additions & 17 deletions
This file was deleted.

CMakePresets.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"inherits": [
1414
"common-flags"
1515
],
16-
"binaryDir": "${sourceDir}/build_debug",
16+
"binaryDir": "${sourceDir}/build-debug",
1717
"cacheVariables": {
1818
"CMAKE_BUILD_TYPE": "Debug",
1919
"USERVER_SANITIZE": "addr;ub"
@@ -26,7 +26,7 @@
2626
"inherits": [
2727
"common-flags"
2828
],
29-
"binaryDir": "${sourceDir}/build_release",
29+
"binaryDir": "${sourceDir}/build-release",
3030
"cacheVariables": {
3131
"CMAKE_BUILD_TYPE": "Release"
3232
}

Makefile

Lines changed: 28 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,51 @@
1-
CMAKE_COMMON_FLAGS ?= -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
2-
CMAKE_DEBUG_FLAGS ?= --preset debug
3-
CMAKE_RELEASE_FLAGS ?= --preset release
41
NPROCS ?= $(shell nproc)
52
CLANG_FORMAT ?= clang-format
63
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)
4+
PRESETS ?= debug release debug-custom release-custom
135

146
.PHONY: all
157
all: test-debug test-release
168

179
# 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)
10+
.PHONY: $(addprefix cmake-, $(PRESETS))
11+
$(addprefix cmake-, $(PRESETS)): cmake-%:
12+
cmake --preset $*
2513

26-
build_debug/CMakeCache.txt: cmake-debug
27-
build_release/CMakeCache.txt: cmake-release
14+
$(addsuffix /CMakeCache.txt, $(addprefix build-, $(PRESETS))): build-%/CMakeCache.txt: cmake-%
2815

2916
# 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
17+
.PHONY: $(addprefix build-, $(PRESETS))
18+
$(addprefix build-, $(PRESETS)): build-%: build-%/CMakeCache.txt
19+
cmake --build build-$* -j $(NPROCS) --target service_template
3320

3421
# 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)
22+
.PHONY: $(addprefix test-, $(PRESETS))
23+
$(addprefix test-, $(PRESETS)): test-%: build-%
24+
cmake --build build-$* -j $(NPROCS) --target service_template_unittest
25+
cmake --build build-$* -j $(NPROCS) --target service_template_benchmark
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-%:
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-%
30+
.PHONY: $(addprefix start-, $(PRESETS))
31+
$(addprefix start-, $(PRESETS)): start-%:
32+
cmake --build build-$* -v --target start-service_template
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
5640
dist-clean:
57-
rm -rf build_*
41+
rm -rf build*
5842
rm -rf tests/__pycache__/
5943
rm -rf tests/.pytest_cache/
6044

6145
# Install
62-
.PHONY: install-debug install-release
63-
install-debug install-release: install-%: build-%
64-
cmake --install build_$* -v --component service_template
46+
.PHONY: $(addprefix install-, $(PRESETS))
47+
$(addprefix install-, $(PRESETS)): install-%: build-%
48+
cmake --install build-$* -v --component service_template
6549

6650
.PHONY: install
6751
install: install-release
@@ -73,23 +57,20 @@ format:
7357
find tests -name '*.py' -type f | xargs autopep8 -i
7458

7559
# 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-%
60+
.PHONY: $(addprefix --in-docker-start-, $(PRESETS))
61+
$(addprefix --in-docker-start-, $(PRESETS)): --in-docker-start-%: install-%
7862
/home/user/.local/bin/service_template \
7963
--config /home/user/.local/etc/service_template/static_config.yaml \
8064
--config_vars /home/user/.local/etc/service_template/config_vars.yaml
8165

8266
# Build and run service in docker environment
83-
.PHONY: docker-start-debug docker-start-release
67+
.PHONY: $(addprefix docker-start-, $(PRESETS))
8468
docker-start-debug docker-start-release: docker-start-%:
8569
$(DOCKER_COMPOSE) run -p 8080:8080 --rm service_template-container make -- --in-docker-start-$*
8670

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-
9071
# 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-%:
72+
.PHONY: $(addprefix docker-cmake-, $(PRESETS)) $(addprefix docker-build-, $(PRESETS)) $(addprefix docker-test-, $(PRESETS)) $(addprefix docker-clean-, $(PRESETS)) $(addprefix docker-install-, $(PRESETS))
73+
$(addprefix docker-cmake-, $(PRESETS)) $(addprefix docker-build-, $(PRESETS)) $(addprefix docker-test-, $(PRESETS)) $(addprefix docker-clean-, $(PRESETS)) $(addprefix docker-install-, $(PRESETS)): docker-%:
9374
$(DOCKER_COMPOSE) run --rm service_template-container make $*
9475

9576
# Stop docker container and cleanup data

0 commit comments

Comments
 (0)