##===--------------------------------------------------------------------------
##                   ROCm Device Libraries
##
## This file is distributed under the University of Illinois Open Source
## License. See LICENSE.TXT for details.
##===--------------------------------------------------------------------------

cmake_minimum_required(VERSION 3.13.4)

project(ROCm-Device-Libs VERSION "1.0.0")
cmake_policy(SET CMP0011 NEW)

if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
  include(CMakePackageConfigHelpers)
  include(GNUInstallDirs)

  find_package(ROCM)
  if (ROCM_FOUND)
    include(ROCMSetupVersion)
    rocm_setup_version(VERSION "${PROJECT_VERSION}")
  endif()
endif()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

# Optionally, build Device Libs with ccache.
set(ROCM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build")
if (ROCM_CCACHE_BUILD)
  find_program(CCACHE_PROGRAM ccache)
  if (CCACHE_PROGRAM)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
  else()
    message(WARNING "Unable to find ccache. Falling back to real compiler")
  endif() # if (CCACHE_PROGRAM)
endif() # if (ROCM_CCACHE_BUILD)

if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
  find_package(LLVM REQUIRED)
  find_package(Clang HINTS ${LLVM_DIR}/../clang)

  list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})

  if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/dist CACHE INTERNAL "Prefix prepended to install directories")
  endif()

  set(ROCM_DEVICELIB_STANDALONE_BUILD ON)
endif(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)


if (NOT DEFINED AMDGPU_TARGET_TRIPLE)
  set(AMDGPU_TARGET_TRIPLE "amdgcn-amd-amdhsa")
endif()

if (NOT PREPARE_BUILTINS)
  add_subdirectory(utils/prepare-builtins)
  set (PREPARE_BUILTINS $<TARGET_FILE:prepare-builtins>)
endif()

include(OCL)

set(AMDGCN_LIB_LIST)
set(AMDGCN_DEP_LIST)
add_subdirectory(irif)
add_subdirectory(oclc)
add_subdirectory(ocml)
add_subdirectory(ockl)
add_subdirectory(opencl)
add_subdirectory(hip)
add_subdirectory(asanrtl)

enable_testing()
add_subdirectory(test/constant_folding)

include(Packages)

if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
  ## CPack standard variables
  set ( CPACK_PACKAGE_NAME "rocm-device-libs" )
  set ( CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" )
  set ( CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}" )
  set ( CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}" )
  set ( CPACK_PACKAGE_VERSION "${PROJECT_VERSION}" )
  set ( CPACK_PACKAGE_CONTACT "Advanced Micro Devices Inc." )
  set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Radeon Open Compute - device libraries" )
  set ( CPACK_PACKAGE_DESCRIPTION "This package includes LLVM bitcode libraries." )
  set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.TXT" )
  set ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/RadeonOpenCompute/ROCm-Device-Libs" )

  # Install License file
  install ( FILES "${CPACK_RESOURCE_FILE_LICENSE}"
          DESTINATION ${CMAKE_INSTALL_DOCDIR}/${CPACK_PACKAGE_NAME})

  set ( CPACK_GENERATOR "DEB;RPM" CACHE STRING "Default packaging generators." )

  ## ROCM version updates as per naming convention
  set ( ROCM_VERSION_FOR_PACKAGE "99999" )
  if( DEFINED ENV{ROCM_LIBPATCH_VERSION} )
    set ( ROCM_VERSION_FOR_PACKAGE $ENV{ROCM_LIBPATCH_VERSION} )
  endif()
  ## Debian package values
  set ( CPACK_DEBIAN_PACKAGE_MAINTAINER "ROCm Compiler Support <rocm.compiler.support@amd.com>" )

  set ( CPACK_DEBIAN_PACKAGE_RELEASE "local" )
  if( DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE} )
    set ( CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE} )
  endif()
  ## RPM package variables
  set ( CPACK_RPM_PACKAGE_RELEASE "local" )
  if( DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE} )
    set ( CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE} )
  endif()
  ## get distro for RPM package using dist
  message("device-libs CPACK_RPM_PACKAGE_RELEASE now is ${CPACK_RPM_PACKAGE_RELEASE}")
  set( CPACK_RPM_PACKAGE_LICENSE "NCSA" )

  execute_process( COMMAND rpm --eval %{?dist}
                 RESULT_VARIABLE _result_var
                 OUTPUT_VARIABLE _output_var
                 OUTPUT_STRIP_TRAILING_WHITESPACE )
  if( _result_var EQUAL "0" AND NOT _output_var STREQUAL "" )
    string (APPEND CPACK_RPM_PACKAGE_RELEASE ${_output_var})
  endif()
  # set package name as per standard
  set ( CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}.${ROCM_VERSION_FOR_PACKAGE}" )

  set ( CPACK_RPM_FILE_NAME "RPM-DEFAULT" )
  set ( CPACK_RPM_PACKAGE_REQUIRES "rocm-core" )
  set ( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" )
  set ( CPACK_DEBIAN_PACKAGE_DEPENDS "rocm-core" )
  # Remove dependency on rocm-core if -DROCM_DEP_ROCMCORE=ON not given to cmake
  if(NOT ROCM_DEP_ROCMCORE)
      string(REGEX REPLACE ",? ?rocm-core" "" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES})
      string(REGEX REPLACE ",? ?rocm-core" "" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS})
  endif()
  include( CPack )
endif()
