include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. )

if(NOT DEFINED ITTAPI_GIT_REPOSITORY)
    set(ITTAPI_GIT_REPOSITORY https://github.com/intel/ittapi.git)
endif()

if(NOT DEFINED ITTAPI_GIT_TAG)
    set(ITTAPI_GIT_TAG v3.18.10)
endif()

if(NOT DEFINED ITTAPI_SOURCE_DIR)
    set(ITTAPI_SOURCE_DIR ${PROJECT_BINARY_DIR})
endif()

if(NOT EXISTS ${ITTAPI_SOURCE_DIR}/ittapi)
    execute_process(COMMAND ${GIT_EXECUTABLE} clone ${ITTAPI_GIT_REPOSITORY}
                    WORKING_DIRECTORY ${ITTAPI_SOURCE_DIR}
                    RESULT_VARIABLE GIT_CLONE_RESULT)
    if(NOT GIT_CLONE_RESULT EQUAL "0")
        message(FATAL_ERROR "git clone ${ITTAPI_GIT_REPOSITORY} failed with ${GIT_CLONE_RESULT}, please clone ${ITTAPI_GIT_REPOSITORY}")
    endif()
endif()

execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${ITTAPI_GIT_TAG}
                WORKING_DIRECTORY ${ITTAPI_SOURCE_DIR}/ittapi
                RESULT_VARIABLE GIT_CHECKOUT_RESULT)
if(NOT GIT_CHECKOUT_RESULT EQUAL "0")
    message(FATAL_ERROR "git checkout ${ITTAPI_GIT_TAG} failed with ${GIT_CHECKOUT_RESULT}, please checkout ${ITTAPI_GIT_TAG} at ${ITTAPI_SOURCE_DIR}/ittapi")
endif()

include_directories( ${ITTAPI_SOURCE_DIR}/ittapi/include/ )

if( HAVE_LIBDL )
    set(LLVM_INTEL_JIT_LIBS ${CMAKE_DL_LIBS})
endif()

set(LLVM_INTEL_JIT_LIBS ${LLVM_PTHREAD_LIB} ${LLVM_INTEL_JIT_LIBS})


add_llvm_component_library(LLVMIntelJITEvents
  IntelJITEventListener.cpp
  jitprofiling.c
  ${ITTAPI_SOURCE_DIR}/ittapi/src/ittnotify/ittnotify_static.c

  LINK_LIBS ${LLVM_INTEL_JIT_LIBS}

  LINK_COMPONENTS
  CodeGen
  Core
  DebugInfoDWARF
  Support
  Object
  ExecutionEngine
)

add_dependencies(LLVMIntelJITEvents LLVMCodeGen)
