# ######################################################################## # Copyright 2016-2019 Advanced Micro Devices, Inc. # ######################################################################## # The ROCm platform requires Ubuntu 16.04 or Fedora 24, which has cmake 3.5 cmake_minimum_required( VERSION 3.5 ) add_definitions(-D_ROCBLAS_INTERNAL_BFLOAT16_) # Consider removing this in the future # This should appear before the project command, because it does not use FORCE if( WIN32 ) set( CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/package" CACHE PATH "Install path prefix, prepended onto install directories" ) else( ) set( CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE PATH "Install path prefix, prepended onto install directories" ) endif( ) # This has to be initialized before the project() command appears # Set the default of CMAKE_BUILD_TYPE to be release, unless user specifies with -D. MSVC_IDE does not use CMAKE_BUILD_TYPE if( NOT DEFINED CMAKE_CONFIGURATION_TYPES AND NOT DEFINED CMAKE_BUILD_TYPE ) set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." ) endif() # This project may compile dependencies for clients project( rocblas-clients LANGUAGES CXX ) if(OS_ID_rhel OR OS_ID_centos OR OS_ID_sles) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp=libgomp -pthread") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -pthread") endif() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) include( build-options ) # This option only works for make/nmake and the ninja generators, but no reason it shouldn't be on all the time # This tells cmake to create a compile_commands.json file that can be used with clang tooling or vim set( CMAKE_EXPORT_COMPILE_COMMANDS ON ) if( NOT TARGET rocblas ) find_package( rocblas REQUIRED CONFIG PATHS /opt/rocm/rocblas ${CMAKE_INSTALL_PREFIX}/rocblas) endif( ) # Hip headers required of all clients; clients use hip to allocate device memory list( APPEND CMAKE_PREFIX_PATH /opt/rocm ${CMAKE_INSTALL_PREFIX}) find_package( hip REQUIRED CONFIG PATHS ${CMAKE_PREFIX_PATH} ) # Quietly look for CUDA, but if not found it's not an error # The presense of hip is not sufficient to determine if we want a rocm or cuda backend find_package( CUDA QUIET ) if( BUILD_CLIENTS_SAMPLES ) add_subdirectory( samples ) endif( ) if( BUILD_CLIENTS_BENCHMARKS ) add_subdirectory( benchmarks ) endif( ) if( BUILD_CLIENTS_TESTS ) add_subdirectory( gtest ) endif( ) set( ROCBLAS_COMMON "${PROJECT_BINARY_DIR}/staging/rocblas_common.yaml") add_custom_command( OUTPUT "${ROCBLAS_COMMON}" COMMAND ${CMAKE_COMMAND} -E copy include/rocblas_common.yaml "${ROCBLAS_COMMON}" DEPENDS include/rocblas_common.yaml WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) set( ROCBLAS_TEMPLATE "${PROJECT_BINARY_DIR}/staging/rocblas_template.yaml") add_custom_command( OUTPUT "${ROCBLAS_TEMPLATE}" COMMAND ${CMAKE_COMMAND} -E copy include/rocblas_template.yaml "${ROCBLAS_TEMPLATE}" DEPENDS include/rocblas_template.yaml WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) set( ROCBLAS_GENTEST "${PROJECT_BINARY_DIR}/staging/rocblas_gentest.py") add_custom_command( OUTPUT "${ROCBLAS_GENTEST}" COMMAND ${CMAKE_COMMAND} -E copy common/rocblas_gentest.py "${ROCBLAS_GENTEST}" DEPENDS common/rocblas_gentest.py WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" ) add_custom_target( rocblas-common DEPENDS "${ROCBLAS_COMMON}" "${ROCBLAS_TEMPLATE}" "${ROCBLAS_GENTEST}" ) # TODO: move to rocm-cmake include(CMakeParseArguments) function(rocm_create_package_clients) set(options) set(oneValueArgs LIB_NAME DESCRIPTION SECTION MAINTAINER VERSION) set(multiValueArgs DEPENDS) cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) string(CONCAT PACKAGE_NAME ${PARSE_LIB_NAME} "-clients-" ${PARSE_VERSION} "-Linux.deb") string(CONCAT DEB_CONTROL_FILE_CONTENT "Package: " ${PARSE_LIB_NAME} "-clients" "\nVersion: " ${PARSE_VERSION} "\nSection: " ${PARSE_SECTION} "\nPriority: optional" "\nArchitecture: amd64" "\nMaintainer: " ${PARSE_MAINTAINER} "\nDescription: " ${PARSE_DESCRIPTION} "\nDepends: " ${PARSE_LIB_NAME} "(>=" ${PARSE_VERSION} ")\n\n") if(EXISTS "${PROJECT_BINARY_DIR}/package") file(REMOVE_RECURSE "${PROJECT_BINARY_DIR}/package") endif() file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/package/opt/rocm/${PARSE_LIB_NAME}/bin") file(WRITE "${PROJECT_BINARY_DIR}/package/DEBIAN/control" ${DEB_CONTROL_FILE_CONTENT}) add_custom_target(package_clients COMMAND ${CMAKE_COMMAND} -E remove -f "${PROJECT_BINARY_DIR}/package/opt/rocm/${PARSE_LIB_NAME}/bin/*" COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_BINARY_DIR}/staging/*" "${PROJECT_BINARY_DIR}/package/opt/rocm/${PARSE_LIB_NAME}/bin" COMMAND dpkg -b "${PROJECT_BINARY_DIR}/package/" ${PACKAGE_NAME}) endfunction(rocm_create_package_clients) if (BUILD_CLIENTS_SAMPLES OR BUILD_CLIENTS_TESTS OR BUILD_CLIENTS_SELFTEST OR BUILD_CLIENTS_RIDER) rocm_create_package_clients(LIB_NAME rocblas DESCRIPTION "Radeon Open Compute BLAS library" MAINTAINER "rocblas-maintainer@amd.com>" SECTION "dev" VERSION ${rocblas_VERSION}) endif()