From 333ccc7385db0eb6151c1a163e5ea2ac2702012e Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Thu, 25 Apr 2024 04:28:29 +0200 Subject: Makefile: separate shortcuts for debug & release builds --- Makefile | 117 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 57 insertions(+), 60 deletions(-) (limited to 'Makefile') 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 -- cgit v1.2.3