Correct rocrtst cmake.

Generates symlinks exactly once.
Admits parallelism to code object compilation.
Adds proper dependency tracking.
Adds code object files to the packages.

Change-Id: If471961906f16a2ffdc6bf5f682a4e322fb38f3e


[ROCm/ROCR-Runtime commit: 402eae11b6]
Tento commit je obsažen v:
Sean Keely
2021-10-16 01:38:54 -05:00
rodič eabb4ba4b4
revize 3cfaebf4e8
+16 -17
Zobrazit soubor
@@ -170,10 +170,6 @@ set(KERNELS_DIR ${PROJECT_SOURCE_DIR}/kernels)
#
set(CMAKE_BUILD_TYPE ${BUILD_TYPE})
#
# Flag to enable / disable verbose output.
#
set(CMAKE_VERBOSE_MAKEFILE on)
#
# Compiler pre-processor definitions.
#
# Define MACRO "DEBUG" if build type is "Debug"
@@ -260,42 +256,41 @@ include_directories(${ROCRTST_ROOT})
include_directories(${ROCRTST_ROOT}/gtest/include)
include_directories(${ROCM_SMI_INC_DIR})
# Custom command set for code objects.
set (HSACO_TARG_LIST "")
# Use this function to build any samples that have kernels to be built
function(build_kernel S_NAME TARG_DEV)
set(KERNEL_DIR ${PROJECT_BINARY_DIR}/${TARG_DEV})
set(SNAME_KERNEL "${S_NAME}_kernels.hsaco")
set(TARG_NAME "${S_NAME}_hsaco.${TARG_DEV}")
set(HSACO_TARG_LIST ${HSACO_TARG_LIST} ${TARG_NAME}
CACHE INTERNAL HSA_TARG_LIST)
set(HSACO_TARG_LIST ${HSACO_TARG_LIST} "${KERNEL_DIR}/${SNAME_KERNEL}" PARENT_SCOPE)
separate_arguments(CLANG_ARG_LIST UNIX_COMMAND
"-x cl -target amdgcn-amd-amdhsa -include ${OPENCL_INC_DIR}opencl-c.h -mcpu=${TARG_DEV} ${BITCODE_ARGS} -cl-std=CL${OPENCL_VER} ${CL_FILE_LIST} -o ${KERNEL_DIR}/${SNAME_KERNEL}")
add_custom_target("${TARG_NAME}" ${CLANG} ${CLANG_ARG_LIST} COMMAND
${CMAKE_COMMAND} -E create_symlink
"../${ROCRTST}" "${KERNEL_DIR}/${ROCRTST}"
COMMENT "BUILDING KERNEL..."
VERBATIM)
add_custom_command(OUTPUT "${KERNEL_DIR}/${SNAME_KERNEL}" COMMAND ${CLANG} ${CLANG_ARG_LIST} DEPENDS ${CL_FILE_LIST} ${CLANG} COMMENT "BUILDING ${KERNEL_DIR}/${SNAME_KERNEL}" VERBATIM)
endfunction(build_kernel)
function(build_sample_for_devices S_NAME)
set(HSACO_TARG_LIST PARENT_SCOPE)
foreach(t ${TARGET_DEVICES})
build_kernel(${S_NAME} ${t})
endforeach(t)
set(HSACO_TARG_LIST ${HSACO_TARG_LIST} PARENT_SCOPE)
endfunction(build_sample_for_devices)
# Make directories for each possible target device
# List of symlinks per directory
set(ROCRTST_LINKS_LIST "")
foreach(td ${TARGET_DEVICES})
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/${td})
add_custom_command(OUTPUT "${PROJECT_BINARY_DIR}/${td}/${ROCRTST}" COMMAND ${CMAKE_COMMAND} -E create_symlink "../${ROCRTST}" "${td}/${ROCRTST}" COMMENT "BUILDING ${td}/${ROCRTST}" VERBATIM)
set(ROCRTST_LINKS_LIST ${ROCRTST_LINKS_LIST} "${PROJECT_BINARY_DIR}/${td}/${ROCRTST}")
install ( DIRECTORY ${PROJECT_BINARY_DIR}/${td} DESTINATION bin )
endforeach(td)
######################
# Kernel Build Section
######################
set (HSACO_TARG_LIST "" CACHE INTERNAL HSACO_TARG_LIST)
set(KERN_SUFFIX "kernels.hsaco")
# Check if device-libs bitcode is following old or new layout
@@ -362,7 +357,11 @@ add_executable(${ROCRTST} ${performanceSources} ${functionalSources} ${negativeS
target_link_libraries(${ROCRTST} ${ROCRTST_LIBS} c stdc++ dl pthread rt numa ${CMAKE_CURRENT_SOURCE_DIR}/../../thirdparty/libhwloc.so.5)
add_custom_target(rocrtst_kernels DEPENDS ${HSACO_TARG_LIST})
#Build kernels
add_custom_target(rocrtst_kernels ALL DEPENDS ${HSACO_TARG_LIST})
#Build symlinks
add_custom_target(rocrtst_links ALL DEPENDS ${ROCRTST_LINKS_LIST} )
## Set RUNPATH to pickup local copy of hwloc
set_property(TARGET ${ROCRTST} PROPERTY INSTALL_RPATH "$ORIGIN;$ORIGIN/thirdparty;$ORIGIN/../lib/rocrtst/thirdparty" )