##===- unittests/Makefile.unittest -------------------------*- Makefile -*-===##
#
#                     The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
#
# This file is included by all of the unit test makefiles.
#
##===----------------------------------------------------------------------===##

# Set up variables for building a unit test.
ifdef TESTNAME

include $(LEVEL)/Makefile.common

LLVMUnitTestExe = $(BuildMode)/$(TESTNAME)Tests$(EXEEXT)

# Note that these flags are duplicated when building GoogleTest itself in
# utils/unittest/googletest/Makefile; ensure that any changes are made to both.
CPP.Flags += -I$(LLVM_SRC_ROOT)/utils/unittest/googletest/include
CPP.Flags += $(NO_MISSING_FIELD_INITIALIZERS) $(NO_VARIADIC_MACROS)
CPP.Flags += -DGTEST_HAS_RTTI=0
# libstdc++'s TR1 <tuple> header depends on RTTI and uses C++'0x features not
# supported by Clang, so force googletest to use its own tuple implementation.
CPP.Flags += -DGTEST_USE_OWN_TR1_TUPLE

# Disable pthreads if LLVM was configured without them.
ifneq ($(HAVE_PTHREAD), 1)
  CPP.Flags += -DGTEST_HAS_PTHREAD=0
endif

TESTLIBS = -lGoogleTest -lUnitTestMain

ifeq ($(ENABLE_SHARED), 1)
  # Add the absolute path to the dynamic library.  This is ok because
  # we'll never install unittests.
  LD.Flags += $(RPATH) -Wl,$(SharedLibDir)
  # Also set {DYLD,LD}_LIBRARY_PATH because OSX ignores the rpath most
  # of the time.
  Run.Shared := $(SHLIBPATH_VAR)="$(SharedLibDir)$${$(SHLIBPATH_VAR):+:}$$$(SHLIBPATH_VAR)"
endif

$(LLVMUnitTestExe): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
	$(Echo) Linking $(BuildMode) unit test $(TESTNAME) $(StripWarnMsg)
	$(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
	$(TESTLIBS) $(LLVMLibsOptions) $(ExtraLibs) $(TOOLLINKOPTSB) $(LIBS)
	$(Echo) ======= Finished Linking $(BuildMode) Unit test $(TESTNAME) \
          $(StripWarnMsg)

all:: $(LLVMUnitTestExe)

unitcheck:: $(LLVMUnitTestExe)
	$(Run.Shared) $(LLVMUnitTestExe)

endif
