# First include the GoogleTest library module definitions.
include $(LOCAL_PATH)/distrib/googletest/Android.mk

EMULATOR_UNITTESTS_SOURCES := \
  android/utils/bufprint_unittest.cpp \
  android/utils/eintr_wrapper_unittest.cpp \
  android/utils/file_data_unittest.cpp \
  android/utils/property_file_unittest.cpp \
  android/utils/win32_cmdline_quote_unittest.cpp \
  android/base/containers/PodVector_unittest.cpp \
  android/base/containers/StringVector_unittest.cpp \
  android/base/EintrWrapper_unittest.cpp \
  android/base/files/PathUtils_unittest.cpp \
  android/base/files/ScopedFd_unittest.cpp \
  android/base/files/ScopedStdioFile_unittest.cpp \
  android/base/Log_unittest.cpp \
  android/base/memory/MallocUsableSize_unittest.cpp \
  android/base/memory/ScopedPtr_unittest.cpp \
  android/base/String_unittest.cpp \
  android/base/StringFormat_unittest.cpp \
  android/base/StringView_unittest.cpp \
  android/filesystems/ext4_utils_unittest.cpp \

ifeq (windows,$(HOST_OS))
EMULATOR_UNITTESTS_SOURCES += \
  android/base/files/ScopedHandle_unittest.cpp \

endif

$(call start-emulator-program, emulator_unittests)
LOCAL_C_INCLUDES += $(EMULATOR_GTEST_INCLUDES)
LOCAL_LDLIBS += $(EMULATOR_GTEST_LDLIBS)
LOCAL_SRC_FILES := $(EMULATOR_UNITTESTS_SOURCES)
LOCAL_CFLAGS += -O0
LOCAL_STATIC_LIBRARIES += emulator-common emulator-libgtest
$(call end-emulator-program)


ifneq ($(filter linux darwin,$(HOST_OS)),)
  $(call start-emulator-program, emulator64_unittests)
  LOCAL_C_INCLUDES += $(EMULATOR_GTEST_INCLUDES)
  LOCAL_LDLIBS += $(EMULATOR_GTEST_LDLIBS)
  LOCAL_SRC_FILES := $(EMULATOR_UNITTESTS_SOURCES)
  LOCAL_CFLAGS += -O0 -m64
  LOCAL_LDLIBS += -m64
  LOCAL_STATIC_LIBRARIES += emulator64-common emulator64-libgtest
  $(call end-emulator-program)
endif
