932c83fe8f
Change-Id: Id7d9cd6076c6f1670eedbea06a6976c05e391520
223 lines
7.3 KiB
CMake
223 lines
7.3 KiB
CMake
# Copyright (C) 2017-2021 Advanced Micro Devices, Inc. All Rights Reserved.
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
# THE SOFTWARE.
|
|
|
|
cmake_minimum_required(VERSION 3.5.1)
|
|
|
|
if (POLICY CMP0048)
|
|
cmake_policy(SET CMP0048 NEW)
|
|
set(PROJ_VERSION VERSION 1.5.0)
|
|
endif()
|
|
|
|
project(opencl)
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
#example command:
|
|
# cmake -DCMAKE_PREFIX_PATH=/path/to/ROCclr/build/or/install ..
|
|
|
|
if(NOT DEFINED OPENCL_ICD_DIR)
|
|
set(OPENCL_ICD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../OpenCL-ICD-Loader")
|
|
endif()
|
|
|
|
if(NOT DEFINED OPENCL_ICD_HEADERS)
|
|
set(OPENCL_ICD_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/../OpenCL-Headers")
|
|
endif()
|
|
|
|
set(OPENCL_ICD_LOADER_HEADERS_DIR "${OPENCL_ICD_HEADERS}" CACHE PATH "")
|
|
|
|
set(OPENCL_ICD_LOADER_HEADERS_DIR_INTERNAL "${CMAKE_CURRENT_SOURCE_DIR}/khronos/headers/opencl2.2" CACHE PATH "")
|
|
option(BUILD_SHARED_LIBS "Build shared libs" ON)
|
|
|
|
#set a name for icd file
|
|
set(OPENCL_AMD_ICD_FILE "amdocl64.icd")
|
|
if (DEFINED ROCM_PATCH_VERSION)
|
|
set(OPENCL_AMD_ICD_FILE "amdocl64_${ROCM_PATCH_VERSION}.icd")
|
|
endif()
|
|
|
|
# FIXME: Handling legacy custom boolean matching "yes" or "no"
|
|
if(DEFINED USE_COMGR_LIBRARY)
|
|
if(${USE_COMGR_LIBRARY} MATCHES "yes")
|
|
set(USE_COMGR_LIBRARY ON)
|
|
if(DEFINED LINK_COMGR_STATIC)
|
|
if(${LINK_COMGR_STATIC} MATCHES "yes")
|
|
set(LINK_COMGR_STATIC ON)
|
|
elseif(${LINK_COMGR_STATIC} MATCHES "no")
|
|
set(LINK_COMGR_STATIC OFF)
|
|
endif()
|
|
endif()
|
|
elseif(${USE_COMGR_LIBRARY} MATCHES "no")
|
|
set(USE_COMGR_LIBRARY OFF)
|
|
endif()
|
|
endif()
|
|
|
|
option(USE_COMGR_LIBRARY "Use comgr library" ON)
|
|
option(LINK_COMGR_STATIC "Link comgr static library" OFF)
|
|
option(BUILD_TESTS "Enable building OpenCL tests" ON)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
|
|
MESSAGE(STATUS "LINK_COMGR_STATIC :${LINK_COMGR_STATIC}")
|
|
|
|
if(USE_COMGR_LIBRARY)
|
|
add_definitions(-DUSE_COMGR_LIBRARY)
|
|
if(NOT LINK_COMGR_STATIC)
|
|
add_definitions(-DCOMGR_DYN_DLL)
|
|
endif()
|
|
find_package(amd_comgr REQUIRED CONFIG
|
|
PATHS
|
|
/opt/rocm/
|
|
PATH_SUFFIXES
|
|
cmake/amd_comgr
|
|
lib/cmake/amd_comgr
|
|
)
|
|
MESSAGE(STATUS "Code Object Manager found at ${amd_comgr_DIR}.")
|
|
|
|
endif()
|
|
|
|
|
|
find_package(ROCclr REQUIRED CONFIG PATHS ${ROCclr_DIR} ${LIBROCclr_STATIC_DIR})
|
|
|
|
add_subdirectory(${OPENCL_ICD_DIR} ${OPENCL_ICD_DIR}/build)
|
|
add_subdirectory(amdocl)
|
|
add_subdirectory(tools/clinfo)
|
|
add_subdirectory(tools/cltrace)
|
|
if(BUILD_TESTS)
|
|
add_subdirectory(tests/ocltst)
|
|
endif()
|
|
|
|
if(USE_COMGR_LIBRARY)
|
|
include_directories("$<TARGET_PROPERTY:amd_comgr,INTERFACE_INCLUDE_DIRECTORIES>")
|
|
endif()
|
|
|
|
# get date information based on UTC
|
|
# use the last two digits of year + week number + day in the week as OPENCL_VERSION_GITDATE
|
|
# use the commit date, instead of build date
|
|
# add xargs to remove strange trailing newline character
|
|
execute_process(COMMAND git show -s --format=@%ct
|
|
COMMAND xargs
|
|
COMMAND date -f - --utc +%y%U%w
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE OPENCL_VERSION_GITDATE
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
get_target_property(OPENCL_LIB_VERSION_MAJOR OpenCL SOVERSION)
|
|
get_target_property(OPENCL_LIB_VERSION_STRING OpenCL VERSION)
|
|
|
|
find_package(ROCM QUIET CONFIG PATHS /opt/rocm)
|
|
|
|
if(ROCM_FOUND)
|
|
include(ROCMSetupVersion)
|
|
rocm_setup_version( VERSION "2.0.0" )
|
|
else()
|
|
set(PROJECT_VERSION "2.0.0")
|
|
endif()
|
|
|
|
###--- Packaging ------------------------------------------------------------###
|
|
|
|
# MAIN package
|
|
install(PROGRAMS $<TARGET_FILE:clinfo>
|
|
DESTINATION bin
|
|
COMPONENT MAIN)
|
|
install(PROGRAMS $<TARGET_FILE:cltrace>
|
|
DESTINATION lib
|
|
COMPONENT MAIN)
|
|
install(PROGRAMS $<TARGET_FILE:amdocl64>
|
|
DESTINATION lib
|
|
COMPONENT MAIN)
|
|
install(PROGRAMS $<TARGET_FILE:OpenCL>
|
|
DESTINATION lib
|
|
COMPONENT MAIN)
|
|
install(PROGRAMS $<TARGET_SONAME_FILE:OpenCL>
|
|
DESTINATION lib
|
|
COMPONENT MAIN)
|
|
|
|
# DEV package
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/khronos/headers/opencl2.2/CL"
|
|
DESTINATION include
|
|
COMPONENT DEV
|
|
USE_SOURCE_PERMISSIONS
|
|
PATTERN cl_d3d10.h EXCLUDE
|
|
PATTERN cl_d3d11.h EXCLUDE
|
|
PATTERN cl_dx9_media_sharing.h EXCLUDE
|
|
PATTERN cl_egl.h EXCLUDE)
|
|
install(PROGRAMS $<TARGET_LINKER_FILE:OpenCL>
|
|
DESTINATION lib
|
|
COMPONENT DEV)
|
|
|
|
add_custom_target(opencl ALL COMMAND echo "copying opencl lib from ${OPENCL_ICD_DIR}/build"
|
|
COMMAND cp ${OPENCL_ICD_DIR}/build/*.so* ${CMAKE_CURRENT_BINARY_DIR}/lib
|
|
WORKING_DIRECTORY ${BUILD_DIR}
|
|
DEPENDS amdocl64 OpenCL)
|
|
|
|
#############################
|
|
# Packaging steps
|
|
#############################
|
|
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm/opencl" CACHE PATH "Package Installation path for OpenCL")
|
|
|
|
#ROCM_PATH is needed to create symlink of libraries
|
|
if (NOT DEFINED ROCM_PATH )
|
|
string(REPLACE "/opencl" "" ROCM_PATH ${CPACK_PACKAGING_INSTALL_PREFIX})
|
|
endif ()
|
|
message (STATUS "ROCM Installation path(ROCM_PATH): ${ROCM_PATH}")
|
|
|
|
# Package: rocm-opencl
|
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-opencl)
|
|
configure_file(packaging/rocm-opencl.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
|
configure_file(packaging/rocm-opencl.postinst ${BUILD_DIR}/postinst @ONLY)
|
|
configure_file(packaging/rocm-opencl.prerm ${BUILD_DIR}/prerm @ONLY)
|
|
configure_file(packaging/rocm-opencl.rpm_post ${BUILD_DIR}/rpm_post @ONLY)
|
|
configure_file(packaging/rocm-opencl.rpm_postun ${BUILD_DIR}/rpm_postun @ONLY)
|
|
add_custom_target(pkg_rocm_opencl COMMAND ${CMAKE_COMMAND} .
|
|
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
|
COMMAND make package
|
|
COMMAND cp *.deb ${PROJECT_BINARY_DIR}
|
|
COMMAND cp *.rpm ${PROJECT_BINARY_DIR}
|
|
WORKING_DIRECTORY ${BUILD_DIR}
|
|
DEPENDS amdocl64 OpenCL)
|
|
|
|
# Package: rocm-opencl-dev
|
|
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/rocm-opencl-dev)
|
|
configure_file(packaging/rocm-opencl-dev.txt ${BUILD_DIR}/CMakeLists.txt @ONLY)
|
|
add_custom_target(pkg_rocm_opencl_dev COMMAND ${CMAKE_COMMAND} .
|
|
COMMAND rm -rf *.deb *.rpm *.tar.gz
|
|
COMMAND make package
|
|
COMMAND cp *.deb ${PROJECT_BINARY_DIR}
|
|
COMMAND cp *.rpm ${PROJECT_BINARY_DIR}
|
|
WORKING_DIRECTORY ${BUILD_DIR}
|
|
DEPENDS amdocl64 OpenCL)
|
|
|
|
# Package: all
|
|
if(POLICY CMP0037)
|
|
cmake_policy(PUSH)
|
|
cmake_policy(SET CMP0037 OLD)
|
|
endif()
|
|
|
|
add_custom_target(package
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
DEPENDS pkg_rocm_opencl pkg_rocm_opencl_dev)
|
|
if(POLICY CMP0037)
|
|
cmake_policy(POP)
|
|
endif()
|
|
|
|
|