| #This is a simple wrapper hiding cmake from non-expert end users. |
| # |
| # It supports the targets: |
| # 'make' - builds everything (all libaries/executables) |
| # 'make clean' - removes generated build objects/libraries/executables etc. |
| # 'make distclean' - will clean everything including the cmake generated build files |
| # |
| # All other targets (e.g. 'make vpr') are passed to the cmake generated makefile |
| # and processed according to the CMakeLists.txt. |
| # |
| # To perform a debug build use: |
| # 'make BUILD_TYPE=debug' |
| |
| #Default build type |
| # Possible values: |
| # release |
| # debug |
| BUILD_TYPE = release |
| |
| #Allows users to pass parameters to cmake |
| # e.g. make CMAKE_PARAMS="-DVTR_ENABLE_SANITIZE=true" |
| override CMAKE_PARAMS := -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -G 'Unix Makefiles' ${CMAKE_PARAMS} |
| |
| |
| # -s : Suppresss makefile output (e.g. entering/leaving directories) |
| # --output-sync target : For parallel compilation ensure output for each target is synchronized (make version >= 4.0) |
| MAKEFLAGS := -s |
| |
| BUILD_DIR=./build |
| GENERATED_MAKEFILE := $(BUILD_DIR)/Makefile |
| |
| #Check for the cmake exectuable |
| CMAKE := $(shell command -v cmake 2> /dev/null) |
| |
| #Show test log on failures with 'make test' |
| export CTEST_OUTPUT_ON_FAILURE=TRUE |
| |
| #All targets in this make file are always out of date. |
| # This ensures that any make target requests are forwarded to |
| # the generated makefile |
| .PHONY: all distclean $(GENERATED_MAKEFILE) $(MAKECMDGOALS) |
| |
| #Build everything |
| all: $(GENERATED_MAKEFILE) |
| @+$(MAKE) -C $(BUILD_DIR) |
| |
| #Call the generated Makefile's clean, and then remove all cmake generated files |
| distclean: $(GENERATED_MAKEFILE) |
| @ echo "Cleaning build..." |
| @+$(MAKE) -C $(BUILD_DIR) clean |
| @ echo "Removing build system files.." |
| @ rm -rf $(BUILD_DIR) |
| @ rm -rf CMakeFiles CMakeCache.txt #In case 'cmake .' was run in the source directory |
| |
| #Call cmake to generate the main Makefile |
| $(GENERATED_MAKEFILE): |
| ifeq ($(CMAKE),) |
| $(error Required 'cmake' executable not found. On debian/ubuntu try 'sudo apt-get install cmake' to install) |
| endif |
| @ mkdir -p $(BUILD_DIR) |
| echo "cd $(BUILD_DIR) && $(CMAKE) $(CMAKE_PARAMS) .. " |
| cd $(BUILD_DIR) && $(CMAKE) $(CMAKE_PARAMS) .. |
| |
| #Forward any targets that are not named 'distclean' to the generated Makefile |
| ifneq ($(MAKECMDGOALS),distclean) |
| $(MAKECMDGOALS): $(GENERATED_MAKEFILE) |
| @+$(MAKE) -C $(BUILD_DIR) $(MAKECMDGOALS) |
| endif |