blob: 76c86e1bb69ccb99054173a4ef2a28cbbea57fcc [file] [log] [blame]
ODIN_ROOT=$(PWD)
NB_OF_PROCESS ?= $(shell python -c "import multiprocessing; print(multiprocessing.cpu_count())")
################
# build with ninja when doable
################
ifneq ($(shell which ninja | grep -v "not found"),)
BUILDER := ninja
CMAKE_GEN_ARGS := -GNinja
else
BUILDER := make -j$(NB_OF_PROCESS)
CMAKE_GEN_ARGS := -G'Unix Makefiles'
endif
#Default build type
# Possible values:
# release
# debug
BUILD_TYPE ?= release
MAKEFLAGS := -s
CMAKE_ARGS = -DVTR_IPO_BUILD="off"
BUILD_DIR=../build
ODIN_BUILD_DIR=$(BUILD_DIR)/ODIN_II
.PHONY: help build debug test large_test
help:
@echo -e "\n\
The Following options are available\n\n\
build build using the VTR_ROOT makefile \n\
debug build using the VTR_ROOT makefile with debug flags and extra warning flags for ODIN only\n\
clean remove the build file for ODIN only\n\
test run the complete battery of test before commiting changes or to assert functionality\n\
large_test run the complete battery of test before merging changes\n\
"
_init: clean
mkdir -p $(ODIN_BUILD_DIR)
clean:
$(RM) -f $(ODIN_BUILD_DIR)/.*.build
$(RM) -Rf $(BUILD_DIR)/CMakeCache.txt
$(RM) -Rf $(BUILD_DIR)/ODIN_II
define _build_it_gen
_build_it_$(1): _set_$(1)
cd $(BUILD_DIR) &&\
echo "Building with $(NB_OF_PROCESS) threads" &&\
$(BUILDER)
$(1): _build_it_$(1)
endef
$(ODIN_BUILD_DIR)/.%.build: _init
touch $@
_set_build: $(ODIN_BUILD_DIR)/.regular.build
cd $(BUILD_DIR) &&\
cmake $(CMAKE_GEN_ARGS) $(CMAKE_ARGS) ..
_set_debug: $(ODIN_BUILD_DIR)/.debug.build
cd $(BUILD_DIR) &&\
cmake $(CMAKE_GEN_ARGS) $(CMAKE_ARGS) -DODIN_DEBUG=on ..
_set_warn: $(ODIN_BUILD_DIR)/.warn.build
cd $(BUILD_DIR) &&\
cmake $(CMAKE_GEN_ARGS) $(CMAKE_ARGS) -DODIN_WARN=on ..
_set_gcov: $(ODIN_BUILD_DIR)/.gcov.build
cd $(BUILD_DIR) &&\
cmake $(CMAKE_GEN_ARGS) $(CMAKE_ARGS) -DODIN_COVERAGE=on ..
_set_clang_tidy: $(ODIN_BUILD_DIR)/.tidy.build
cd $(BUILD_DIR) &&\
cmake $(CMAKE_GEN_ARGS) $(CMAKE_ARGS) -DODIN_TIDY=on ..
BUILD_IT_TARGETS = build debug warn gcov clang_tidy
$(foreach t,$(BUILD_IT_TARGETS), $(eval $(call _build_it_gen,$(t))))
scrub:
find SRC/ -type f \( -iname \*.gcno -or -iname \*.gcda -or -iname \*.gcov \) -exec rm -f {} \;
./verify_odin.sh --clean
gcovr:
find $(BUILD_DIR)/ODIN_II/CMakeFiles/libodin_ii.dir -type f \( -iname \*.gcno -or -iname \*.gcda -or -iname \*.gcov \) -exec cp {} SRC/ \;
gcovr --html -s -o coverage_report.html -r .;
find SRC/ -type f \( -iname \*.gcno -or -iname \*.gcda -or -iname \*.gcov \) -exec rm -f {} \;
cppcheck:
cppcheck . 1> /dev/null
test:
./verify_odin.sh -t regression_test/benchmark/suite/pre_commit -j $(NB_OF_PROCESS)
large_test:
./verify_odin.sh -t regression_test/benchmark/suite/pre_merge -j $(NB_OF_PROCESS)