Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 26 additions & 14 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
with:
access_token: ${{ github.token }}
lint:
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v1
- name: Set up Python 3.10
Expand All @@ -32,15 +32,17 @@ jobs:
max-parallel: 4
matrix:
platform:
- ubuntu-20.04
- macos-12
- windows-2019
- ubuntu-24.04
- windows-2022
cmake-version:
- 3.20.0
- 3.10.2
- 3.31.0
- 3.22.1
- 3.16.3
# There are problems with nmake and ninja with this version of cmake
# on windows
exclude:
- platform: windows-2019
cmake-version: 3.10.2
- platform: windows-2022
cmake-version: 3.16.3

steps:
- uses: actions/checkout@v1
Expand All @@ -61,12 +63,22 @@ jobs:
uses: ssciwr/doxygen-install@v1
with:
version: "1.10.0"
- name: Run tests
- name: Setup git
run: |
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
cmake --version
cget build --test
cget build -T doc
cget build -Cy --test -DROCM_CMAKE_GENERATOR=Ninja
cget build -T doc

- name: Cmake version
run: cmake --version

- name: Run tests (default generator)
run: cget build --test

- name: Build docs (default generator)
run: cget build -T doc

- name: Run tests (Ninja generator)
run: cget build -Cy --test -DROCM_CMAKE_GENERATOR=Ninja

- name: Build docs (Ninja generator)
run: cget build -T doc
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright (C) 2017 Advanced Micro Devices, Inc.
################################################################################

cmake_minimum_required (VERSION 3.6)
cmake_minimum_required (VERSION 3.6...3.31.0)

set(CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE PATH "")

Expand Down
24 changes: 21 additions & 3 deletions share/rocmcmakebuildtools/cmake/ROCMCheckTargetIds.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ function(rocm_check_target_ids VARIABLE)
foreach(_target_id ${PARSE_TARGETS})
_rocm_sanitize_target_id("${_target_id}" _result_var)
set(_result_var "COMPILER_HAS_TARGET_ID_${_result_var}")
set(CMAKE_REQUIRED_LINK_OPTIONS "--hip-link")
check_cxx_compiler_flag("-xhip --offload-arch=${_target_id}" "${_result_var}")
if(${_result_var})
list(APPEND _supported_target_ids "${_target_id}")
Expand All @@ -33,9 +34,26 @@ function(_rocm_sanitize_target_id TARGET_ID VARIABLE)
# CMake defines a preprocessor macro with this value, so it must be a valid C identifier
# Handle + and - for xnack and sramecc so that e.g. xnack+ and xnack- doesn't get folded to
# the same string by MAKE_C_IDENTIFIER
string(REPLACE "_" "__" TARGET_ID "${TARGET_ID}")
string(REPLACE "+" "_on" TARGET_ID "${TARGET_ID}")
string(REPLACE "-" "_off" TARGET_ID "${TARGET_ID}")

# Target ID syntax:
# <target-id> ::== <processor> ( ":" <target-feature> ( "+" | "-" ) )*

# split target id by colon into a list of components
string(REPLACE ":" ";" _components "${TARGET_ID}")
list(GET _components 0 _processor)
list(REMOVE_AT _components 0)
# remove '-' from processor name
string(REPLACE "-" "_" _processor "${_processor}")
if(_components)
# remove '+' or '-' from target features
string(REPLACE "+" "_on" _components "${_components}")
string(REPLACE "-" "_off" _components "${_components}")
# join components with a colon
string(REPLACE ";" ":" TARGET_ID "${_processor}:${_components}")
else()
set(TARGET_ID "${_processor}")
endif()

