# Retrieve this Makefile's location.
THIS_FILE_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))/

# Set default target to be test
.DEFAULT_GOAL := test

# Set up GTEST for canonical Linux and MacOSX source trees.
ifneq ($(wildcard $(THIS_FILE_DIR)../../llvm/utils/unittest/googletest),)
    # Assume lldb/llvm (MacOSX Xcode) directory form.
    LLVM_BASE_DIR := $(realpath $(THIS_FILE_DIR)../../llvm)
else
    ifneq ($(wildcard $(THIS_FILE_DIR)../../../llvm/utils/unittest/googletest),)
        # Assume lldb/llvm side-by-side configuration (with symbolic links)
        LLVM_BASE_DIR := $(realpath $(THIS_FILE_DIR)../../../llvm)
    else
        # Assume llvm/tools/lldb (Non-MacOSX) directory form.
        LLVM_BASE_DIR := $(realpath $(THIS_FILE_DIR)../../../..)
    endif
endif

ifeq ($(GTEST_DIR),)
    GTEST_DIR := $(LLVM_BASE_DIR)/utils/unittest/googletest
endif
GTEST_INCLUDE_DIR := $(GTEST_DIR)/include

ifeq ($(LLVM_BUILD_DIR),)
    ifneq ($(wildcard $(THIS_FILE_DIR)../../llvm-build/Release+Asserts/x86_64/Release+Asserts),)
        LLVM_BUILD_DIR := $(realpath $(THIS_FILE_DIR)../../llvm-build/Release+Asserts/x86_64/Release+Asserts)
    else ifneq ($(wildcard $(THIS_FILE_DIR)../../../../../build-debug/lib),)
        LLVM_BUILD_DIR := $(realpath $(THIS_FILE_DIR)../../../../../build-debug)
    endif
endif

ifeq ($(LLVM_BUILD_DIR),)
    $(error Could not find LLVM build output dir, please set it with LLVM_BUILD_DIR)
endif
GTEST_STATIC_LIB_DIR := $(LLVM_BUILD_DIR)/lib

ifeq ($(LLVM_BUILD_INCLUDE_DIR),)
    ifneq ($(wildcard $(LLVM_BUILD_DIR)/../include),)
        LLVM_BUILD_INCLUDE_DIR := $(realpath $(LLVM_BUILD_DIR)/../include)
    else ifneq ($(wildcard $(LLVM_BUILD_DIR)/include),)
        LLVM_BUILD_INCLUDE_DIR := $(realpath $(LLVM_BUILD_DIR)/include)
    endif
endif

ifeq ($(LLVM_BUILD_INCLUDE_DIR),)
    $(error Could not find LLVM build directory include dir, please set it with LLVM_BUILD_INCLUDE_DIR)
endif

# $(info LLVM_BASE_DIR = $(LLVM_BASE_DIR))
# $(info LLVM_BUILD_DIR = $(LLVM_BUILD_DIR))
# $(info GTEST_DIR = $(GTEST_DIR))
# $(info GTEST_INCLUDE_DIR = $(GTEST_INCLUDE_DIR))
# $(info GTEST_STATIC_LIB_DIR = $(GTEST_STATIC_LIB_DIR))

# Note lldb/include is already added for us by test/make/Makefile.rules
LLDB_HEADER_DIRS += \
	-I $(realpath $(THIS_FILE_DIR)../../source/)
#	-I $(realpath $(THIS_FILE_DIR)../../include)

CFLAGS_EXTRAS += -I $(GTEST_INCLUDE_DIR) -I $(LLVM_BASE_DIR)/include -I $(LLVM_BUILD_INCLUDE_DIR) $(LLDB_HEADER_DIRS)
LD_EXTRAS += $(GTEST_STATIC_LIB_DIR)/libgtest.a $(GTEST_STATIC_LIB_DIR)/libgtest_main.a $(GTEST_STATIC_LIB_DIR)/libLLVMSupport.a

.PHONY: clean test

# Handle subdirs
ifneq ($(SUBDIRS),)

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

test:: subdirs

clean:: subdirs

$(SUBDIRS):
	$(MAKE) -C $@ $(MAKECMDGOALS)

endif


# Skip pulling in build rules when we don't have an CXX_SOURCES defined.
# If this is the case, then we're just recursing directories.
# Consider doing directory handling/makefile running via a python script
# like test/dotest.py.

ifneq ($(CXX_SOURCES),)

include $(realpath $(THIS_FILE_DIR)../../test/make/Makefile.rules)

test:: $(EXE)
	$(realpath $(EXE))

endif
