From ce61e4d1784ad164c36ecc86cbd89b7d6a93dbfe Mon Sep 17 00:00:00 2001 From: Yifan Zhao <yifanz16@illinois.edu> Date: Tue, 30 Mar 2021 11:49:20 -0500 Subject: [PATCH] Use modern CMake approach to name libraries --- hpvm/CMakeLists.txt | 2 +- hpvm/cmake/FindCUDNN.cmake | 14 +++++++------ hpvm/projects/hpvm-tensor-rt/CMakeLists.txt | 22 +++++++++++++-------- hpvm/tools/py-approxhpvm/CMakeLists.txt | 4 ++-- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/hpvm/CMakeLists.txt b/hpvm/CMakeLists.txt index 809a30cfa5..431c042b63 100644 --- a/hpvm/CMakeLists.txt +++ b/hpvm/CMakeLists.txt @@ -7,7 +7,7 @@ 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_PATH +find_package(CUDNN 7 EXACT REQUIRED) # CUDNN_INCLUDE_PATH, CUDNN_LIBRARY_DIR and CUDNN::cudnn include_directories(./include/) # find_package will use the auxillary cmake/Find*.cmake we provide diff --git a/hpvm/cmake/FindCUDNN.cmake b/hpvm/cmake/FindCUDNN.cmake index e5a427f031..bb4918f704 100644 --- a/hpvm/cmake/FindCUDNN.cmake +++ b/hpvm/cmake/FindCUDNN.cmake @@ -10,8 +10,9 @@ # The following are set after configuration is done: # CUDNN_FOUND # CUDNN_INCLUDE_PATH -# CUDNN_LIBRARY_PATH +# CUDNN_LIBRARY_DIR # +# It also provides the IMPORTed target CUDNN::cudnn. include(FindPackageHandleStandardArgs) @@ -45,11 +46,8 @@ endif() find_library(CUDNN_LIBRARY_PATH ${CUDNN_LIBNAME} PATHS ${CUDNN_LIBRARY} PATH_SUFFIXES lib lib64 cuda/lib cuda/lib64 lib/x64) -# Get director from filename ${CUDNN_LIBRARY_PATH} -get_filename_component( - CUDNN_LIBRARY_PATH - "${CUDNN_LIBRARY_PATH}/.." ABSOLUTE -) +# Get directory from filename ${CUDNN_LIBRARY_PATH} +get_filename_component(CUDNN_LIBRARY_DIR "${CUDNN_LIBRARY_PATH}/.." ABSOLUTE) # This version check is from OpenCV repo: https://github.com/opencv/opencv/blob/master/cmake/FindCUDNN.cmake # extract version from the include @@ -80,4 +78,8 @@ find_package_handle_standard_args( VERSION_VAR CUDNN_VERSION ) +add_library(CUDNN::cudnn IMPORTED INTERFACE) +target_include_directories(CUDNN::cudnn SYSTEM INTERFACE "${CUDNN_INCLUDE_PATH}") +target_link_libraries(CUDNN::cudnn INTERFACE "${CUDNN_LIBRARY_PATH}") + mark_as_advanced(CUDNN_ROOT CUDNN_INCLUDE_DIR CUDNN_LIBRARY) diff --git a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt index a142d524b6..5652cdf715 100644 --- a/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt +++ b/hpvm/projects/hpvm-tensor-rt/CMakeLists.txt @@ -24,8 +24,8 @@ configure_file( # -- Default include directories set( INCLUDES - ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} - ${CUDNN_INCLUDE_PATH} + # Have to add these because of tensor_runtime.ll (see below) + ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} ${CUDNN_INCLUDE_PATH} ./tensor_runtime/include ${CMAKE_CURRENT_BINARY_DIR}/tensor_runtime/include ./dnn_sources/include ) @@ -39,9 +39,16 @@ add_library(soc_simulator SHARED soc_simulator/promise_timing_model.cpp) target_include_directories(soc_simulator PUBLIC soc_simulator/) # -- Link libraries -find_package(OpenMP REQUIRED) # Provides ${OpenMP_CXX_FLAGS} -set(LINK_DIR CUDNN_LIBRARY_PATH) -set(LINK_LIBS gpu_profiler soc_simulator stdc++fs cudnn curand cublas) +find_package(OpenMP REQUIRED) # Provides ${OpenMP_CXX_FLAGS} and OpenMP::OpenMP_CXX +# This will use the CUDA found by CUDA language support in the root CMake, +# but it exports the CUDA::* targets (used below) so we can freely add libraries to link to. +find_package(CUDAToolkit REQUIRED) +set( + LINK_LIBS + gpu_profiler soc_simulator + CUDA::cublas CUDA::curand CUDNN::cudnn + OpenMP::OpenMP_CXX +) if(USE_GFLAGS) list(APPEND LINK_LIBS gflags) endif() @@ -77,15 +84,14 @@ endforeach() # -- Adding tensor_runtime targets function(add_tensor_runtime target_name) add_library(${target_name} SHARED ${RUNTIME_SRCS}) - set_property(TARGET ${target_name} PROPERTY CUDA_ARCHITECTURES 60) + set_target_properties(${target_name} PROPERTIES CUDA_ARCHITECTURES 60) target_compile_options( ${target_name} PRIVATE --expt-relaxed-constexpr -maxrregcount 32 -Xcompiler=${OpenMP_CXX_FLAGS} $<$<CONFIG:DEBUG>:-lineinfo -Xcompiler=-ggdb> ) target_include_directories(${target_name} PUBLIC ${INCLUDES}) - target_link_directories(${target_name} PUBLIC ${LINK_DIR}) - target_link_libraries(${target_name} PUBLIC ${LINK_LIBS} ${OpenMP_CXX_FLAGS}) + target_link_libraries(${target_name} PUBLIC ${LINK_LIBS}) target_compile_definitions(${target_name} PRIVATE ${DEFS} ${ARGN}) endfunction(add_tensor_runtime) diff --git a/hpvm/tools/py-approxhpvm/CMakeLists.txt b/hpvm/tools/py-approxhpvm/CMakeLists.txt index f93f96dd05..d751823a08 100644 --- a/hpvm/tools/py-approxhpvm/CMakeLists.txt +++ b/hpvm/tools/py-approxhpvm/CMakeLists.txt @@ -21,8 +21,8 @@ set( LLVMClearDFG LLVMGenHPVM ) -# CUDA_TOOLKIT_ROOT_DIR and CUDNN_LIBRARY_PATH has been defined globally -set(CUDNN_DIR ${CUDNN_LIBRARY_PATH}) +# CUDA_TOOLKIT_ROOT_DIR and CUDNN_LIBRARY_DIR has been defined globally +set(CUDNN_DIR ${CUDNN_LIBRARY_DIR}) # First resolve all `@symbol@` by configuring the file configure_file(main.py.in ${CMAKE_CURRENT_BINARY_DIR}/main.py.conf) # Then resolve all generator expressions we configured into the previous file -- GitLab