aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Makefile
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2024-04-25 04:28:29 +0200
committerEgor Tensin <egor@tensin.name>2024-04-25 04:38:25 +0200
commit333ccc7385db0eb6151c1a163e5ea2ac2702012e (patch)
tree4b7a3fd16ee16eba9aa720bfbc10bbef09cff325 /Makefile
parentworkflows/ci: upgrade actions (diff)
downloadcimple-333ccc7385db0eb6151c1a163e5ea2ac2702012e.tar.gz
cimple-333ccc7385db0eb6151c1a163e5ea2ac2702012e.zip
Makefile: separate shortcuts for debug & release builds
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile117
1 files changed, 57 insertions, 60 deletions
diff --git a/Makefile b/Makefile
index cb27efa..342b3ef 100644
--- a/Makefile
+++ b/Makefile
@@ -1,30 +1,25 @@
include prelude.mk
-src_dir := $(abspath .)
-build_dir := $(src_dir)/build
-cmake_dir := $(build_dir)/cmake
-install_dir := $(build_dir)/install
-
-test_report_dir := $(build_dir)/test_report
-coverage_dir := $(build_dir)/coverage
-flame_graphs_dir := $(build_dir)/flame_graphs
-
-COMPILER ?= clang
-CONFIGURATION ?= Debug
-DEFAULT_HOST ?= 127.0.0.1
-DEFAULT_PORT ?= 5556
-INSTALL_PREFIX ?= $(install_dir)
-COVERAGE ?=
+COMPILER ?= clang
+CONFIGURATION ?= debug
+DEFAULT_HOST ?= 127.0.0.1
+DEFAULT_PORT ?= 5556
+COVERAGE ?=
$(eval $(call noexpand,COMPILER))
$(eval $(call noexpand,CONFIGURATION))
$(eval $(call noexpand,DEFAULT_HOST))
$(eval $(call noexpand,DEFAULT_PORT))
-$(eval $(call noexpand,INSTALL_PREFIX))
$(eval $(call noexpand,COVERAGE))
+src_dir := $(abspath .)
+build_dir := $(src_dir)/build
+
.PHONY: all
-all: build
+all: debug
+
+.PHONY: DO
+DO:
.PHONY: clean
clean:
@@ -33,89 +28,91 @@ clean:
.PHONY: build
build:
@echo -----------------------------------------------------------------
- @echo Building
+ @echo 'Building: $(call escape,$(CONFIGURATION))'
@echo -----------------------------------------------------------------
- @mkdir -p -- '$(call escape,$(cmake_dir))'
+ @mkdir -p -- '$(call escape,$(build_dir)/cmake)'
cmake \
-G 'Unix Makefiles' \
-D 'CMAKE_C_COMPILER=$(call escape,$(COMPILER))' \
-D 'CMAKE_BUILD_TYPE=$(call escape,$(CONFIGURATION))' \
- -D 'CMAKE_INSTALL_PREFIX=$(call escape,$(INSTALL_PREFIX))' \
+ -D 'CMAKE_INSTALL_PREFIX=$(call escape,$(build_dir)/install)' \
-D 'DEFAULT_HOST=$(call escape,$(DEFAULT_HOST))' \
-D 'DEFAULT_PORT=$(call escape,$(DEFAULT_PORT))' \
- -D 'TEST_REPORT_DIR=$(call escape,$(test_report_dir))' \
+ -D 'TEST_REPORT_DIR=$(call escape,$(build_dir)/test_report)' \
-D 'COVERAGE=$(call escape,$(COVERAGE))' \
- -D 'FLAME_GRAPHS_DIR=$(call escape,$(flame_graphs_dir))' \
+ -D 'FLAME_GRAPHS_DIR=$(call escape,$(build_dir)/flame_graphs)' \
-S '$(call escape,$(src_dir))' \
- -B '$(call escape,$(cmake_dir))'
- cmake --build '$(call escape,$(cmake_dir))' -- -j
+ -B '$(call escape,$(build_dir)/cmake)'
+ cmake --build '$(call escape,$(build_dir)/cmake)' -- -j
+
+.PHONY: debug
+debug debug/%: CONFIGURATION := debug
+debug debug/%: build_dir := $(build_dir)/debug
+debug: build
.PHONY: release
-release: CONFIGURATION := Release
+release release/%: CONFIGURATION := release
+release release/%: build_dir := $(build_dir)/release
release: build
-.PHONY: install
-install: build
- cmake --install '$(call escape,$(cmake_dir))'
+# Coverage report depends on GCC debug data.
+.PHONY: coverage
+coverage coverage/%: CONFIGURATION := debug
+coverage coverage/%: COMPILER := gcc
+coverage coverage/%: COVERAGE := 1
+coverage coverage/%: build_dir := $(build_dir)/coverage
+coverage: build coverage/test
+ @echo -----------------------------------------------------------------
+ @echo Generating code coverage report
+ @echo -----------------------------------------------------------------
+ @mkdir -p -- '$(call escape,$(build_dir))/html'
+ gcovr --html-details '$(call escape,$(build_dir))/html/index.html' --print-summary
+ifndef CI
+ xdg-open '$(call escape,$(build_dir))/html/index.html' &> /dev/null
+endif
+
+%/install: % DO
+ cmake --install '$(call escape,$(build_dir))/cmake'
-.PHONY: test
-test:
+%/test: DO
@echo -----------------------------------------------------------------
@echo Running tests
@echo -----------------------------------------------------------------
- ctest --test-dir '$(call escape,$(cmake_dir))' \
+ ctest --test-dir '$(call escape,$(build_dir))/cmake' \
--verbose --tests-regex python_tests_default
-.PHONY: test/report
-test/report:
+%/report: DO
@echo -----------------------------------------------------------------
@echo Generating test report
@echo -----------------------------------------------------------------
- ctest --test-dir '$(call escape,$(cmake_dir))' \
+ ctest --test-dir '$(call escape,$(build_dir))/cmake' \
--verbose --tests-regex python_tests_report
+ifndef CI
+ xdg-open '$(call escape,$(build_dir))/test_report/index.html' &> /dev/null
+endif
# A subset of tests, excluding long-running stress tests.
-.PHONY: test/sanity
-test/sanity:
+%/sanity: DO
@echo -----------------------------------------------------------------
@echo Running sanity tests
@echo -----------------------------------------------------------------
- ctest --test-dir '$(call escape,$(cmake_dir))' \
+ ctest --test-dir '$(call escape,$(build_dir))/cmake' \
--verbose --tests-regex python_tests_sanity
# Same, but run under Valgrind.
-.PHONY: test/valgrind
-test/valgrind:
+%/valgrind: DO
@echo -----------------------------------------------------------------
@echo Running sanity tests w/ Valgrind
@echo -----------------------------------------------------------------
- ctest --test-dir '$(call escape,$(cmake_dir))' \
+ ctest --test-dir '$(call escape,$(build_dir))/cmake' \
--verbose --tests-regex python_tests_valgrind
# When building a Docker image for a different platform, exclude stress tests:
# they simply take way too long.
-.PHONY: test/docker
-test/docker: test/sanity
-
-# Force a rebuild for a coverage report, since it depends on GCC debug data.
-.PHONY: coverage
-coverage: COMPILER := gcc
-coverage: CONFIGURATION := Debug
-coverage: COVERAGE := 1
-coverage: clean build test
- @echo -----------------------------------------------------------------
- @echo Generating code coverage report
- @echo -----------------------------------------------------------------
- @mkdir -p -- '$(call escape,$(coverage_dir))'
- gcovr --html-details '$(call escape,$(coverage_dir))/index.html' --print-summary
-ifndef CI
- xdg-open '$(call escape,$(coverage_dir))/index.html' &> /dev/null
-endif
-.PHONY: flame_graphs
-flame_graphs:
+%/flame_graphs: DO
@echo -----------------------------------------------------------------
@echo Generating flame graphs
@echo -----------------------------------------------------------------
- ctest --test-dir '$(call escape,$(cmake_dir))' \
+ ctest --test-dir '$(call escape,$(build_dir))/cmake' \
--verbose --tests-regex python_tests_flame_graphs