2023-08-08 18:39:01 -05:00
#
# rocprofiler_options.cmake
#
# Configure miscellaneous settings
#
2023-08-22 13:29:11 -05:00
include_guard ( GLOBAL )
2023-08-08 18:39:01 -05:00
2023-08-22 13:29:11 -05:00
# export compile commands of the project. Many IDEs want the compile_commands.json in root
# directory so run ln -s <build>/compile_commands.json
2023-08-08 18:39:01 -05:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON )
2023-08-22 13:29:11 -05:00
# C settings
2023-08-08 18:39:01 -05:00
set ( CMAKE_C_STANDARD 11 )
set ( CMAKE_C_EXTENSIONS OFF )
set ( CMAKE_C_STANDARD_REQUIRED ON )
2023-08-22 13:29:11 -05:00
set ( CMAKE_C_VISIBILITY_PRESET "hidden" )
# C++ settings
2023-08-08 18:39:01 -05:00
set ( CMAKE_CXX_STANDARD 17 )
set ( CMAKE_CXX_EXTENSIONS OFF )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
2023-08-22 13:29:11 -05:00
set ( CMAKE_CXX_VISIBILITY_PRESET "hidden" )
# general settings affecting build
set ( CMAKE_VISIBILITY_INLINES_HIDDEN ON )
set ( CMAKE_UNITY_BUILD OFF )
set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
rocprofiler_add_feature ( CMAKE_BUILD_TYPE "Build type" )
rocprofiler_add_feature ( CMAKE_INSTALL_PREFIX "Install prefix" )
# standard cmake options
rocprofiler_add_option ( BUILD_SHARED_LIBS "Build shared libraries" ON )
# rocprofiler_add_option(BUILD_STATIC_LIBS "Build static libraries" OFF)
2023-08-08 18:39:01 -05:00
2023-08-22 13:29:11 -05:00
rocprofiler_add_option (
ROCPROFILER_BUILD_CI "Enable continuous integration default values for options" OFF
ADVANCED )
rocprofiler_add_option ( ROCPROFILER_BUILD_TESTS "Enable building the tests"
${ ROCPROFILER_BUILD_CI } )
rocprofiler_add_option ( ROCPROFILER_BUILD_SAMPLES "Enable building the code samples"
${ ROCPROFILER_BUILD_CI } )
2024-11-01 23:12:51 -05:00
rocprofiler_add_option (
ROCPROFILER_BUILD_CI_STRICT_TIMESTAMPS
"Disable adjusting for clock skew b/t CPU and GPU timestamps" OFF ADVANCED )
2023-09-21 18:01:20 -05:00
rocprofiler_add_option ( ROCPROFILER_BUILD_CODECOV
"Enable building for code coverage analysis" OFF )
2024-01-14 08:10:14 -06:00
rocprofiler_add_option ( ROCPROFILER_BUILD_DOCS
"Enable build + install + packaging documentation" OFF )
2023-08-08 18:39:01 -05:00
2023-11-28 10:04:37 -06:00
rocprofiler_add_option (
ROCPROFILER_BUILD_GHC_FS
"Enable building with ghc::filesystem library (via submodule) instead of the C++ filesystem library"
ON )
2023-08-22 13:29:11 -05:00
rocprofiler_add_option ( ROCPROFILER_BUILD_FMT "Enable building fmt library internally" ON )
rocprofiler_add_option ( ROCPROFILER_BUILD_GLOG
"Enable building glog (Google logging) library internally" ON )
if ( ROCPROFILER_BUILD_TESTS )
rocprofiler_add_option (
ROCPROFILER_BUILD_GTEST
"Enable building gtest (Google testing) library internally" ON ADVANCED )
endif ()
2023-08-08 18:39:01 -05:00
rocprofiler_add_option ( ROCPROFILER_ENABLE_CLANG_TIDY "Enable clang-tidy checks" OFF
ADVANCED )
rocprofiler_add_option (
ROCPROFILER_BUILD_DEVELOPER "Extra build flags for development like -Werror"
${ ROCPROFILER_BUILD_CI } ADVANCED )
2023-08-22 13:29:11 -05:00
rocprofiler_add_option ( ROCPROFILER_BUILD_WERROR "Any compiler warnings are errors"
${ ROCPROFILER_BUILD_CI } ADVANCED )
2023-08-08 18:39:01 -05:00
rocprofiler_add_option ( ROCPROFILER_BUILD_RELEASE "Build with minimal debug info" OFF
ADVANCED )
rocprofiler_add_option ( ROCPROFILER_BUILD_DEBUG "Build with extra debug info" OFF ADVANCED )
rocprofiler_add_option ( ROCPROFILER_BUILD_STATIC_LIBGCC
"Build with -static-libgcc if possible" OFF ADVANCED )
rocprofiler_add_option ( ROCPROFILER_BUILD_STATIC_LIBSTDCXX
"Build with -static-libstdc++ if possible" OFF ADVANCED )
rocprofiler_add_option ( ROCPROFILER_BUILD_STACK_PROTECTOR "Build with -fstack-protector"
2023-08-22 13:29:11 -05:00
ON ADVANCED )
2023-09-06 22:06:06 -07:00
rocprofiler_add_option ( ROCPROFILER_UNSAFE_NO_VERSION_CHECK
"Disable HSA version checking (for development only)" OFF ADVANCED )
2023-10-16 13:41:40 -07:00
rocprofiler_add_option (
ROCPROFILER_REGENERATE_COUNTERS_PARSER
"Regenerate the counter parser (requires bison and flex)" OFF ADVANCED )
2025-03-23 23:37:33 -07:00
rocprofiler_add_option (
ROCPROFILER_BUILD_EXPERIMENTAL_WARNINGS
"Enable warnings for experimental features but hide with -Wno-deprecated-declarations (this ensures that experimental warning message does not break macros)"
OFF
ADVANCED )
2023-08-08 18:39:01 -05:00
# In the future, we will do this even with clang-tidy enabled
2024-04-09 17:54:40 +05:30
foreach ( _OPT ROCPROFILER_BUILD_DEVELOPER ROCPROFILER_BUILD_WERROR )
if ( ROCPROFILER_BUILD_CI AND NOT ${ _OPT } )
message ( AUTHOR_WARNING "Forcing ${_OPT}=ON because ROCPROFILER_BUILD_CI=ON" )
set ( ${ _OPT }
ON
CACHE BOOL "forced due ROCPROFILER_BUILD_CI=ON" FORCE )
endif ()
endforeach ()
2023-08-08 18:39:01 -05:00
set ( ROCPROFILER_BUILD_TYPES "Release" "RelWithDebInfo" "Debug" "MinSizeRel" "Coverage" )
if ( NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE
"Release"
CACHE STRING "Build type" FORCE )
endif ()
if ( NOT CMAKE_BUILD_TYPE IN_LIST ROCPROFILER_BUILD_TYPES )
message (
FATAL_ERROR
"Unsupported build type '${CMAKE_BUILD_TYPE}'. Options: ${ROCPROFILER_BUILD_TYPES}"
)
endif ()
if ( ROCPROFILER_BUILD_CI )
foreach ( _BUILD_TYPE ${ ROCPROFILER_BUILD_TYPES } )
string ( TOUPPER "${_BUILD_TYPE}" _BUILD_TYPE )
# remove NDEBUG preprocessor def so that asserts are triggered
string ( REGEX REPLACE ".DNDEBUG" "" CMAKE_C_FLAGS_ ${ _BUILD_TYPE }
"${CMAKE_C_FLAGS_${_BUILD_TYPE}}" )
string ( REGEX REPLACE ".DNDEBUG" "" CMAKE_CXX_FLAGS_ ${ _BUILD_TYPE }
"${CMAKE_CXX_FLAGS_${_BUILD_TYPE}}" )
endforeach ()
endif ()
if ( CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "${ROCPROFILER_BUILD_TYPES}" )
endif ()
rocprofiler_add_cache_option ( ROCPROFILER_MEMCHECK "" STRING "Memory checker type"
ADVANCED )
# ASAN is defined by testing team on Jenkins
if ( ASAN )
set ( ROCPROFILER_MEMCHECK
"AddressSanitizer"
CACHE STRING "Memory checker type (forced by ASAN defined)" FORCE )
endif ()
include ( rocprofiler_memcheck )
2024-03-07 22:21:26 -06:00
# default FAIL_REGULAR_EXPRESSION for tests
set ( ROCPROFILER_DEFAULT_FAIL_REGEX
2024-10-22 05:54:16 -05:00
"threw an exception|Permission denied|Could not create logging file|failed with error code"
CACHE INTERNAL "Default FAIL_REGULAR_EXPRESSION for tests" FORCE )