# # Copyright (c) 2019 Nutanix Inc. All rights reserved. # # Authors: Thanos Makatos # Swapnil Ingle # Felipe Franciosi # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of Nutanix nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # BUILD_TYPE ?= dbg ifeq ($(BUILD_TYPE), dbg) CMAKE_BUILD_TYPE = Debug CFLAGS += -DDEBUG else CMAKE_BUILD_TYPE = Release endif ifdef WITH_ASAN CC = clang CFLAGS += -fsanitize=address LDFLAGS += -fsanitize=address endif ifeq ($(VERBOSE),) MAKEFLAGS += -s endif CMAKE = cmake BUILD_DIR_BASE = $(CURDIR)/build BUILD_DIR = $(BUILD_DIR_BASE)/$(BUILD_TYPE) INSTALL_PREFIX ?= /usr/local PHONY_TARGETS := all test pre-push realclean buildclean force_cmake tags .PHONY: $(PHONY_TARGETS) all $(filter-out $(PHONY_TARGETS), $(MAKECMDGOALS)): $(BUILD_DIR)/Makefile +$(MAKE) -C $(BUILD_DIR) $@ test: all cd $(BUILD_DIR)/test; ctest --verbose pre-push: realclean make test CC=gcc make test CC=gcc BUILD_TYPE=rel make realclean make test CC=clang make test CC=clang BUILD_TYPE=rel make realclean make test WITH_ASAN=1 realclean: rm -rf $(BUILD_DIR_BASE) buildclean: rm -rf $(BUILD_DIR) force_cmake: $(BUILD_DIR)/Makefile $(BUILD_DIR)/Makefile: mkdir -p $(BUILD_DIR) cd $(BUILD_DIR); $(CMAKE) \ -D "CMAKE_C_COMPILER:STRING=$(CC)" \ -D "CMAKE_C_FLAGS:STRING=$(CFLAGS)" \ -D "CMAKE_BUILD_TYPE:STRING=$(CMAKE_BUILD_TYPE)" \ -D "CMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX)" \ $(CURDIR) tags: ctags -R --exclude=$(BUILD_DIR)