# -*- Makefile -*- include $(LEVEL)/Makefile.config # Include LLVM's Master Makefile config and rules. include $(LLVM_OBJ_ROOT)/Makefile.config # Filters out -fstack-protector-strong which is not understood by clang 3.4 or below # yet is present in Makefile.config of some distros such as Debian Jessie ifeq ($(shell test $(LLVM_VERSION_MAJOR) -le 3 -a $(LLVM_VERSION_MINOR) -le 4; echo $$?),0) CFLAGS := $(filter-out -fstack-protector-strong,$(CFLAGS)) CXXFLAGS := $(filter-out -fstack-protector-strong,$(CXXFLAGS)) endif # Assertions should be enabled by default for KLEE (but they can still # be disabled by running make with DISABLE_ASSERTIONS=1 DISABLE_ASSERTIONS := 0 BUILDING_RUNTIME:=$(if $(or $(BYTECODE_LIBRARY),$(MODULE_NAME)),1,0) ifeq ($(BUILDING_RUNTIME),1) # # Override make variables based on the runtime configuration. We want # to override whatever the user may have said on the command line, # hence the use of override. # override ENABLE_OPTIMIZED := $(RUNTIME_ENABLE_OPTIMIZED) override DISABLE_ASSERTIONS := $(RUNTIME_DISABLE_ASSERTIONS) override ENABLE_PROFILING := $(RUNTIME_ENABLE_PROFILING) override ENABLE_COVERAGE := $(RUNTIME_ENABLE_COVERAGE) override DEBUG_SYMBOLS := $(RUNTIME_DEBUG_SYMBOLS) endif BYTECODE_DESTINATION:=$(DESTDIR)$(PROJ_libdir)/klee/runtime include $(PROJ_SRC_ROOT)/Makefile.rules # We have to build the bytecode install directory manually. # FIXME: Doing it this way is potentially racey! install:: $(MKDIR) $(BYTECODE_DESTINATION) # LLVMCC was added in 2.7. ifeq ($(LLVMCC),) LLVMCC := $(LLVMGCC) LLVMCXX := $(LLVMGXX) endif # Deliberately override the host compiler # so that we use what was detected when KLEE was configured # and not LLVM. CC := $(KLEE_HOST_C_COMPILER) CXX := $(KLEE_HOST_CXX_COMPILER) # Needed to build runtime library using clang (gnu89 is the gcc default) C.Flags += -std=gnu89 # Build using C++11 if requested ifeq ($(KLEE_USE_CXX11),1) CXX.Flags += -std=c++11 endif # This is filename that KLEE will look for when trying to load klee-uclibc KLEE_UCLIBC_BCA_NAME="klee-uclibc.bca" ifneq ($(ENABLE_STP),0) CXX.Flags += $(STP_CFLAGS) CXX.Flags += -DEXT_HASH_MAP endif ifneq ($(ENABLE_Z3),0) CXX.Flags += $(Z3_CFLAGS) endif CXX.Flags += -DKLEE_DIR=\"$(PROJ_OBJ_ROOT)\" -DKLEE_INSTALL_BIN_DIR=\"$(PROJ_bindir)\" CXX.Flags += -DKLEE_INSTALL_RUNTIME_DIR=\"$(BYTECODE_DESTINATION)\" ifeq ($(ENABLE_UCLIBC),1) CXX.Flags += -DKLEE_UCLIBC_BCA_NAME=\"$(KLEE_UCLIBC_BCA_NAME)\" endif # For metaSMT include $(PROJ_SRC_ROOT)/MetaSMT.mk # If building KLEE with the Sanitizers don't build the runtime with it # because KLEE doesn't know how to handle it. ifneq ("X$(MODULE_NAME)$(BYTECODE_LIBRARY)X","XX") CFLAGS := $(filter-out -fsanitize=%,$(CFLAGS)) endif