#=========================== begin_copyright_notice ============================
#
# Copyright (C) 2019-2021 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
#============================ end_copyright_notice =============================

cmake_minimum_required(VERSION 3.13.4)
include(GNUInstallDirs)

set(GENX_INTRINSICS_MAIN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)

set(GENX_INTRINSICS_MAIN_DIR ${CMAKE_CURRENT_SOURCE_DIR})

if(IGC_INFRA)
  set(GENX_INTRINSICS_MAIN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)
endif()

include(cmake/utils.cmake)

# Global config.
add_compile_definitions(VC_INTR_LLVM_VERSION_MAJOR=${LLVM_VERSION_MAJOR})

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)

set(GENX_INTRINSICS_DESCRIPTION "GenXIntrinsicDescription.gen")

add_subdirectory(include/llvm)
add_subdirectory(lib)

# LLVM doesn't install gtest which is required for our tests
# so we cannot simply enable current unittests with prebuilt LLVM
if(NOT BUILD_EXTERNAL)
  add_subdirectory(unittests)
endif()

# Experimental lit tests for intrinsic passes. Require plugin support,
# so only available with LLVM dylib (for stability).
if(VC_INTR_ENABLE_LIT_TESTS)
  if(LLVM_LINK_LLVM_DYLIB)
    message(STATUS "VC intrinsics lit tests are enabled")
    add_subdirectory(test)
  else()
    message(STATUS "VC intrinsics lit tests require dynamic LLVM, skipping")
  endif()
endif()

install(DIRECTORY include/llvm
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  COMPONENT genx-intrinsics-headers
  FILES_MATCHING
  PATTERN "*.h"
)

# cmake creates too many subdirectories in build directory
# and then "install(DIRECTORY" installs them even if they are empty
# so generated file has to be installed separetely
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/llvm/GenXIntrinsics/${GENX_INTRINSICS_DESCRIPTION}
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/llvm/GenXIntrinsics
  COMPONENT genx-intrinsics-headers
)

install(TARGETS LLVMGenXIntrinsics EXPORT LLVMGenXIntrinsicsTargets
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

# Install Config-file only for external build
if(BUILD_EXTERNAL OR LLVM_GENX_INTRINSICS_IN_TREE_INSTALL)

  # Legacy export. To remove when all clients switch to new name.
  install(EXPORT LLVMGenXIntrinsicsTargets
    FILE LLVMGenXIntrinsicsConfig.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LLVMGenXIntrinsics
  )

  set(PACKAGE_NAME VCIntrinsics${LLVM_VERSION_MAJOR})
  install(EXPORT LLVMGenXIntrinsicsTargets
    FILE ${PACKAGE_NAME}Config.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PACKAGE_NAME}
  )
endif() # BUILD_EXTERNAL OR LLVM_GENX_INTRINSICS_IN_TREE_INSTALL
