From 119de66cd28fa1125b1e8ab6376ddbafeab58191 Mon Sep 17 00:00:00 2001 From: Maneesh Gupta Date: Tue, 12 Apr 2016 12:42:12 +0530 Subject: [PATCH] Refactor and add support for nvcc path in cmake --- CMakeLists.txt | 158 +++++++++++++++++++++++++++++++------------------ 1 file changed, 101 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4041a5468..124295fbf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,40 +1,65 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8.3) project(hip_hcc) +############################# +# Setup version information +############################# set(HIP_VERSION_MAJOR "0") set(HIP_VERSION_MINOR "84") set(HIP_VERSION_PATCH "0") +############################# +# Configure variables +############################# +# Determine HIP_PLATFORM +if(NOT DEFINED HIP_PLATFORM) + if(NOT DEFINED ENV{HIP_PLATFORM}) + execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin/hipconfig --platform + OUTPUT_VARIABLE HIP_PLATFORM + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + set(HIP_PLATFORM $ENV{HIP_PLATFORM} CACHE STRING "HIP Platform") + endif() +endif() +message(STATUS "HIP Platform: " ${HIP_PLATFORM}) + +# If HIP_PLATFORM is hcc, we need HCC_HOME and HSA_PATH to be defined +if(HIP_PLATFORM STREQUAL "hcc") + # Determine HCC_HOME + if(NOT DEFINED HCC_HOME) + if(NOT DEFINED ENV{HCC_HOME}) + set(HCC_HOME "/opt/hcc" CACHE PATH "Path to which HCC has been installed") + else() + set(HCC_HOME $ENV{HCC_HOME} CACHE PATH "Path to which HCC has been installed") + endif() + endif() + if(IS_ABSOLUTE ${HCC_HOME} AND EXISTS ${HCC_HOME} AND IS_DIRECTORY ${HCC_HOME}) + message(STATUS "Looking for HCC in: " ${HCC_HOME}) + else() + message(FATAL_ERROR "Don't know where to find HCC. Please specify abolute path using -DHCC_HOME") + endif() + + # Determine HSA_PATH + if(NOT DEFINED HSA_PATH) + if(NOT DEFINED ENV{HSA_PATH}) + set(HSA_PATH "/opt/hsa" CACHE PATH "Path to which HSA runtime has been installed") + else() + set(HSA_PATH $ENV{HSA_PATH} CACHE PATH "Path to which HSA runtime has been installed") + endif() + endif() + if(IS_ABSOLUTE ${HSA_PATH} AND EXISTS ${HSA_PATH} AND IS_DIRECTORY ${HSA_PATH}) + message(STATUS "Looking for HSA runtime in: " ${HSA_PATH}) + else() + message(FATAL_ERROR "Don't know where to find HSA runtime. Please specify absolute path using -DHSA_PATH") + endif() +endif() + +# Set default build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif() -if(NOT DEFINED HCC_HOME) - if(NOT DEFINED ENV{HCC_HOME}) - set(HCC_HOME "/opt/hcc" CACHE PATH "Path to which HCC has been installed") - else() - set(HCC_HOME $ENV{HCC_HOME} CACHE PATH "Path to which HCC has been installed") - endif() -endif() -if(IS_ABSOLUTE ${HCC_HOME} AND EXISTS ${HCC_HOME} AND IS_DIRECTORY ${HCC_HOME}) - message(STATUS "Looking for HCC in: " ${HCC_HOME}) -else() - message(FATAL_ERROR "Don't know where to find HCC. Please specify abolute path using -DHCC_HOME") -endif() - -if(NOT DEFINED HSA_PATH) - if(NOT DEFINED ENV{HSA_PATH}) - set(HSA_PATH "/opt/hsa" CACHE PATH "Path to which HSA runtime has been installed") - else() - set(HSA_PATH $ENV{HSA_PATH} CACHE PATH "Path to which HSA runtime has been installed") - endif() -endif() -if(IS_ABSOLUTE ${HSA_PATH} AND EXISTS ${HSA_PATH} AND IS_DIRECTORY ${HSA_PATH}) - message(STATUS "Looking for HSA runtime in: " ${HSA_PATH}) -else() - message(FATAL_ERROR "Don't know where to find HSA runtime. Please specify absolute path using -DHSA_PATH") -endif() - +# Determine HIP install path if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local") if(CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "Installation path for HIP" FORCE) @@ -50,51 +75,70 @@ else() message(FATAL_ERROR "Don't know where to install HIP. Please specify absolute path using -DCMAKE_INSTALL_PREFIX") endif() -include_directories(${PROJECT_SOURCE_DIR}/include) - -set(CMAKE_CXX_COMPILER "${HCC_HOME}/bin/hcc") -set(CMAKE_C_COMPILER "${HCC_HOME}/bin/hcc") - -set(CMAKE_CXX_FLAGS " -hc -I${HCC_HOME}/include -I${HSA_PATH}/include -stdlib=libc++ ") -set(CMAKE_C_FLAGS " -hc -I${HCC_HOME}/include -I${HSA_PATH}/include -stdlib=libc++ ") - -set(SOURCE_FILES src/device_util.cpp -src/hip_hcc.cpp -src/hip_device.cpp -src/hip_error.cpp -src/hip_event.cpp -src/hip_memory.cpp -src/hip_peer.cpp -src/hip_stream.cpp -src/staging_buffer.cpp) - +# Set if we need to build shared or static library if(NOT DEFINED ENV{HIP_USE_SHARED_LIBRARY}) set(HIP_USE_SHARED_LIBRARY 0) else() set(HIP_USE_SHARED_LIBRARY $ENV{HIP_USE_SHARED_LIBRARY}) endif() -#add_library(hip_hcc STATIC ${SOURCE_FILES}) -if(${HIP_USE_SHARED_LIBRARY} EQUAL 1) - add_library(hip_hcc SHARED ${SOURCE_FILES}) -else() - add_library(hip_hcc OBJECT ${SOURCE_FILES}) +############################# +# Build steps +############################# +# Build hip_hcc if platform is hcc +if(HIP_PLATFORM STREQUAL "hcc") + include_directories(${PROJECT_SOURCE_DIR}/include) + + set(CMAKE_CXX_COMPILER "${HCC_HOME}/bin/hcc") + set(CMAKE_C_COMPILER "${HCC_HOME}/bin/hcc") + + set(CMAKE_CXX_FLAGS " -hc -I${HCC_HOME}/include -I${HSA_PATH}/include -stdlib=libc++ ") + set(CMAKE_C_FLAGS " -hc -I${HCC_HOME}/include -I${HSA_PATH}/include -stdlib=libc++ ") + + set(SOURCE_FILES src/device_util.cpp + src/hip_hcc.cpp + src/hip_device.cpp + src/hip_error.cpp + src/hip_event.cpp + src/hip_memory.cpp + src/hip_peer.cpp + src/hip_stream.cpp + src/staging_buffer.cpp) + + if(${HIP_USE_SHARED_LIBRARY} EQUAL 1) + add_library(hip_hcc SHARED ${SOURCE_FILES}) + else() + #add_library(hip_hcc STATIC ${SOURCE_FILES}) + add_library(hip_hcc OBJECT ${SOURCE_FILES}) + endif() + endif() -#install(TARGETS hip_hcc DESTINATION lib) -if(${HIP_USE_SHARED_LIBRARY} EQUAL 1) - install(TARGETS hip_hcc DESTINATION lib) -else() - install(DIRECTORY ${PROJECT_BINARY_DIR}/CMakeFiles/hip_hcc.dir/src/ DESTINATION lib) +############################# +# Install steps +############################# +# Install hip_hcc if platform is hcc +if(HIP_PLATFORM STREQUAL "hcc") + if(${HIP_USE_SHARED_LIBRARY} EQUAL 1) + install(TARGETS hip_hcc DESTINATION lib) + else() + #install(TARGETS hip_hcc DESTINATION lib) + install(DIRECTORY ${PROJECT_BINARY_DIR}/CMakeFiles/hip_hcc.dir/src/ DESTINATION lib) + endif() endif() -set(EXECUTE_COMMAND test ${CMAKE_INSTALL_PREFIX} -ef ${CMAKE_CURRENT_SOURCE_DIR}) -execute_process(COMMAND ${EXECUTE_COMMAND} RESULT_VARIABLE INSTALL_SOURCE) + +# Install src, bin, include if necessary +execute_process(COMMAND test ${CMAKE_INSTALL_PREFIX} -ef ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE INSTALL_SOURCE) if(NOT ${INSTALL_SOURCE} EQUAL 0) install(DIRECTORY src DESTINATION .) install(DIRECTORY bin DESTINATION . USE_SOURCE_PERMISSIONS) install(DIRECTORY include DESTINATION .) endif() +############################# +# Packaging steps +############################# set(CPACK_SET_DESTDIR TRUE) set(CPACK_INSTALL_PREFIX "/opt/rocm/hip") set(CPACK_PACKAGE_NAME "hip")