Files

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

620 строки
22 KiB
CMake
Исходник Постоянная ссылка Обычный вид История

2021-08-06 13:08:57 -05:00
# include guard
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# Compilers
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# sets (cached):
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# CMAKE_C_COMPILER_IS_<TYPE> CMAKE_CXX_COMPILER_IS_<TYPE>
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# where TYPE is: - GNU - CLANG - INTEL - INTEL_ICC - INTEL_ICPC - PGI - XLC - HP_ACC -
# MIPS - MSVC
2021-08-06 13:08:57 -05:00
#
include(CheckCCompilerFlag)
include(CheckCSourceCompiles)
include(CheckCSourceRuns)
include(CheckCXXCompilerFlag)
include(CheckCXXSourceCompiles)
include(CheckCXXSourceRuns)
include(CMakeParseArguments)
include(MacroUtilities)
if("${LIBNAME}" STREQUAL "")
string(TOLOWER "${PROJECT_NAME}" LIBNAME)
endif()
2022-05-24 22:45:26 -05:00
if(NOT TARGET ${LIBNAME}-compile-options)
rocprofiler_systems_add_interface_library(
2022-05-24 22:45:26 -05:00
${LIBNAME}-compile-options
2025-06-22 10:44:33 -04:00
"Adds the standard set of compiler flags used by timemory"
)
2022-05-24 22:45:26 -05:00
endif()
2021-08-06 13:08:57 -05:00
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# macro converting string to list
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(to_list _VAR _STR)
2021-09-20 11:12:06 -05:00
string(REPLACE " " " " ${_VAR} "${_STR}")
string(REPLACE " " ";" ${_VAR} "${_STR}")
2025-06-22 10:44:33 -04:00
endmacro(to_list _VAR _STR)
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# macro converting string to list
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(to_string _VAR _STR)
2021-09-20 11:12:06 -05:00
string(REPLACE ";" " " ${_VAR} "${_STR}")
2025-06-22 10:44:33 -04:00
endmacro(to_string _VAR _STR)
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
# Macro to add to string
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(add _VAR _FLAG)
if(NOT "${_FLAG}" STREQUAL "")
if("${${_VAR}}" STREQUAL "")
set(${_VAR} "${_FLAG}")
else()
set(${_VAR} "${${_VAR}} ${_FLAG}")
endif()
endif()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# macro to remove duplicates from string
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(set_no_duplicates _VAR)
if(NOT "${ARGN}" STREQUAL "")
set(${_VAR} "${ARGN}")
endif()
# remove the duplicates
if(NOT "${${_VAR}}" STREQUAL "")
# create list of flags
to_list(_VAR_LIST "${${_VAR}}")
list(REMOVE_DUPLICATES _VAR_LIST)
to_string(${_VAR} "${_VAR_LIST}")
endif(NOT "${${_VAR}}" STREQUAL "")
endmacro(set_no_duplicates _VAR)
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# call before running check_{c,cxx}_compiler_flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
macro(rocprofiler_systems_begin_flag_check)
if(ROCPROFSYS_QUIET_CONFIG)
2021-08-06 13:08:57 -05:00
if(NOT DEFINED CMAKE_REQUIRED_QUIET)
set(CMAKE_REQUIRED_QUIET OFF)
endif()
rocprofiler_systems_save_variables(FLAG_CHECK VARIABLES CMAKE_REQUIRED_QUIET)
2021-08-06 13:08:57 -05:00
set(CMAKE_REQUIRED_QUIET ON)
endif()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# call after running check_{c,cxx}_compiler_flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
macro(rocprofiler_systems_end_flag_check)
if(ROCPROFSYS_QUIET_CONFIG)
rocprofiler_systems_restore_variables(FLAG_CHECK VARIABLES CMAKE_REQUIRED_QUIET)
2021-08-06 13:08:57 -05:00
endif()
endmacro()
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# C compiler flags
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add C flag to target
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_C_FLAG _TARG)
2022-05-24 22:45:26 -05:00
get_target_property(_TARG_TYPE ${_TARG} TYPE)
if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY")
set(_SCOPE INTERFACE)
else()
set(_SCOPE PRIVATE)
endif()
2021-08-06 13:08:57 -05:00
string(REPLACE "-" "_" _MAKE_TARG "${_TARG}")
list(APPEND ROCPROFSYS_MAKE_TARGETS ${_MAKE_TARG})
2021-08-06 13:08:57 -05:00
2022-05-24 22:45:26 -05:00
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:C>:${ARGN}>)
2021-08-06 13:08:57 -05:00
list(APPEND ${_MAKE_TARG}_C_FLAGS ${ARGN})
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add C flag w/o check
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_C_FLAG FLAG)
2021-09-20 11:12:06 -05:00
set(_TARG)
set(_LTARG)
2021-08-06 13:08:57 -05:00
if(NOT "${ARGN}" STREQUAL "")
set(_TARG ${ARGN})
string(TOLOWER "_${ARGN}" _LTARG)
endif()
if(NOT "${FLAG}" STREQUAL "")
if("${_LTARG}" STREQUAL "")
list(APPEND ${PROJECT_NAME}_C_FLAGS "${FLAG}")
list(APPEND ${PROJECT_NAME}_C_COMPILE_OPTIONS "${FLAG}")
add_target_c_flag(${LIBNAME}-compile-options ${FLAG})
else()
add_target_c_flag(${_TARG} ${FLAG})
endif()
endif()
unset(_TARG)
unset(_LTARG)
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check C flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_C_FLAG_IF_AVAIL FLAG)
set(_ENABLE ON)
if(DEFINED ROCPROFSYS_BUILD_C AND NOT ROCPROFSYS_BUILD_C)
2021-08-06 13:08:57 -05:00
set(_ENABLE OFF)
endif()
2021-09-20 11:12:06 -05:00
set(_TARG)
set(_LTARG)
2021-08-06 13:08:57 -05:00
if(NOT "${ARGN}" STREQUAL "")
set(_TARG ${ARGN})
string(TOLOWER "_${ARGN}" _LTARG)
endif()
if(NOT "${FLAG}" STREQUAL "")
string(REGEX REPLACE "^/" "c${_LTARG}_" FLAG_NAME "${FLAG}")
string(REGEX REPLACE "^-" "c${_LTARG}_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}")
if(NOT ROCPROFSYS_BUILD_C)
2021-08-06 13:08:57 -05:00
set(${FLAG_NAME} ON)
else()
rocprofiler_systems_begin_flag_check()
2021-08-06 13:08:57 -05:00
check_c_compiler_flag("-Werror" c_werror)
if(c_werror)
check_c_compiler_flag("${FLAG} -Werror" ${FLAG_NAME})
else()
check_c_compiler_flag("${FLAG}" ${FLAG_NAME})
endif()
rocprofiler_systems_end_flag_check()
2021-08-06 13:08:57 -05:00
if(${FLAG_NAME})
if("${_LTARG}" STREQUAL "")
list(APPEND ${PROJECT_NAME}_C_FLAGS "${FLAG}")
list(APPEND ${PROJECT_NAME}_C_COMPILE_OPTIONS "${FLAG}")
add_target_c_flag(${LIBNAME}-compile-options ${FLAG})
else()
add_target_c_flag(${_TARG} ${FLAG})
endif()
endif()
endif()
endif()
unset(_TARG)
unset(_LTARG)
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add C flag to target
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_C_FLAG_IF_AVAIL _TARG)
foreach(_FLAG ${ARGN})
add_c_flag_if_avail(${_FLAG} ${_TARG})
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# CXX compiler flags
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add CXX flag to target
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_CXX_FLAG _TARG)
2022-05-24 22:45:26 -05:00
get_target_property(_TARG_TYPE ${_TARG} TYPE)
if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY")
set(_SCOPE INTERFACE)
else()
set(_SCOPE PRIVATE)
endif()
2021-08-06 13:08:57 -05:00
string(REPLACE "-" "_" _MAKE_TARG "${_TARG}")
list(APPEND ROCPROFSYS_MAKE_TARGETS ${_MAKE_TARG})
2021-08-06 13:08:57 -05:00
2022-05-24 22:45:26 -05:00
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:CXX>:${ARGN}>)
2021-08-06 13:08:57 -05:00
list(APPEND ${_MAKE_TARG}_CXX_FLAGS ${ARGN})
get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
if(CMAKE_CUDA_COMPILER_IS_NVIDIA)
2025-06-22 10:44:33 -04:00
target_compile_options(
${_TARG}
${_SCOPE}
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${ARGN}>
)
2021-08-06 13:08:57 -05:00
list(APPEND ${_MAKE_TARG}_CUDA_FLAGS -Xcompiler=${ARGN})
elseif(CMAKE_CUDA_COMPILER_IS_CLANG)
2022-05-24 22:45:26 -05:00
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:CUDA>:${ARGN}>)
2021-08-06 13:08:57 -05:00
list(APPEND ${_MAKE_TARG}_CUDA_FLAGS ${ARGN})
endif()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add CXX flag w/o check
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_CXX_FLAG FLAG)
2021-09-20 11:12:06 -05:00
set(_TARG)
set(_LTARG)
2021-08-06 13:08:57 -05:00
if(NOT "${ARGN}" STREQUAL "")
set(_TARG ${ARGN})
string(TOLOWER "_${ARGN}" _LTARG)
endif()
if(NOT "${FLAG}" STREQUAL "")
if("${_LTARG}" STREQUAL "")
list(APPEND ${PROJECT_NAME}_CXX_FLAGS "${FLAG}")
list(APPEND ${PROJECT_NAME}_CXX_COMPILE_OPTIONS "${FLAG}")
add_target_cxx_flag(${LIBNAME}-compile-options ${FLAG})
else()
add_target_cxx_flag(${_TARG} ${FLAG})
endif()
endif()
unset(_TARG)
unset(_LTARG)
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check CXX flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_CXX_FLAG_IF_AVAIL FLAG)
2021-09-20 11:12:06 -05:00
set(_TARG)
set(_LTARG)
2021-08-06 13:08:57 -05:00
if(NOT "${ARGN}" STREQUAL "")
set(_TARG ${ARGN})
string(TOLOWER "_${ARGN}" _LTARG)
endif()
if(NOT "${FLAG}" STREQUAL "")
string(REGEX REPLACE "^/" "cxx${_LTARG}_" FLAG_NAME "${FLAG}")
string(REGEX REPLACE "^-" "cxx${_LTARG}_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "/" "_" FLAG_NAME "${FLAG_NAME}")
rocprofiler_systems_begin_flag_check()
2021-08-06 13:08:57 -05:00
check_cxx_compiler_flag("-Werror" cxx_werror)
if(cxx_werror)
check_cxx_compiler_flag("${FLAG} -Werror" ${FLAG_NAME})
else()
check_cxx_compiler_flag("${FLAG}" ${FLAG_NAME})
endif()
rocprofiler_systems_end_flag_check()
2021-08-06 13:08:57 -05:00
if(${FLAG_NAME})
if("${_LTARG}" STREQUAL "")
list(APPEND ${PROJECT_NAME}_CXX_FLAGS "${FLAG}")
list(APPEND ${PROJECT_NAME}_CXX_COMPILE_OPTIONS "${FLAG}")
add_target_cxx_flag(${LIBNAME}-compile-options ${FLAG})
else()
add_target_cxx_flag(${_TARG} ${FLAG})
endif()
endif()
endif()
unset(_TARG)
unset(_LTARG)
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add CXX flag to target
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_CXX_FLAG_IF_AVAIL _TARG)
foreach(_FLAG ${ARGN})
add_cxx_flag_if_avail(${_FLAG} ${_TARG})
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# Common
2021-08-06 13:08:57 -05:00
#
2021-09-20 11:12:06 -05:00
# ########################################################################################
2021-08-06 13:08:57 -05:00
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check C and CXX flag to compile-options w/o checking
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_FLAG)
foreach(_ARG ${ARGN})
2021-09-20 11:12:06 -05:00
add_c_flag("${_ARG}")
add_cxx_flag("${_ARG}")
2021-08-06 13:08:57 -05:00
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add C and CXX flag w/o checking
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_FLAG _TARG)
foreach(_ARG ${ARGN})
2021-09-20 11:12:06 -05:00
add_target_c_flag(${_TARG} ${_ARG})
add_target_cxx_flag(${_TARG} ${_ARG})
2021-08-06 13:08:57 -05:00
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check C and CXX flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_FLAG_IF_AVAIL)
foreach(_ARG ${ARGN})
2021-09-20 11:12:06 -05:00
add_c_flag_if_avail("${_ARG}")
add_cxx_flag_if_avail("${_ARG}")
2021-08-06 13:08:57 -05:00
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check C and CXX flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_FLAG_IF_AVAIL _TARG)
foreach(_ARG ${ARGN})
2021-09-20 11:12:06 -05:00
add_target_c_flag_if_avail(${_TARG} ${_ARG})
add_target_cxx_flag_if_avail(${_TARG} ${_ARG})
2021-08-06 13:08:57 -05:00
endforeach()
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# check flag
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
function(ROCPROFILER_SYSTEMS_TARGET_FLAG _TARG_TARGET)
2021-08-06 13:08:57 -05:00
cmake_parse_arguments(_TARG "IF_AVAIL" "MODE" "FLAGS;LANGUAGES" ${ARGN})
if(NOT _TARG_MODE)
set(_TARG_MODE INTERFACE)
endif()
get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
if(NOT _TARG_LANGUAGES)
get_property(_TARG_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
endif()
string(TOLOWER "_${_TARG_TARGET}" _LTARG)
foreach(_FLAG ${_TARG_FLAGS})
foreach(_LANG ${_TARG_LANGUAGES})
if(NOT _TARG_IF_AVAIL)
2025-06-22 10:44:33 -04:00
target_compile_options(
${_TARG_TARGET}
${_TARG_MODE}
$<$<COMPILE_LANGUAGE:${_LANG}>:${_FLAG}>
)
2021-08-06 13:08:57 -05:00
continue()
endif()
if("${_LANG}" STREQUAL "C")
string(REGEX REPLACE "^/" "c${_LTARG}_" FLAG_NAME "${_FLAG}")
string(REGEX REPLACE "^-" "c${_LTARG}_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}")
rocprofiler_systems_begin_flag_check()
2021-08-06 13:08:57 -05:00
check_c_compiler_flag("-Werror" c_werror)
if(c_werror)
check_c_compiler_flag("${FLAG} -Werror" ${FLAG_NAME})
else()
check_c_compiler_flag("${FLAG}" ${FLAG_NAME})
endif()
rocprofiler_systems_end_flag_check()
2021-08-06 13:08:57 -05:00
if(${FLAG_NAME})
2025-06-22 10:44:33 -04:00
target_compile_options(
${_TARG_TARGET}
${_TARG_MODE}
$<$<COMPILE_LANGUAGE:${_LANG}>:${_FLAG}>
)
2021-08-06 13:08:57 -05:00
endif()
elseif("${_LANG}" STREQUAL "CXX")
string(REGEX REPLACE "^/" "cxx${_LTARG}_" FLAG_NAME "${_FLAG}")
string(REGEX REPLACE "^-" "cxx${_LTARG}_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "-" "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE " " "_" FLAG_NAME "${FLAG_NAME}")
string(REPLACE "=" "_" FLAG_NAME "${FLAG_NAME}")
rocprofiler_systems_begin_flag_check()
2021-08-06 13:08:57 -05:00
check_cxx_compiler_flag("-Werror" cxx_werror)
if(cxx_werror)
check_cxx_compiler_flag("${FLAG} -Werror" ${FLAG_NAME})
else()
check_cxx_compiler_flag("${FLAG}" ${FLAG_NAME})
endif()
rocprofiler_systems_end_flag_check()
2021-08-06 13:08:57 -05:00
if(${FLAG_NAME})
2025-06-22 10:44:33 -04:00
target_compile_options(
${_TARG_TARGET}
${_TARG_MODE}
$<$<COMPILE_LANGUAGE:${_LANG}>:${_FLAG}>
)
2021-08-06 13:08:57 -05:00
if(CMAKE_CUDA_COMPILER_IS_NVIDIA)
2021-09-20 11:12:06 -05:00
target_compile_options(
2025-06-22 10:44:33 -04:00
${_TARG_TARGET}
${_TARG_MODE}
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${_FLAG}>
)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_CUDA_COMPILER_IS_CLANG)
2025-06-22 10:44:33 -04:00
target_compile_options(
${_TARG_TARGET}
${_TARG_MODE}
$<$<COMPILE_LANGUAGE:CUDA>:${_FLAG}>
)
2021-08-06 13:08:57 -05:00
endif()
endif()
endif()
endforeach()
endforeach()
endfunction()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add CUDA flag to target
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
macro(ADD_TARGET_CUDA_FLAG _TARG)
string(REPLACE "-" "_" _MAKE_TARG "${_TARG}")
list(APPEND ROCPROFSYS_MAKE_TARGETS ${_MAKE_TARG})
2021-08-06 13:08:57 -05:00
target_compile_options(${_TARG} INTERFACE $<$<COMPILE_LANGUAGE:CUDA>:${ARGN}>)
list(APPEND ${_MAKE_TARG}_CUDA_FLAGS ${ARGN})
endmacro()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add to any language
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
function(ADD_USER_FLAGS _TARGET _LANGUAGE)
2025-06-22 10:44:33 -04:00
set(_FLAGS
${${_LANGUAGE}FLAGS}
$ENV{${_LANGUAGE}FLAGS}
${${_LANGUAGE}_FLAGS}
$ENV{${_LANGUAGE}_FLAGS}
)
2021-08-06 13:08:57 -05:00
string(REPLACE " " ";" _FLAGS "${_FLAGS}")
set(${PROJECT_NAME}_${_LANGUAGE}_FLAGS
2025-06-22 10:44:33 -04:00
${${PROJECT_NAME}_${_LANGUAGE}_FLAGS}
${_FLAGS}
PARENT_SCOPE
)
2021-08-06 13:08:57 -05:00
set(${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS
2025-06-22 10:44:33 -04:00
${${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS}
${_FLAGS}
PARENT_SCOPE
)
target_compile_options(
${_TARGET}
INTERFACE $<$<COMPILE_LANGUAGE:${_LANGUAGE}>:${_FLAGS}>
)
2021-08-06 13:08:57 -05:00
endfunction()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# add compiler definition
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
function(ROCPROFILER_SYSTEMS_TARGET_COMPILE_DEFINITIONS _TARG _VIS)
2021-08-06 13:08:57 -05:00
foreach(_DEF ${ARGN})
if(NOT "${_DEF}" MATCHES "[A-Za-z_]+=.*" AND "${_DEF}" MATCHES "^ROCPROFSYS_")
2022-02-08 17:42:17 -06:00
set(_DEF "${_DEF}=1")
endif()
2021-09-20 11:12:06 -05:00
target_compile_definitions(${_TARG} ${_VIS} $<$<COMPILE_LANGUAGE:CXX>:${_DEF}>)
2021-08-06 13:08:57 -05:00
if(CMAKE_CUDA_COMPILER_IS_NVIDIA)
2025-06-22 10:44:33 -04:00
target_compile_definitions(
${_TARG}
${_VIS}
$<$<COMPILE_LANGUAGE:CUDA>:${_DEF}>
)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_CUDA_COMPILER_IS_CLANG)
2025-06-22 10:44:33 -04:00
target_compile_definitions(
${_TARG}
${_VIS}
$<$<COMPILE_LANGUAGE:CUDA>:${_DEF}>
)
2021-08-06 13:08:57 -05:00
endif()
endforeach()
endfunction()
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
# determine compiler types for each language
2021-09-20 11:12:06 -05:00
# ----------------------------------------------------------------------------------------#
2021-08-06 13:08:57 -05:00
get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
foreach(LANG C CXX CUDA)
if(NOT DEFINED CMAKE_${LANG}_COMPILER)
set(CMAKE_${LANG}_COMPILER "")
endif()
if(NOT DEFINED CMAKE_${LANG}_COMPILER_ID)
set(CMAKE_${LANG}_COMPILER_ID "")
endif()
function(SET_COMPILER_VAR VAR _BOOL)
2021-09-20 11:12:06 -05:00
set(CMAKE_${LANG}_COMPILER_IS_${VAR}
${_BOOL}
2025-06-22 10:44:33 -04:00
CACHE INTERNAL
"CMake ${LANG} compiler identification (${VAR})"
FORCE
)
2021-08-06 13:08:57 -05:00
mark_as_advanced(CMAKE_${LANG}_COMPILER_IS_${VAR})
endfunction()
2025-06-22 10:44:33 -04:00
if(
("${LANG}" STREQUAL "C" AND CMAKE_COMPILER_IS_GNUCC)
OR ("${LANG}" STREQUAL "CXX" AND CMAKE_COMPILER_IS_GNUCXX)
)
2021-08-06 13:08:57 -05:00
# GNU compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(GNU 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER MATCHES "icc.*")
# Intel icc compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(INTEL 1)
set_compiler_var(INTEL_ICC 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER MATCHES "icpc.*")
# Intel icpc compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(INTEL 1)
set_compiler_var(INTEL_ICPC 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "AppleClang")
# Clang/LLVM compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(CLANG 1)
set_compiler_var(APPLE_CLANG 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Clang")
# Clang/LLVM compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(CLANG 1)
2021-08-06 13:08:57 -05:00
2021-09-06 22:23:24 -05:00
# HIP Clang compiler
if(CMAKE_${LANG}_COMPILER MATCHES "hipcc")
2021-09-20 11:12:06 -05:00
set_compiler_var(HIPCC 1)
2021-09-06 22:23:24 -05:00
endif()
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "PGI")
# PGI compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(PGI 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER MATCHES "xlC" AND UNIX)
# IBM xlC compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(XLC 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER MATCHES "aCC" AND UNIX)
# HP aC++ compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(HP_ACC 1)
elseif(
CMAKE_${LANG}_COMPILER MATCHES "CC"
AND CMAKE_SYSTEM_NAME MATCHES "IRIX"
2025-06-22 10:44:33 -04:00
AND UNIX
)
2021-08-06 13:08:57 -05:00
# IRIX MIPSpro CC Compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(MIPS 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Intel")
2021-09-20 11:12:06 -05:00
set_compiler_var(INTEL 1)
2021-08-06 13:08:57 -05:00
set(CTYPE ICC)
if("${LANG}" STREQUAL "CXX")
set(CTYPE ICPC)
endif()
2021-09-20 11:12:06 -05:00
set_compiler_var(INTEL_${CTYPE} 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER MATCHES "MSVC")
# Windows Visual Studio compiler
2021-09-20 11:12:06 -05:00
set_compiler_var(MSVC 1)
2021-08-06 13:08:57 -05:00
elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "NVIDIA")
# NVCC
2021-09-20 11:12:06 -05:00
set_compiler_var(NVIDIA 1)
2021-08-06 13:08:57 -05:00
endif()
# set other to no
2021-09-20 11:12:06 -05:00
foreach(
TYPE
GNU
INTEL
INTEL_ICC
INTEL_ICPC
APPLE_CLANG
CLANG
PGI
XLC
HP_ACC
MIPS
MSVC
NVIDIA
2025-06-22 10:44:33 -04:00
HIPCC
)
2021-08-06 13:08:57 -05:00
if(NOT DEFINED CMAKE_${LANG}_COMPILER_IS_${TYPE})
2021-09-20 11:12:06 -05:00
set_compiler_var(${TYPE} 0)
2021-08-06 13:08:57 -05:00
endif()
endforeach()
endforeach()