From 28bbe18115ccfe6b97b309f7fc95ead5a492b791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Montan=CC=83ana?= Date: Thu, 2 Nov 2023 09:14:55 +0100 Subject: [PATCH] Add Makefile --- .gitignore | 4 ++- Makefile | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index c07ee27..2f6ac38 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,6 @@ cmake-* .vscode **/CMakeFiles -**/gcovr-report \ No newline at end of file +**/gcovr-report +build_debug/ +build_release/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4e4c080 --- /dev/null +++ b/Makefile @@ -0,0 +1,92 @@ +SHELL := /bin/bash +.DEFAULT_GOAL := help +.PHONY: coverage setup help build test clean debug release + +f_release = build_release +f_debug = build_debug +app_targets = main +test_targets = unit_tests_bayesnet unit_tests_platform +n_procs = -j 16 + +define ClearTests + @for t in $(test_targets); do \ + if [ -f $(f_debug)/tests/$$t ]; then \ + echo ">>> Cleaning $$t..." ; \ + rm -f $(f_debug)/tests/$$t ; \ + fi ; \ + done + @nfiles="$(find . -name "*.gcda" -print0)" ; \ + if test "${nfiles}" != "" ; then \ + find . -name "*.gcda" -print0 | xargs -0 rm 2>/dev/null ;\ + fi ; +endef + + +setup: ## Install dependencies for tests and coverage + @if [ "$(shell uname)" = "Darwin" ]; then \ + brew install gcovr; \ + brew install lcov; \ + fi + @if [ "$(shell uname)" = "Linux" ]; then \ + pip install gcovr; \ + fi + +dest ?= ${HOME}/bin +install: ## Copy binary files to bin folder + @echo "Destination folder: $(dest)" + make buildr + @echo ">>> Copying files to $(dest)" + @cp $(f_release)/src/Platform/b_main $(dest) + @cp $(f_release)/src/Platform/b_list $(dest) + @cp $(f_release)/src/Platform/b_manage $(dest) + @cp $(f_release)/src/Platform/b_best $(dest) + +dependency: ## Create a dependency graph diagram of the project (build/dependency.png) + @echo ">>> Creating dependency graph diagram of the project..."; + $(MAKE) debug + cd $(f_debug) && cmake .. --graphviz=dependency.dot && dot -Tpng dependency.dot -o dependency.png + +buildd: ## Build the debug targets + cmake --build $(f_debug) -t $(app_targets) $(n_procs) + +buildr: ## Build the release targets + cmake --build $(f_release) -t $(app_targets) $(n_procs) + +clean: ## Clean the tests info + @echo ">>> Cleaning Debug PyWrap tests..."; + $(call ClearTests) + @echo ">>> Done"; + +clang-uml: ## Create uml class and sequence diagrams + clang-uml -p --add-compile-flag -I /usr/lib/gcc/x86_64-redhat-linux/8/include/ + +debug: ## Build a debug version of the project + @echo ">>> Building Debug PyWrap..."; + @if [ -d ./$(f_debug) ]; then rm -rf ./$(f_debug); fi + @mkdir $(f_debug); + @cmake -S . -B $(f_debug) -D CMAKE_BUILD_TYPE=Debug -D ENABLE_TESTING=ON -D CODE_COVERAGE=ON + @echo ">>> Done"; + +release: ## Build a Release version of the project + @echo ">>> Building Release PyWrap..."; + @if [ -d ./$(f_release) ]; then rm -rf ./$(f_release); fi + @mkdir $(f_release); + @cmake -S . -B $(f_release) -D CMAKE_BUILD_TYPE=Release + @echo ">>> Done"; + +help: ## Show help message + @IFS=$$'\n' ; \ + help_lines=(`fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ + printf "%s\n\n" "Usage: make [task]"; \ + printf "%-20s %s\n" "task" "help" ; \ + printf "%-20s %s\n" "------" "----" ; \ + for help_line in $${help_lines[@]}; do \ + IFS=$$':' ; \ + help_split=($$help_line) ; \ + help_command=`echo $${help_split[0]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + help_info=`echo $${help_split[2]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + printf '\033[36m'; \ + printf "%-20s %s" $$help_command ; \ + printf '\033[0m'; \ + printf "%s\n" $$help_info; \ + done