Skip to content
Snippets Groups Projects
CMakeLists.txt 2.13 KiB
cmake_minimum_required(VERSION 3.18)
project(hpvm CXX)

include(CheckLanguage)
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
  # Enable CUDA
  set(HPVM_USE_CUDA 1)
  enable_language(CUDA)
  get_filename_component(
    CUDA_TOOLKIT_ROOT_DIR "${CMAKE_CUDA_COMPILER}/../.." ABSOLUTE
  )  # Set CUDA_TOOLKIT_ROOT_DIR by our own, to the parent folder of cuda nvcc
  message(STATUS "CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}")

  # find_package will use the auxillary cmake/Find*.cmake we provide
  list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
  find_package(CUDNN 7 EXACT REQUIRED)  # CUDNN_INCLUDE_PATH, CUDNN_LIBRARY_DIR and CUDNN::cudnn
else()
  set(HPVM_USE_CUDA 0)
  message(WARNING "CUDA is not found in this system; all ApproxHPVM features will be unavailable.")
endif()

find_package(OpenCL)  # Defines ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARY}
if(${OpenCL_FOUND})
  set(HPVM_USE_OPENCL 1)
else()
  message(WARNING "OpenCL not found. --opencl flag of hpvm-clang will be unavailable for this build.")
  set(HPVM_USE_OPENCL 0)
endif()

include_directories(./include/)

# Generate TENSOR_RT_PREFIX into config.h
set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set(TENSOR_RT_LL ${TENSOR_RT_PREFIX}/tensor_runtime.ll)
configure_file(
    ./include/Config.h.in
    ${CMAKE_CURRENT_BINARY_DIR}/Config.h
)
include_directories(${CMAKE_CURRENT_BINARY_DIR})

add_subdirectory(lib)
add_subdirectory(projects)
add_subdirectory(tools)

add_subdirectory(test)

# Add a global check rule now that all subdirectories have been traversed
# and we know the total set of lit testsuites.
get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES)
get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS)
get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS)
get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS)
get_property(LLVM_ADDITIONAL_TEST_TARGETS
                 GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS)

add_lit_target(hpmv-check-all
"Running all regression tests"
${LLVM_LIT_TESTSUITES}
PARAMS ${LLVM_LIT_PARAMS}
DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS}
ARGS ${LLVM_LIT_EXTRA_ARGS}
)