string(MAKE_C_IDENTIFIER "${TARGET_ID}" TARGET_ID)
set(${VARIABLE} "${TARGET_ID}" PARENT_SCOPE)
endfunction()
28 changes: 15 additions & 13 deletions share/rocmcmakebuildtools/cmake/ROCMChecks.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,30 @@ function(rocm_check_toolchain_var var access value list_file)
set(message_type WARNING)
set(message_title "ROCMChecks WARNING")
endif()
if(access STREQUAL "MODIFIED_ACCESS")
set(cmake_module Off)
get_filename_component(base "${list_file}" DIRECTORY)
# Skip warning in cmake's built-in modules
if("${base}" STREQUAL "${CMAKE_ROOT}/Modules")
set(cmake_module On)
elseif("${base}" MATCHES ".*/CMakeFiles/${CMAKE_VERSION}$")
set(cmake_module On)
endif()
if(NOT cmake_module)
message( "
if(ROCM_WARN_TOOLCHAIN_VAR OR ROCM_ERROR_TOOLCHAIN_VAR)
if(access STREQUAL "MODIFIED_ACCESS")
set(cmake_module Off)
get_filename_component(base "${list_file}" DIRECTORY)
# Skip warning in cmake's built-in modules
if("${base}" STREQUAL "${CMAKE_ROOT}/Modules")
set(cmake_module On)
elseif("${base}" MATCHES ".*/CMakeFiles/${CMAKE_VERSION}$")
set(cmake_module On)
endif()
if(NOT cmake_module)
message( "
*******************************************************************************
*------------------------------- ${message_title} --------------------------*
Options and properties should be set on a cmake target where possible. The
variable '${var}' may be set by the cmake toolchain, either by
calling 'cmake -D${var}=\"${value}\"'
or set in a toolchain file and added with
'cmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-file>'. ROCMChecks now calling:")
message(${message_type} "'${var}' is set at ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt:<line#> shown below:")
message( "*-----------------------------------------------------------------------------*
message(${message_type} "'${var}' is set at ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt:<line#> below:")
message( "*-----------------------------------------------------------------------------*
*******************************************************************************
")
endif()
endif()
endif()
endfunction()
Expand Down
38 changes: 21 additions & 17 deletions share/rocmcmakebuildtools/cmake/ROCMClangTidy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -192,24 +192,26 @@ function(rocm_clang_tidy_check TARGET)
add_custom_target(tidy-target-${TARGET})
foreach(SOURCE ${SOURCES})
if(NOT "${SOURCE}" MATCHES "(h|hpp|hxx)$")
string(MAKE_C_IDENTIFIER "${SOURCE}" tidy_file)
get_filename_component(SRC_ABS ${SOURCE} ABSOLUTE)
string(FIND ${SRC_ABS} ${CMAKE_CURRENT_BINARY_DIR} BINARY_IDX)
if(BINARY_IDX EQUAL -1)
set(tidy_file_prefix "s")
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
else()
set(tidy_file_prefix "b")
set(ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
get_filename_component(SRC_PATH ${SRC_ABS} DIRECTORY)
file(RELATIVE_PATH REL_PATH ${ROOT_DIR} ${SRC_PATH})
get_filename_component(BASE_SOURCE_NAME ${SOURCE} NAME_WE)
if(REL_PATH)
set(BASE_SOURCE ${REL_PATH}/${BASE_SOURCE_NAME})
else()
set(BASE_SOURCE ${BASE_SOURCE_NAME})
endif()
string(MAKE_C_IDENTIFIER "${tidy_file_prefix}/${BASE_SOURCE}" tidy_file)
set(tidy_target tidy-target-${TARGET}-${tidy_file})
if(CLANG_TIDY_CACHE_SIZE GREATER 0)
get_filename_component(SRC_ABS ${SOURCE} ABSOLUTE)
string(FIND ${SRC_ABS} ${CMAKE_CURRENT_BINARY_DIR} BINARY_IDX)
if(BINARY_IDX EQUAL -1)
set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
else()
set(ROOT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
get_filename_component(SRC_PATH ${SRC_ABS} DIRECTORY)
file(RELATIVE_PATH REL_PATH ${ROOT_DIR} ${SRC_PATH})
get_filename_component(BASE_SOURCE_NAME ${SOURCE} NAME_WE)
if(REL_PATH)
set(BASE_SOURCE ${REL_PATH}/${BASE_SOURCE_NAME})
else()
set(BASE_SOURCE ${BASE_SOURCE_NAME})
endif()
file(
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${tidy_target}.cmake
"
Expand All @@ -236,7 +238,9 @@ function(rocm_clang_tidy_check TARGET)
endif()
return()
endif()
string(REPLACE \"Preprocessing CXX source to \" \"\" PP_FILE \"\${PP_OUT}\")
# Filter out the message so it can handle verbose output
string(REGEX MATCH \"Preprocessing CXX source to [^\\n]*\\\\.i\\n\" PP_SELECT_OUT \"\${PP_OUT}\")
string(REPLACE \"Preprocessing CXX source to \" \"\" PP_FILE \"\${PP_SELECT_OUT}\")
string(STRIP \"\${PP_FILE}\" PP_FILE)
file(MD5 ${CMAKE_CURRENT_BINARY_DIR}/\${PP_FILE} PP_HASH)
execute_process(
Expand Down
2 changes: 1 addition & 1 deletion share/rocmcmakebuildtools/cmake/ROCMCppCheck.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ macro(rocm_enable_cppcheck)
# cmake-lint: disable=C0301
set(CPPCHECK_TEMPLATE_ARG
"--template=::warning file={file},line={line},col={column}::{severity}: {inconclusive:inconclusive: }{message} [{id}]"
"--template-location={file}:{line}:{column}: note: {info}\\\n{code}")
"--template-location={file}:{line}:{column}: note: {info}\\n{code}")
endif()

set(CPPCHECK_COMMAND
Expand Down
35 changes: 30 additions & 5 deletions share/rocmcmakebuildtools/cmake/ROCMCreatePackage.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -402,10 +402,6 @@ macro(rocm_create_package)

file(WRITE ${PROJECT_BINARY_DIR}/debian/postinst "")
file(WRITE ${PROJECT_BINARY_DIR}/debian/prerm "")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PROJECT_BINARY_DIR}/debian/postinst;${PROJECT_BINARY_DIR}/debian/prerm")
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/debian/postinst")
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${PROJECT_BINARY_DIR}/debian/prerm")

if(PARSE_LDCONFIG AND NOT ${ROCM_DISABLE_LDCONFIG})
set(LDCONFIG_DIR ${LIB_DIR})
if(PARSE_LDCONFIG_DIR)
Expand All @@ -417,7 +413,6 @@ macro(rocm_create_package)
echo \"${LDCONFIG_DIR}\" > /etc/ld.so.conf.d/${PARSE_NAME}.conf
ldconfig
")

file(
APPEND ${PROJECT_BINARY_DIR}/debian/prerm
"
Expand All @@ -433,10 +428,40 @@ macro(rocm_create_package)
if(PARSE_COMPONENTS)
rocm_set_comp_cpackvar(PARSE_HEADER_ONLY "${PARSE_SUFFIX}" "${PARSE_COMPONENTS}")
endif()

# Lintian Warning Fix: Enable post/pre scripts only if non empty
rocm_check_and_configure_script_files("${PROJECT_BINARY_DIR}/debian/prerm" "${PROJECT_BINARY_DIR}/debian/postinst")

# Create a CPack project config file for generator-specific settings
set(_cpack_project_config "${PROJECT_BINARY_DIR}/CPackProjectConfig.cmake")
file(WRITE "${_cpack_project_config}" "
# Generator-specific configuration for consistent archive paths
if(CPACK_GENERATOR MATCHES \"TGZ|ZIP\")
# Use relative paths for archive generators (consistent across platforms)
set(CPACK_SET_DESTDIR OFF)
set(CPACK_PACKAGING_INSTALL_PREFIX \"/\")
endif()
")
set(CPACK_PROJECT_CONFIG_FILE "${_cpack_project_config}")

include(CPack)
set(ROCM_PACKAGE_CREATED TRUE CACHE INTERNAL "Track whether rocm_create_package has been called.")
endmacro()

# Check script File Size and then configure
macro(rocm_check_and_configure_script_files PS_SCRIPT_FILE PR_SCRIPT_FILE)
file(SIZE ${PS_SCRIPT_FILE} _postinst_file_sz)
if(${_postinst_file_sz} GREATER 0)
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PS_SCRIPT_FILE}")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${PS_SCRIPT_FILE}")
endif()
file(SIZE ${PR_SCRIPT_FILE} _prerm_file_sz)
if(${_prerm_file_sz} GREATER 0)
set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${PR_SCRIPT_FILE}")
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA};${PR_SCRIPT_FILE}")
endif()
endmacro()

macro(rocm_setup_license HEADER_ONLY)
if(NOT CPACK_RESOURCE_FILE_LICENSE)
file(GLOB _license_files LIST_DIRECTORIES FALSE "${CMAKE_SOURCE_DIR}/LICENSE*")
Expand Down
2 changes: 1 addition & 1 deletion share/rocmcmakebuildtools/cmake/ROCMInstallTargets.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ function(rocm_export_targets)
set(CONFIG_NAME ${PACKAGE_NAME_LOWER}-config)
set(TARGET_VERSION ${PROJECT_VERSION})

if(PARSE_PREFIX)
if(PARSE_PREFIX AND NOT WIN32)
set(PREFIX_DIR ${PARSE_PREFIX})
set(PREFIX_ARG PREFIX ${PREFIX_DIR})
set(BIN_INSTALL_DIR ${PREFIX_DIR}/${CMAKE_INSTALL_BINDIR})
Expand Down
29 changes: 20 additions & 9 deletions share/rocmcmakebuildtools/cmake/ROCMTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,20 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -j ${
add_custom_target(tests COMMENT "Build all tests.")
add_dependencies(check tests)

add_custom_target(install-tests COMMAND ${CMAKE_COMMAND} -DCOMPONENT=tests -P ${CMAKE_BINARY_DIR}/cmake_install.cmake)
add_custom_target(install-tests COMMAND ${CMAKE_COMMAND} -DCOMPONENT=tests -DCMAKE_INSTALL_CONFIG_NAME=$<CONFIG> -P
${CMAKE_BINARY_DIR}/cmake_install.cmake)
add_dependencies(install-tests tests)

rocm_define_property(TARGET "ROCM_TEST_INSTALLDIR" "Install dir for tests")
macro(rocm_enable_test_package NAME)
message(STATUS "Enable test package ${NAME}")
set_target_properties(tests PROPERTIES ROCM_TEST_INSTALLDIR ${CMAKE_INSTALL_PREFIX}/libexec/installed-tests/${NAME})
set_target_properties(tests PROPERTIES ROCM_TEST_INSTALLDIR ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/${NAME})
rocm_package_setup_component(tests DEPENDS COMPONENT runtime)
rocm_defer(rocm_test_install_ctest)
endmacro()

if(POLICY CMP0079)
cmake_policy(SET CMP0079 OLD)
cmake_policy(SET CMP0079 NEW)
endif()

add_library(rocm_test_dependencies INTERFACE)
Expand Down Expand Up @@ -89,9 +90,9 @@ function(rocm_save_test)
set(COMMAND "")
foreach(ARG ${PARSE_COMMAND})
if(TARGET ${ARG})
set(INSTALL_PREFIX "$<${_rocm_test_genex_eval}:$<TARGET_PROPERTY:${ARG},ROCM_INSTALL_DIR>>")
string(APPEND COMMAND
" \"${INSTALL_PREFIX}/$<TARGET_FILE_NAME:${ARG}>\"")
set(INSTALL_PREFIX
"${CMAKE_INSTALL_PREFIX}/$<${_rocm_test_genex_eval}:$<TARGET_PROPERTY:${ARG},ROCM_INSTALL_DIR>>")
string(APPEND COMMAND " \"${INSTALL_PREFIX}/$<TARGET_FILE_NAME:${ARG}>\"")
else()
string(APPEND COMMAND " \"${ARG}\"")
endif()
Expand Down Expand Up @@ -159,7 +160,11 @@ function(rocm_add_test)
set(COMMAND_ARGS ${COMMAND})
list(REMOVE_AT COMMAND_ARGS 0)

if(ROCM_TEST_GDB AND TARGET ${COMMAND_EXE})
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)

if(NOT IS_MULTI_CONFIG
AND ROCM_TEST_GDB
AND TARGET ${COMMAND_EXE})
set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/gdb/test_${PARSE_NAME})
file(MAKE_DIRECTORY ${TEST_DIR})
if(NOT EXISTS ${TEST_DIR})
Expand Down Expand Up @@ -221,9 +226,15 @@ function(rocm_install_test)
set(INSTALL_PREFIX "$<TARGET_PROPERTY:tests,ROCM_TEST_INSTALLDIR>")
if(PARSE_TARGETS)
foreach(TARGET ${PARSE_TARGETS})
set_property(TARGET ${TARGET} APPEND PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib")
set_property(
TARGET ${TARGET}
APPEND
PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib")
# Adding RPATH to public tests to point to private libraries.
set_property(TARGET ${TARGET} APPEND PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib/${PROJECT_NAME}/lib")
set_property(
TARGET ${TARGET}
APPEND
PROPERTY INSTALL_RPATH "$ORIGIN/../../../../lib/${PROJECT_NAME}/lib")
endforeach()
install(
TARGETS ${PARSE_TARGETS}
Expand Down
10 changes: 6 additions & 4 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ macro(rocm_cmake_add_test_argument CMAKE_VAR VAR_TYPE DOC_STRING)
endif()
endmacro()

rocm_cmake_add_test_argument(CMAKE_MAKE_PROGRAM FILEPATH "Make program to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR STRING "Generator to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_INSTANCE STRING "Generator instance to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_PLATFORM STRING "Generator platform to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_TOOLSET STRING "Generator toolset to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_PREFIX_PATH PATH "Prefix path to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_PROGRAM_PATH PATH "Program path to relay to test projects")
if(ROCM_CMAKE_GENERATOR STREQUAL "${CMAKE_GENERATOR}")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_INSTANCE STRING "Generator instance to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_PLATFORM STRING "Generator platform to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_GENERATOR_TOOLSET STRING "Generator toolset to relay to test projects")
rocm_cmake_add_test_argument(CMAKE_MAKE_PROGRAM FILEPATH "Make program to relay to test projects")
endif()

function(rocm_cmake_create_test NAME TEST)
add_custom_target(${NAME} COMMAND ${CMAKE_COMMAND} ${TEST_ARGUMENTS} -P ${CMAKE_CURRENT_SOURCE_DIR}/test.cmake ${TEST} ${CMAKE_CURRENT_BINARY_DIR}/tmp/${NAME})
Expand Down
Loading