Files
TheRock/rocm-systems/projects/rocprofiler-systems/external/timemory/cmake/Modules/FindTAU.cmake
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

212 lines
8.3 KiB
CMake

# Try to find the TAU library and headers Usage of this module is as follows
#
# find_package( TAU ) if(TAU_FOUND) include_directories(${TAU_INCLUDE_DIRS})
# add_executable(foo foo.cc) target_link_libraries(foo ${TAU_LIBRARIES}) endif()
#
# You can provide a minimum version number that should be used. If you provide this
# version number and specify the REQUIRED attribute, this module will fail if it can't
# find a TAU of the specified version or higher. If you further specify the EXACT
# attribute, then this module will fail if it can't find a TAU with a version eaxctly as
# specified.
#
# ===========================================================================
# Variables used by this module which can be used to change the default behaviour, and
# hence need to be set before calling find_package:
#
# TAU_ROOT_DIR The preferred installation prefix for searching for TAU Set this if the
# module has problems finding the proper TAU installation.
#
# If you don't supply TAU_ROOT_DIR, the module will search on the standard system paths.
#
# ============================================================================
# Variables set by this module:
#
# TAU_FOUND System has TAU.
#
# TAU_INCLUDE_DIRS TAU include directories: not cached.
#
# TAU_LIBRARIES Link to these to use the TAU library: not cached.
#
# ===========================================================================
# If TAU is installed in a non-standard way, e.g. a non GNU-style install of
# <prefix>/{lib,include}, then this module may fail to locate the headers and libraries as
# needed. In this case, the following cached variables can be editted to point to the
# correct locations.
#
# TAU_INCLUDE_DIR The path to the TAU include directory: cached
#
# TAU_LIBRARIES The path to the TAU library: cached
#
# You should not need to set these in the vast majority of cases
#
# ----------------------------------------------------------------------------------------#
find_program(
TAU_CXX_COMPILER
NAMES tau_cxx.sh
PATH_SUFFIXES bin)
# ----------------------------------------------------------------------------------------#
function(TAU_CXX_DEFINE_SHOW_VARIABLES)
set(_TAU_CXX_EXECUTE_OPTIONS)
if(NOT CMAKE_VERSION VERSION_LESS 3.18)
list(APPEND _TAU_CXX_EXECUTE_OPTIONS ECHO_ERROR_VARIABLE)
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.19)
list(APPEND _TAU_CXX_EXECUTE_OPTIONS COMMAND_ERROR_IS_FATAL ANY)
endif()
foreach(_OPT SHOW_COMPILER SHOW SHOW_INCLUDES SHOW_LIBS SHOW_SHARED_LIBS)
string(TOLOWER "${_OPT}" _TAU_CXX_${_OPT}_OPT)
string(REPLACE "_" "" _TAU_CXX_${_OPT}_OPT "${_TAU_CXX_${_OPT}_OPT}")
set(TAU_CXX_${_OPT}_OPT
"${_TAU_CXX_${_OPT}_OPT}"
CACHE STRING "tau_cxx.sh -tau:\${TAU_CXX_${_OPT}_OPT}")
mark_as_advanced(TAU_CXX_${_OPT}_OPT)
if(NOT TAU_CXX_${_OPT})
execute_process(
COMMAND ${TAU_CXX_COMPILER} -tau:${TAU_CXX_${_OPT}_OPT}
OUTPUT_VARIABLE _OUT
RESULT_VARIABLE _RET
ERROR_VARIABLE _ERR
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE
COMMAND_ECHO STDOUT ${_TAU_CXX_EXECUTE_OPTIONS})
if(NOT _RET EQUAL 0)
message(
SEND_ERROR
"`${TAU_CXX_COMPILER} -tau:${TAU_CXX_${_OPT}_OPT}` exited with error code: ${_RET}"
)
message(SEND_ERROR "tau_cxx.sh output :: ${_OUT}")
if(NOT "ECHO_ERROR_VARIABLE" IN_LIST _TAU_CXX_EXECUTE_OPTIONS)
message(SEND_ERROR "tau_cxx.sh error :: ${_ERR}")
endif()
continue()
endif()
if("${_OPT}" STREQUAL "SHOW")
string(REPLACE "${TAU_CXX_SHOW_COMPILER} " "" _OUT "${_OUT}")
endif()
if("${TAU_CXX_${_OPT}}" STREQUAL "")
unset(TAU_CXX_${_OPT} CACHE)
endif()
set(TAU_CXX_${_OPT}
"${_OUT}"
CACHE STRING "output from `tau_cxx.sh -tau:${TAU_CXX_${_OPT}_OPT}`")
mark_as_advanced(TAU_CXX_${_OPT})
endif()
endforeach()
endfunction()
function(_SET_TAU_PROCESS_VARIABLE _VAR)
string(REGEX REPLACE "[ \t]$" "" _VAL "${ARGN}")
set(TAU_CXX_${_VAR}
"${_VAL}"
CACHE STRING "Regex for matching to flag")
mark_as_advanced(TAU_CXX_${_VAR})
endfunction()
# variables for matching the prefix of an option
_set_tau_process_variable(INCLUDE_DIRS_MATCH "-I|${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}")
_set_tau_process_variable(DEFINITIONS_MATCH "-D|/D")
_set_tau_process_variable(LIBRARY_DIRS_MATCH "-L")
_set_tau_process_variable(LIBRARIES_MATCH "-l(TAU|tau)")
_set_tau_process_variable(LINK_OPTIONS_MATCH "-Wl")
# variables for replacing the prefix of an option
_set_tau_process_variable(INCLUDE_DIRS_REPLACE "${TAU_CXX_INCLUDE_DIRS_MATCH}")
_set_tau_process_variable(DEFINITIONS_REPLACE "${TAU_CXX_DEFINITIONS_MATCH}")
_set_tau_process_variable(LIBRARY_DIRS_REPLACE "${TAU_CXX_LIBRARY_DIRS_MATCH}")
_set_tau_process_variable(LIBRARIES_REPLACE "-l")
_set_tau_process_variable(LINK_OPTIONS_REPLACE)
function(TAU_PROCESS_CXX_OUTPUT _VAR_PREFIX _STR)
set(_VARS)
foreach(_VAR INCLUDE_DIRS DEFINITIONS LIBRARY_DIRS LIBRARIES LINK_OPTIONS)
if("${_VAR}" IN_LIST ARGN AND NOT "${_VAR_PREFIX}_${_VAR}")
list(APPEND _VARS "${_VAR}")
endif()
endforeach()
string(REPLACE " " ";" _STR "${_STR}")
foreach(_VAR ${_VARS})
set(_${_VAR})
set(_MATCH "${TAU_CXX_${_VAR}_MATCH}")
set(_REPLACE "${TAU_CXX_${_VAR}_REPLACE}")
set(_ADD_NEXT OFF)
foreach(_VAL ${_STR})
if(_ADD_NEXT)
set(_ADD_NEXT OFF)
list(APPEND _${_VAR} "${_VAL}")
continue()
elseif(NOT "${_VAL}" MATCHES "^(${_MATCH})")
continue()
elseif("${_VAL}" MATCHES "^(${_MATCH})$")
set(_ADD_NEXT ON)
else()
if(_REPLACE)
string(REGEX REPLACE "^(${_REPLACE})(.*)" "\\2" _VAL "${_VAL}")
endif()
if(_VAL)
list(APPEND _${_VAR} "${_VAL}")
endif()
endif()
endforeach()
if(_${_VAR})
set(${_VAR_PREFIX}_${_VAR}
"${_${_VAR}}"
CACHE STRING "${_VAR} for TAU")
endif()
endforeach()
endfunction()
if(TAU_CXX_COMPILER)
tau_cxx_define_show_variables()
tau_process_cxx_output(TAU "${TAU_CXX_SHOW}" DEFINITIONS)
tau_process_cxx_output(TAU "${TAU_CXX_SHOW_INCLUDES}" INCLUDE_DIRS)
if(BUILD_SHARED_LIBS
OR "shared" IN_LIST TAU_FIND_COMPONENTS
OR (BUILD_STATIC_LIBS AND CMAKE_POSITION_INDEPENDENT_CODE))
tau_process_cxx_output(TAU "${TAU_CXX_SHOW_SHARED_LIBS}" LIBRARY_DIRS LIBRARIES
LINK_OPTIONS)
if(TAU_LIBRARIES)
set(TAU_shared_FOUND ON)
endif()
elseif(BUILD_STATIC_LIBS OR "static" IN_LIST TAU_FIND_COMPONENTS)
tau_process_cxx_output(TAU "${TAU_CXX_SHOW_LIBS}" LIBRARY_DIRS LIBRARIES
LINK_OPTIONS)
if(TAU_LIBRARIES)
set(TAU_static_FOUND ON)
endif()
else()
tau_process_cxx_output(TAU "${TAU_CXX_SHOW_SHARED_LIBS}" LIBRARY_DIRS LIBRARIES
LINK_OPTIONS)
endif()
endif()
# ----------------------------------------------------------------------------------------#
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set TAU_FOUND to TRUE if all listed
# variables are TRUE
find_package_handle_standard_args(
TAU
REQUIRED_VARS TAU_INCLUDE_DIRS TAU_LIBRARIES
HANDLE_COMPONENTS)
# ----------------------------------------------------------------------------------------#
if(TAU_FOUND)
add_library(TAU::TAU INTERFACE IMPORTED)
target_link_libraries(TAU::TAU INTERFACE ${TAU_LIBRARIES})
target_compile_definitions(TAU::TAU INTERFACE ${TAU_DEFINITIONS})
target_include_directories(TAU::TAU SYSTEM INTERFACE ${TAU_INCLUDE_DIRS})
target_link_directories(TAU::TAU INTERFACE ${TAU_LIBRARY_DIRS})
target_link_options(TAU::TAU INTERFACE ${TAU_LINK_OPTIONS})
endif()
mark_as_advanced(TAU_INCLUDE_DIRS TAU_DEFINITIONS TAU_LIBRARY_DIRS TAU_LIBRARIES
TAU_LINK_OPTIONS)