Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add scoped suppression of ROCMChecks #156

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from
Draft
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
74 changes: 63 additions & 11 deletions share/rocmcmakebuildtools/cmake/ROCMChecks.cmake
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -16,7 +16,21 @@ 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."
)
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."
)

function(rocm_check_toolchain_var var access value list_file)
get_property(suppressed GLOBAL PROPERTY ROCMChecksSuppressed)
if (suppressed GREATER 0)
return()
endif()
set(message_type STATUS)
if(ROCM_ERROR_TOOLCHAIN_VAR)
set(message_type SEND_ERROR)
Expand Down Expand Up @@ -50,17 +64,55 @@ 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(_push_watched_vars)
get_property(watched_vars GLOBAL PROPERTY ROCMChecksWatched)
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}_${current_suppression} "${var}" CACHE INTERNAL)
endforeach()
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}})
# 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_${var}_${current_suppression} CACHE)
endforeach()
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))
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()
20 changes: 20 additions & 0 deletions share/rocmcmakebuildtools/cmake/ROCMFetchContent.cmake
Original file line number Diff line number Diff line change
@@ -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)
Loading