From cbbc80cf1e0a8a3883da3f904d01ef4a71ec6aed Mon Sep 17 00:00:00 2001 From: Lauren Wrubleski Date: Thu, 9 Nov 2023 16:36:26 -0700 Subject: [PATCH 1/3] Add basic scoped suppression of ROCMChecks --- .../cmake/ROCMChecks.cmake | 55 +++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake index f5ecfce5..1abf5444 100644 --- a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake +++ b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake @@ -16,7 +16,20 @@ if(DEFINED ENV{ROCMCHECKS_ERROR_TOOLCHAIN_VAR}) set(ROCM_ERROR_TOOLCHAIN_VAR $ENV{ROCMCHECKS_ERROR_TOOLCHAIN_VAR}) endif() +define_property(GLOBAL PROPERTY ROCMChecksSuppressed INHERITED + BRIEF_DOCS "Property to indicate suppression of ROCMChecks." + FULL_DOCS "Property to indicate suppression of ROCMChecks." +) +define_property(GLOBAL PROPERTY ROCMChecksWatched + BRIEF_DOCS "Property recording variables watched by ROCMChecks." + FULL_DOCS "Property recording variables watched by ROCMChecks." +) + function(rocm_check_toolchain_var var access value list_file) + get_property(suppressed GLOBAL PROPERTY ROCMChecksSuppressed) + if ((NOT "${suppressed}" STREQUAL "") AND suppressed) + return() + endif() set(message_type STATUS) if(ROCM_ERROR_TOOLCHAIN_VAR) set(message_type SEND_ERROR) @@ -50,17 +63,39 @@ function(rocm_check_toolchain_var var access value list_file) endif() endif() endfunction() + +function(rocm_variable_watch VAR) + set_property(GLOBAL APPEND PROPERTY ROCMChecksWatched "${VAR}") + variable_watch("${VAR}" rocm_check_toolchain_var) +endfunction + +function(add_subdirectory_unchecked source_directory) + get_property(watched_vars GLOBAL PROPERTY ROCMChecksWatched) + set_property(GLOBAL PROPERTY ROCMChecksSuppressed "ON") + foreach(var IN_LISTS watched_vars) + set(_rocmchecks_restore_${var} "${var}" CACHE INTERNAL) + endforeach() + add_subdirectory(${ARGV}) + foreach(var IN_LISTS watched_vars) + if (DEFINED CACHE{${var}}) + set(${var} "$CACHE{_rocmchecks_restore_${var}}") + endif() + unset(_rocmchecks_restore_${var} CACHE) + endforeach() + set_property(GLOBAL PROPERTY ROCMChecksSuppressed "OFF") +endfunction() + if(UNIX AND (ROCM_WARN_TOOLCHAIN_VAR OR ROCM_ERROR_TOOLCHAIN_VAR)) foreach(LANG C CXX Fortran) - variable_watch(CMAKE_${LANG}_COMPILER rocm_check_toolchain_var) - variable_watch(CMAKE_${LANG}_FLAGS rocm_check_toolchain_var) - variable_watch(CMAKE_${LANG}_LINK_EXECUTABLE rocm_check_toolchain_var) - variable_watch(CMAKE_${LANG}_SIZEOF_DATA_PTR rocm_check_toolchain_var) - variable_watch(CMAKE_${LANG}_STANDARD_INCLUDE_DIRECTORIES rocm_check_toolchain_var) - variable_watch(CMAKE_${LANG}_STANDARD_LIBRARIES rocm_check_toolchain_var) + rocm_variable_watch(CMAKE_${LANG}_COMPILER) + rocm_variable_watch(CMAKE_${LANG}_FLAGS) + rocm_variable_watch(CMAKE_${LANG}_LINK_EXECUTABLE) + rocm_variable_watch(CMAKE_${LANG}_SIZEOF_DATA_PTR) + rocm_variable_watch(CMAKE_${LANG}_STANDARD_INCLUDE_DIRECTORIES) + rocm_variable_watch(CMAKE_${LANG}_STANDARD_LIBRARIES) endforeach() - variable_watch(CMAKE_EXE_LINKER_FLAGS rocm_check_toolchain_var) - variable_watch(CMAKE_MODULE_LINKER_FLAGS rocm_check_toolchain_var) - variable_watch(CMAKE_SHARED_LINKER_FLAGS rocm_check_toolchain_var) - variable_watch(CMAKE_STATIC_LINKER_FLAGS rocm_check_toolchain_var) + rocm_variable_watch(CMAKE_EXE_LINKER_FLAGS) + rocm_variable_watch(CMAKE_MODULE_LINKER_FLAGS) + rocm_variable_watch(CMAKE_SHARED_LINKER_FLAGS) + rocm_variable_watch(CMAKE_STATIC_LINKER_FLAGS) endif() From 7ab09c9d7d8b477434f41835e4b42981d029a41b Mon Sep 17 00:00:00 2001 From: Lauren Wrubleski Date: Thu, 9 Nov 2023 16:40:21 -0700 Subject: [PATCH 2/3] missing parentheses --- share/rocmcmakebuildtools/cmake/ROCMChecks.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake index 1abf5444..7b1080a6 100644 --- a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake +++ b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake @@ -67,7 +67,7 @@ endfunction() function(rocm_variable_watch VAR) set_property(GLOBAL APPEND PROPERTY ROCMChecksWatched "${VAR}") variable_watch("${VAR}" rocm_check_toolchain_var) -endfunction +endfunction() function(add_subdirectory_unchecked source_directory) get_property(watched_vars GLOBAL PROPERTY ROCMChecksWatched) From 102da84be96d6fdf4554a313c225e112f92575aa Mon Sep 17 00:00:00 2001 From: Lauren Wrubleski Date: Thu, 18 Jul 2024 13:43:23 -0600 Subject: [PATCH 3/3] change to wrap FetchContent calls still needs tests created --- .../cmake/ROCMChecks.cmake | 35 ++++++++++++++----- .../cmake/ROCMFetchContent.cmake | 20 +++++++++++ 2 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 share/rocmcmakebuildtools/cmake/ROCMFetchContent.cmake diff --git a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake index 7b1080a6..e70b541c 100644 --- a/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake +++ b/share/rocmcmakebuildtools/cmake/ROCMChecks.cmake @@ -1,5 +1,5 @@ # ###################################################################################################################### -# Copyright (C) 2019-2021 Advanced Micro Devices, Inc. +# Copyright (C) 2019-2024 Advanced Micro Devices, Inc. # ###################################################################################################################### set(ROCM_WARN_TOOLCHAIN_VAR @@ -20,6 +20,7 @@ define_property(GLOBAL PROPERTY ROCMChecksSuppressed INHERITED BRIEF_DOCS "Property to indicate suppression of ROCMChecks." FULL_DOCS "Property to indicate suppression of ROCMChecks." ) +set_property(GLOBAL PROPERTY ROCMChecksSuppressed 0) define_property(GLOBAL PROPERTY ROCMChecksWatched BRIEF_DOCS "Property recording variables watched by ROCMChecks." FULL_DOCS "Property recording variables watched by ROCMChecks." @@ -27,7 +28,7 @@ define_property(GLOBAL PROPERTY ROCMChecksWatched function(rocm_check_toolchain_var var access value list_file) get_property(suppressed GLOBAL PROPERTY ROCMChecksSuppressed) - if ((NOT "${suppressed}" STREQUAL "") AND suppressed) + if (suppressed GREATER 0) return() endif() set(message_type STATUS) @@ -69,20 +70,36 @@ function(rocm_variable_watch VAR) variable_watch("${VAR}" rocm_check_toolchain_var) endfunction() -function(add_subdirectory_unchecked source_directory) +function(_push_watched_vars) get_property(watched_vars GLOBAL PROPERTY ROCMChecksWatched) - set_property(GLOBAL PROPERTY ROCMChecksSuppressed "ON") + get_property(current_suppression GLOBAL PROPERTY ROCMChecksSuppressed) + math(EXPR current_suppression "${current_suppression} + 1") + set_property(GLOBAL PROPERTY ROCMChecksSuppressed "${current_suppression}") foreach(var IN_LISTS watched_vars) - set(_rocmchecks_restore_${var} "${var}" CACHE INTERNAL) + set(_rocmchecks_restore_var_${var}_${current_suppression} "${var}" CACHE INTERNAL) endforeach() - add_subdirectory(${ARGV}) + set(_rocmchecks_restore_varlist_${current_suppression} "${watched_vars}" CACHE INTERNAL) +endfunction() + +function(_pop_watched_vars) + get_property(current_suppression GLOBAL PROPERTY ROCMChecksSuppressed) + if(current_suppresion LESS_EQUAL 0) + message(WARNING "pop_watched_vars called while without a stack.") + return() + endif() + set(watched_vars $CACHE{_rocmchecks_restore_varlist_${current_suppression}}) + unset(_rocmchecks_restore_varlist_${current_suppression} CACHE) foreach(var IN_LISTS watched_vars) if (DEFINED CACHE{${var}}) - set(${var} "$CACHE{_rocmchecks_restore_${var}}") + # how do we restore a cache variable when we don't know its type or docstring? + set(${var} "$CACHE{_rocmchecks_restore_var_${var}_${current_suppression}}") + else() + set(${var} "$CACHE{_rocmchecks_restore_var_${var}_${current_suppression}}") endif() - unset(_rocmchecks_restore_${var} CACHE) + unset(_rocmchecks_restore_var_${var}_${current_suppression} CACHE) endforeach() - set_property(GLOBAL PROPERTY ROCMChecksSuppressed "OFF") + math(EXPR current_suppression "${current_suppresion} - 1") + set_property(GLOBAL PROPERTY ROCMChecksSuppressed "${current_suppression}") endfunction() if(UNIX AND (ROCM_WARN_TOOLCHAIN_VAR OR ROCM_ERROR_TOOLCHAIN_VAR)) diff --git a/share/rocmcmakebuildtools/cmake/ROCMFetchContent.cmake b/share/rocmcmakebuildtools/cmake/ROCMFetchContent.cmake new file mode 100644 index 00000000..e0c216dc --- /dev/null +++ b/share/rocmcmakebuildtools/cmake/ROCMFetchContent.cmake @@ -0,0 +1,20 @@ +# ###################################################################################################################### +# Copyright (C) 2024 Advanced Micro Devices, Inc. +# ###################################################################################################################### + +include(ROCMChecks) +include(FetchContent) +macro(_save_watched_wrapper func_name) + function(ROCM_${func_name}) + set(func_ARGV ARGV) + _push_watched_vars() + ${func_name}(${func_ARGV}) + _pop_watched_vars() + endfunction() +endmacro() + +_save_watched_wrapper(FetchContent_Declare) +_save_watched_wrapper(FetchContent_MakeAvailable) +_save_watched_wrapper(FetchContent_Populate) +_save_watched_wrapper(FetchContent_GetProperties) +_save_watched_wrapper(FetchContent_SetPopulated)