diff --git a/projects/rocprofiler-systems/.clang-format b/projects/rocprofiler-systems/.clang-format index 0af3d6d017..203eeeef07 100644 --- a/projects/rocprofiler-systems/.clang-format +++ b/projects/rocprofiler-systems/.clang-format @@ -1,65 +1,148 @@ -# requires clang-tidy version 6.0+ +# clang-format v11 --- +Language: Cpp AccessModifierOffset: -4 AlignAfterOpenBracket: Align +AlignConsecutiveMacros: true AlignConsecutiveAssignments: true +AlignConsecutiveBitFields: true AlignConsecutiveDeclarations: true -AlignEscapedNewlinesLeft: false -AlignOperands: true +AlignEscapedNewlines: Right +AlignOperands: Align AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: true AllowShortFunctionsOnASingleLine: All -AllowShortIfStatementsOnASingleLine: false +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: true AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: TopLevel AlwaysBreakAfterReturnType: TopLevel AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: true -BasedOnStyle: Mozilla BinPackArguments: true BinPackParameters: true BraceWrapping: - AfterClass: true - AfterControlStatement: true - AfterEnum: true - AfterFunction: true - AfterNamespace: true - AfterStruct: true - AfterUnion: true - AfterExternBlock: true - BeforeCatch: false - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyRecord: false - SplitEmptyNamespace: false + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: Always + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: false + BeforeElse: true + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeInheritanceComma: true +BreakInheritanceList: BeforeComma +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true ColumnLimit: 90 +CommentPragmas: '^ IWYU pragma:' CompactNamespaces: true ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 0 ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + - Regex: '.*' + Priority: 1 + SortPriority: 0 +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' IndentCaseLabels: true +IndentCaseBlocks: false +IndentGotoLabels: true IndentPPDirectives: AfterHash +IndentExternBlock: AfterExternBlock IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: false -Language: Cpp +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left +ReflowComments: true SortIncludes: true SortUsingDeclarations: true SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: Never +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 SpacesInAngles: false +SpacesInConditionalStatement: false SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false -Standard: Cpp11 +SpaceBeforeSquareBrackets: false +Standard: Latest +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION TabWidth: 4 -UseTab: Never +UseCRLF: false +UseTab: Never +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE ... diff --git a/projects/rocprofiler-systems/.cmake-format.yaml b/projects/rocprofiler-systems/.cmake-format.yaml new file mode 100644 index 0000000000..1aa0292819 --- /dev/null +++ b/projects/rocprofiler-systems/.cmake-format.yaml @@ -0,0 +1,83 @@ +parse: + additional_commands: + checkout_git_submodule: + flags: + - RECURSIVE + kwargs: + RELATIVE_PATH: '*' + WORKING_DIRECTORY: '*' + TEST_FILE: '*' + REPO_URL: '*' + REPO_BRANCH: '*' + ADDITIONAL_COMMANDS: '*' + hosttrace_save_variables: + kwargs: + VARIABLES: '*' + CONDITION: '*' + hosttrace_restore_variables: + kwargs: + VARIABLES: '*' + CONDITION: '*' + override_spec: {} + vartags: [] + proptags: [] +format: + disable: false + line_width: 90 + tab_size: 4 + use_tabchars: false + fractional_tab_policy: use-space + max_subgroups_hwrap: 2 + max_pargs_hwrap: 8 + max_rows_cmdline: 2 + separate_ctrl_name_with_space: false + separate_fn_name_with_space: false + dangle_parens: false + dangle_align: child + min_prefix_chars: 4 + max_prefix_chars: 10 + max_lines_hwrap: 2 + line_ending: unix + command_case: lower + keyword_case: upper + always_wrap: [] + enable_sort: true + autosort: false + require_valid_layout: false + layout_passes: {} +markup: + bullet_char: '*' + enum_char: . + first_comment_is_literal: false + literal_comment_pattern: null + fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$ + ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$ + explicit_trailing_pattern: '#<' + hashruler_min_length: 10 + canonicalize_hashrulers: true + enable_markup: true +lint: + disabled_codes: [] + function_pattern: '[0-9a-z_]+' + macro_pattern: '[0-9A-Z_]+' + global_var_pattern: '[A-Z][0-9A-Z_]+' + internal_var_pattern: _[A-Z][0-9A-Z_]+ + local_var_pattern: '[a-z][a-z0-9_]+' + private_var_pattern: _[0-9a-z_]+ + public_var_pattern: '[A-Z][0-9A-Z_]+' + argument_var_pattern: '[a-z][a-z0-9_]+' + keyword_pattern: '[A-Z][0-9A-Z_]+' + max_conditionals_custom_parser: 2 + min_statement_spacing: 1 + max_statement_spacing: 2 + max_returns: 6 + max_branches: 12 + max_arguments: 5 + max_localvars: 15 + max_statements: 50 +encode: + emit_byteorder_mark: false + input_encoding: utf-8 + output_encoding: utf-8 +misc: + per_command: {} diff --git a/projects/rocprofiler-systems/.github/workflows/formatting.yml b/projects/rocprofiler-systems/.github/workflows/formatting.yml index a052ad748f..6b304706a0 100644 --- a/projects/rocprofiler-systems/.github/workflows/formatting.yml +++ b/projects/rocprofiler-systems/.github/workflows/formatting.yml @@ -10,8 +10,31 @@ on: branches: [ main, develop ] jobs: - formatting: - runs-on: ubuntu-18.04 + cmake-format: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y python3-pip + python3 -m pip install cmake-format + - name: cmake-format + run: | + set +e + cmake-format -i $(find . -type f | egrep 'CMakeLists.txt|\.cmake$') + if [ $(git diff | wc -l) -gt 0 ]; then + echo -e "\nError! CMake code not formatted. Run cmake-format...\n" + echo -e "\nFiles:\n" + git diff --name-only + echo -e "\nFull diff:\n" + git diff + exit 1 + fi + + clang-format: + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 diff --git a/projects/rocprofiler-systems/.github/workflows/linux-ci.yml b/projects/rocprofiler-systems/.github/workflows/linux-ci.yml index ac8712ca50..f40b95240f 100644 --- a/projects/rocprofiler-systems/.github/workflows/linux-ci.yml +++ b/projects/rocprofiler-systems/.github/workflows/linux-ci.yml @@ -63,7 +63,7 @@ jobs: - name: Test working-directory: ${{ github.workspace }}/build run: - ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest.log + ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal.log - name: Test Install run: @@ -78,7 +78,7 @@ jobs: with: name: ctest-log path: | - ${{ github.workspace }}/build/hosttrace-ctest.log + ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal.log ubuntu-bionic: runs-on: ubuntu-18.04 @@ -132,7 +132,7 @@ jobs: - name: Test working-directory: ${{ github.workspace }}/build run: - ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest.log + ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-bionic.log - name: Test Install run: @@ -147,7 +147,7 @@ jobs: with: name: ctest-log path: | - ${{ github.workspace }}/build/hosttrace-ctest.log + ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-bionic.log ubuntu-focal-external: runs-on: ubuntu-20.04 @@ -223,7 +223,7 @@ jobs: run: ldd ./hosttrace && ./hosttrace --help && - ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest.log + ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal-external.log - name: Test Install run: @@ -239,7 +239,7 @@ jobs: with: name: ctest-log path: | - ${{ github.workspace }}/build/hosttrace-ctest.log + ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal-external.log ubuntu-focal-dyninst-package: runs-on: ubuntu-20.04 @@ -308,7 +308,7 @@ jobs: run: ldd ./hosttrace && ./hosttrace --help && - ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest.log + ctest -V --output-log ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal-dyninst-package.log - name: Test Install run: @@ -324,4 +324,4 @@ jobs: with: name: ctest-log path: | - ${{ github.workspace }}/build/hosttrace-ctest.log + ${{ github.workspace }}/build/hosttrace-ctest-ubuntu-focal-dyninst-package.log diff --git a/projects/rocprofiler-systems/CMakeLists.txt b/projects/rocprofiler-systems/CMakeLists.txt index fa153f5a46..1d6006046b 100644 --- a/projects/rocprofiler-systems/CMakeLists.txt +++ b/projects/rocprofiler-systems/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND - CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND CMAKE_CURRENT_SOURCE_DIR STREQUAL + CMAKE_SOURCE_DIR) set(MSG "") message(STATUS "Warning! Building from the source directory is not recommended") message(STATUS "If unintented, please remove 'CMakeCache.txt' and 'CMakeFiles'") @@ -12,21 +12,37 @@ endif() project( hosttrace LANGUAGES C CXX - VERSION 0.0.1) + VERSION 0.0.1) -message(STATUS "[${PROJECT_NAME}] version ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") +message( + STATUS + "[${PROJECT_NAME}] version ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" + ) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) +set(BUILD_SHARED_LIBS + ON + CACHE BOOL "Build shared libraries") +set(BUILD_STATIC_LIBS + OFF + CACHE BOOL "Build static libraries") +set(CMAKE_POSITION_INDEPENDENT_CODE + ON + CACHE BOOL "Build position independent code") if("${CMAKE_BUILD_TYPE}" STREQUAL "") - set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE) + set(CMAKE_BUILD_TYPE + RelWithDebInfo + CACHE STRING "Build type" FORCE) endif() -include(GNUInstallDirs) # install directories -include(MacroUtilities) # various functions and macros -include(Compilers) # compiler identification -include(BuildSettings) # compiler flags +include(GNUInstallDirs) # install directories +include(MacroUtilities) # various functions and macros +include(Compilers) # compiler identification +include(BuildSettings) # compiler flags -set(CMAKE_CXX_STANDARD 17 CACHE STRING "CXX language standard") +set(CMAKE_CXX_STANDARD + 17 + CACHE STRING "CXX language standard") add_option(CMAKE_CXX_STANDARD_REQUIRED "Require C++ language standard" ON) add_option(CMAKE_CXX_EXTENSIONS "Compiler specific language extensions" OFF) add_option(CMAKE_INSTALL_RPATH_USE_LINK_PATH "Enable rpath to linked libraries" ON) @@ -37,10 +53,14 @@ add_option(HOSTTRACE_USE_ROCTRACER "Enable roctracer support" ON) add_option(HOSTTRACE_BUILD_DYNINST "Build dyninst from submodule" OFF) # ensure synced -set(TIMEMORY_USE_MPI ${HOSTTRACE_USE_MPI} CACHE BOOL "Enable MPI support" FORCE) -set(TRANSPOSE_USE_MPI ${HOSTTRACE_USE_MPI} CACHE BOOL "Enable MPI support" FORCE) +set(TIMEMORY_USE_MPI + ${HOSTTRACE_USE_MPI} + CACHE BOOL "Enable MPI support" FORCE) +set(TRANSPOSE_USE_MPI + ${HOSTTRACE_USE_MPI} + CACHE BOOL "Enable MPI support" FORCE) -include(Packages) # finds third-party libraries +include(Packages) # finds third-party libraries hosttrace_activate_clang_tidy() @@ -48,127 +68,127 @@ set(CMAKE_C_VISIBILITY_PRESET "hidden") set(CMAKE_CXX_VISIBILITY_PRESET "hidden") set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# hosttrace-library target +# hosttrace-library target # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# -add_library(hosttrace-library SHARED - ${CMAKE_CURRENT_LIST_DIR}/src/library.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/libmisc.cpp - ${CMAKE_CURRENT_LIST_DIR}/include/library.hpp - ${perfetto_DIR}/sdk/perfetto.cc) +add_library( + hosttrace-library SHARED + ${CMAKE_CURRENT_LIST_DIR}/src/library.cpp ${CMAKE_CURRENT_LIST_DIR}/src/libmisc.cpp + ${CMAKE_CURRENT_LIST_DIR}/include/library.hpp ${perfetto_DIR}/sdk/perfetto.cc) if(HOSTTRACE_USE_ROCTRACER) - target_sources(hosttrace-library PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/include/roctracer.hpp - ${CMAKE_CURRENT_LIST_DIR}/src/roctracer.cpp) + target_sources( + hosttrace-library PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include/roctracer.hpp + ${CMAKE_CURRENT_LIST_DIR}/src/roctracer.cpp) endif() -target_include_directories(hosttrace-library PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/include) +target_include_directories(hosttrace-library PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include) -target_include_directories(hosttrace-library SYSTEM PRIVATE - ${perfetto_DIR}/sdk) +target_include_directories(hosttrace-library SYSTEM PRIVATE ${perfetto_DIR}/sdk) -target_compile_definitions(hosttrace-library PRIVATE - $,CUSTOM_DATA_SOURCE,>) +target_compile_definitions( + hosttrace-library + PRIVATE $,CUSTOM_DATA_SOURCE,>) -target_link_libraries(hosttrace-library PRIVATE - hosttrace::hosttrace-threading - hosttrace::hosttrace-compile-options - hosttrace::hosttrace-roctracer - $ - $ - $ - $,hosttrace::hosttrace-sanitizer,>) +target_link_libraries( + hosttrace-library + PRIVATE hosttrace::hosttrace-threading + hosttrace::hosttrace-compile-options + hosttrace::hosttrace-roctracer + $ + $ + $ + $,hosttrace::hosttrace-sanitizer,>) if(DYNINST_API_RT) get_filename_component(DYNINST_API_RT_DIR "${DYNINST_API_RT}" DIRECTORY) endif() -set_target_properties(hosttrace-library PROPERTIES - OUTPUT_NAME hosttrace - INSTALL_RPATH "\$ORIGIN:${DYNINST_API_RT_DIR}") +set_target_properties( + hosttrace-library PROPERTIES OUTPUT_NAME hosttrace INSTALL_RPATH + "\$ORIGIN:${DYNINST_API_RT_DIR}") install( - TARGETS hosttrace-library + TARGETS hosttrace-library DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# hosttrace-exe target +# hosttrace-exe target # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# -add_executable(hosttrace-exe ${_EXCLUDE} - ${CMAKE_CURRENT_LIST_DIR}/src/hosttrace.cpp +add_executable( + hosttrace-exe + ${_EXCLUDE} ${CMAKE_CURRENT_LIST_DIR}/src/hosttrace.cpp ${CMAKE_CURRENT_LIST_DIR}/include/hosttrace.hpp ${CMAKE_CURRENT_LIST_DIR}/src/hosttrace-details.cpp) -target_include_directories(hosttrace-exe PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/include) +target_include_directories(hosttrace-exe PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include) -target_link_libraries(hosttrace-exe PRIVATE - hosttrace::hosttrace-dyninst - hosttrace::hosttrace-compile-options - $ - $,hosttrace::hosttrace-sanitizer,>) +target_link_libraries( + hosttrace-exe + PRIVATE hosttrace::hosttrace-dyninst hosttrace::hosttrace-compile-options + $ + $,hosttrace::hosttrace-sanitizer,>) -set_target_properties(hosttrace-exe PROPERTIES - OUTPUT_NAME hosttrace - INSTALL_RPATH_USE_LINK_PATH ON - INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:${DYNINST_API_RT_DIR}") +set_target_properties( + hosttrace-exe + PROPERTIES OUTPUT_NAME hosttrace + INSTALL_RPATH_USE_LINK_PATH ON + INSTALL_RPATH "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:${DYNINST_API_RT_DIR}") install( - TARGETS hosttrace-exe + TARGETS hosttrace-exe DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) # build the timemory-avail exe add_dependencies(hosttrace-exe timemory-avail) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# miscellaneous installs +# miscellaneous installs # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# install( - PROGRAMS ${PROJECT_SOURCE_DIR}/scripts/hosttrace-merge.jl + PROGRAMS ${PROJECT_SOURCE_DIR}/scripts/hosttrace-merge.jl DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) install( - FILES ${PROJECT_SOURCE_DIR}/roctrace.cfg + FILES ${PROJECT_SOURCE_DIR}/roctrace.cfg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} OPTIONAL) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# examples +# examples # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# add_subdirectory(examples) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# tests +# tests # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# include(CTest) enable_testing() add_subdirectory(tests) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# packaging +# packaging # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# include(ConfigCPack) diff --git a/projects/rocprofiler-systems/cmake/BuildSettings.cmake b/projects/rocprofiler-systems/cmake/BuildSettings.cmake index ef2624ac4c..369f81ace6 100644 --- a/projects/rocprofiler-systems/cmake/BuildSettings.cmake +++ b/projects/rocprofiler-systems/cmake/BuildSettings.cmake @@ -1,11 +1,11 @@ # include guard include_guard(DIRECTORY) -########################################################################################## +# ######################################################################################## # -# Handles the build settings +# Handles the build settings # -########################################################################################## +# ######################################################################################## include(GNUInstallDirs) include(Compilers) @@ -21,14 +21,18 @@ option(HOSTTRACE_USE_SANITIZER "" OFF) target_compile_definitions(hosttrace-compile-options INTERFACE $<$:DEBUG>) -set(HOSTTRACE_SANITIZER_TYPE "leak" CACHE STRING "Sanitizer type") +set(HOSTTRACE_SANITIZER_TYPE + "leak" + CACHE STRING "Sanitizer type") -#----------------------------------------------------------------------------------------# -# dynamic linking and runtime libraries +# ----------------------------------------------------------------------------------------# +# dynamic linking and runtime libraries # if(CMAKE_DL_LIBS AND NOT "${CMAKE_DL_LIBS}" STREQUAL "dl") # if cmake provides dl library, use that - set(dl_LIBRARY ${CMAKE_DL_LIBS} CACHE FILEPATH "dynamic linking system library") + set(dl_LIBRARY + ${CMAKE_DL_LIBS} + CACHE FILEPATH "dynamic linking system library") endif() foreach(_TYPE dl rt dw) @@ -45,17 +49,12 @@ if(dl_LIBRARY) target_link_libraries(hosttrace-compile-options INTERFACE ${dl_LIBRARY}) endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # set the compiler flags # add_flag_if_avail( - "-W" - "-Wall" - "-Wno-unknown-pragmas" - "-Wno-unused-function" - "-Wno-ignored-attributes" - "-Wno-attributes" - "-Wno-missing-field-initializers") + "-W" "-Wall" "-Wno-unknown-pragmas" "-Wno-unused-function" "-Wno-ignored-attributes" + "-Wno-attributes" "-Wno-missing-field-initializers") if(WIN32) # suggested by MSVC for spectre mitigation in rapidjson implementation @@ -63,37 +62,39 @@ if(WIN32) endif() if(CMAKE_CXX_COMPILER_IS_CLANG) - add_cxx_flag_if_avail( - "-Wno-mismatched-tags") + add_cxx_flag_if_avail("-Wno-mismatched-tags") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # extra flags for debug information in debug or optimized binaries # -add_interface_library(hosttrace-compile-debuginfo - "Attempts to set best flags for more expressive profiling information in debug or optimized binaries") +add_interface_library( + hosttrace-compile-debuginfo + "Attempts to set best flags for more expressive profiling information in debug or optimized binaries" + ) -add_target_flag_if_avail(hosttrace-compile-debuginfo - "-g" - "-fno-omit-frame-pointer" - "-fno-optimize-sibling-calls") +add_target_flag_if_avail(hosttrace-compile-debuginfo "-g" "-fno-omit-frame-pointer" + "-fno-optimize-sibling-calls") if(CMAKE_CUDA_COMPILER_IS_NVIDIA) add_target_cuda_flag(hosttrace-compile-debuginfo "-lineinfo") endif() -target_compile_options(hosttrace-compile-debuginfo INTERFACE - $<$:$<$:-rdynamic>> - $<$:$<$:-rdynamic>>) +target_compile_options( + hosttrace-compile-debuginfo + INTERFACE $<$:$<$:-rdynamic>> + $<$:$<$:-rdynamic>>) if(NOT APPLE) target_link_options(hosttrace-compile-debuginfo INTERFACE - $<$:-rdynamic>) + $<$:-rdynamic>) endif() if(CMAKE_CUDA_COMPILER_IS_NVIDIA) - target_compile_options(hosttrace-compile-debuginfo INTERFACE - $<$:$<$:-Xcompiler=-rdynamic>>) + target_compile_options( + hosttrace-compile-debuginfo + INTERFACE + $<$:$<$:-Xcompiler=-rdynamic>>) endif() if(dl_LIBRARY) @@ -104,34 +105,27 @@ if(rt_LIBRARY) target_link_libraries(hosttrace-compile-debuginfo INTERFACE ${rt_LIBRARY}) endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # non-debug optimizations # add_interface_library(hosttrace-compile-extra "Extra optimization flags") if(NOT HOSTTRACE_USE_COVERAGE) - add_target_flag_if_avail(hosttrace-compile-extra - "-finline-functions" - "-funroll-loops" - "-ftree-vectorize" - "-ftree-loop-optimize" - "-ftree-loop-vectorize") + add_target_flag_if_avail( + hosttrace-compile-extra "-finline-functions" "-funroll-loops" "-ftree-vectorize" + "-ftree-loop-optimize" "-ftree-loop-vectorize") endif() if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND HOSTTRACE_BUILD_EXTRA_OPTIMIZATIONS) - target_link_libraries(hosttrace-compile-options INTERFACE - $) + target_link_libraries(hosttrace-compile-options + INTERFACE $) add_flag_if_avail( - "-fno-signaling-nans" - "-fno-trapping-math" - "-fno-signed-zeros" - "-ffinite-math-only" - "-fno-math-errno" - "-fpredictive-commoning" + "-fno-signaling-nans" "-fno-trapping-math" "-fno-signed-zeros" + "-ffinite-math-only" "-fno-math-errno" "-fpredictive-commoning" "-fvariable-expansion-in-unroller") # add_flag_if_avail("-freciprocal-math" "-fno-signed-zeros" "-mfast-fp") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # debug-safe optimizations # add_cxx_flag_if_avail("-faligned-new") @@ -140,8 +134,7 @@ if(HOSTTRACE_BUILD_LTO) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON) endif() -hosttrace_save_variables(FLTO - VARIABLES CMAKE_CXX_FLAGS) +hosttrace_save_variables(FLTO VARIABLES CMAKE_CXX_FLAGS) set(CMAKE_CXX_FLAGS "-flto=thin ${CMAKE_CXX_FLAGS}") add_interface_library(hosttrace-lto "Adds link-time-optimization flags") @@ -163,14 +156,13 @@ if(HOSTTRACE_BUILD_LTO) target_link_libraries(hosttrace-compile-options INTERFACE hosttrace::hosttrace-lto) endif() -hosttrace_restore_variables(FLTO - VARIABLES CMAKE_CXX_FLAGS) +hosttrace_restore_variables(FLTO VARIABLES CMAKE_CXX_FLAGS) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # print compilation timing reports (Clang compiler) # add_interface_library(hosttrace-compile-timing - "Adds compiler flags which report compilation timing metrics") + "Adds compiler flags which report compilation timing metrics") if(CMAKE_CXX_COMPILER_IS_CLANG) add_target_flag_if_avail(hosttrace-compile-timing "-ftime-trace") if(NOT cxx_hosttrace_compile_timing_ftime_trace) @@ -184,37 +176,33 @@ if(HOSTTRACE_USE_COMPILE_TIMING) target_link_libraries(hosttrace-compile-options INTERFACE hosttrace-compile-timing) endif() -if(NOT cxx_hosttrace_compile_timing_ftime_report AND NOT cxx_hosttrace_compile_timing_ftime_trace) +if(NOT cxx_hosttrace_compile_timing_ftime_report + AND NOT cxx_hosttrace_compile_timing_ftime_trace) add_disabled_interface(hosttrace-compile-timing) endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # developer build flags # add_interface_library(hosttrace-develop-options "Adds developer compiler flags") if(HOSTTRACE_BUILD_DEVELOPER) - add_target_flag_if_avail(hosttrace-develop-options + add_target_flag_if_avail( + hosttrace-develop-options # "-Wabi" - "-Wdouble-promotion" - "-Wshadow" - "-Wextra" - "-Wpedantic" - "-Werror" - "/showIncludes") + "-Wdouble-promotion" "-Wshadow" "-Wextra" "-Wpedantic" "-Werror" "/showIncludes") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # visibility build flags # add_interface_library(hosttrace-default-visibility - "Adds -fvisibility=default compiler flag") + "Adds -fvisibility=default compiler flag") add_interface_library(hosttrace-hidden-visibility - "Adds -fvisibility=hidden compiler flag") + "Adds -fvisibility=hidden compiler flag") -add_target_flag_if_avail(hosttrace-default-visibility - "-fvisibility=default") -add_target_flag_if_avail(hosttrace-hidden-visibility - "-fvisibility=hidden" "-fvisibility-inlines-hidden") +add_target_flag_if_avail(hosttrace-default-visibility "-fvisibility=default") +add_target_flag_if_avail(hosttrace-hidden-visibility "-fvisibility=hidden" + "-fvisibility-inlines-hidden") foreach(_TYPE default hidden) if(NOT cxx_hosttrace_${_TYPE}_visibility_fvisibility_${_TYPE}) @@ -222,7 +210,7 @@ foreach(_TYPE default hidden) endif() endforeach() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # developer build flags # if(dl_LIBRARY) @@ -232,27 +220,41 @@ if(dl_LIBRARY) add_flag_if_avail("-rdynamic") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # sanitizer # -set(HOSTTRACE_SANITIZER_TYPES address memory thread leak undefined unreachable null bounds alignment) -set_property(CACHE HOSTTRACE_SANITIZER_TYPE PROPERTY STRINGS "${HOSTTRACE_SANITIZER_TYPES}") -add_interface_library(hosttrace-sanitizer-compile-options "Adds compiler flags for sanitizers") -add_interface_library(hosttrace-sanitizer - "Adds compiler flags to enable ${HOSTTRACE_SANITIZER_TYPE} sanitizer (-fsanitizer=${HOSTTRACE_SANITIZER_TYPE})") +set(HOSTTRACE_SANITIZER_TYPES + address + memory + thread + leak + undefined + unreachable + null + bounds + alignment) +set_property(CACHE HOSTTRACE_SANITIZER_TYPE PROPERTY STRINGS + "${HOSTTRACE_SANITIZER_TYPES}") +add_interface_library(hosttrace-sanitizer-compile-options + "Adds compiler flags for sanitizers") +add_interface_library( + hosttrace-sanitizer + "Adds compiler flags to enable ${HOSTTRACE_SANITIZER_TYPE} sanitizer (-fsanitizer=${HOSTTRACE_SANITIZER_TYPE})" + ) -set(COMMON_SANITIZER_FLAGS "-fno-optimize-sibling-calls" "-fno-omit-frame-pointer" "-fno-inline-functions") +set(COMMON_SANITIZER_FLAGS "-fno-optimize-sibling-calls" "-fno-omit-frame-pointer" + "-fno-inline-functions") add_target_flag(hosttrace-sanitizer-compile-options ${COMMON_SANITIZER_FLAGS}) foreach(_TYPE ${HOSTTRACE_SANITIZER_TYPES}) set(_FLAG "-fsanitize=${_TYPE}") add_interface_library(hosttrace-${_TYPE}-sanitizer - "Adds compiler flags to enable ${_TYPE} sanitizer (${_FLAG})") + "Adds compiler flags to enable ${_TYPE} sanitizer (${_FLAG})") add_target_flag(hosttrace-${_TYPE}-sanitizer ${_FLAG}) - target_link_libraries(hosttrace-${_TYPE}-sanitizer INTERFACE - hosttrace-sanitizer-compile-options) - set_property(TARGET hosttrace-${_TYPE}-sanitizer PROPERTY - INTERFACE_LINK_OPTIONS ${_FLAG} ${COMMON_SANITIZER_FLAGS}) + target_link_libraries(hosttrace-${_TYPE}-sanitizer + INTERFACE hosttrace-sanitizer-compile-options) + set_property(TARGET hosttrace-${_TYPE}-sanitizer + PROPERTY INTERFACE_LINK_OPTIONS ${_FLAG} ${COMMON_SANITIZER_FLAGS}) endforeach() unset(_FLAG) @@ -261,9 +263,12 @@ unset(COMMON_SANITIZER_FLAGS) if(HOSTTRACE_USE_SANITIZER) foreach(_TYPE ${HOSTTRACE_SANITIZER_TYPE}) if(TARGET hosttrace-${_TYPE}-sanitizer) - target_link_libraries(hosttrace-sanitizer INTERFACE hosttrace-${_TYPE}-sanitizer) + target_link_libraries(hosttrace-sanitizer + INTERFACE hosttrace-${_TYPE}-sanitizer) else() - message(FATAL_ERROR "Error! Target 'hosttrace-${_TYPE}-sanitizer' does not exist!") + message( + FATAL_ERROR "Error! Target 'hosttrace-${_TYPE}-sanitizer' does not exist!" + ) endif() endforeach() else() @@ -271,14 +276,14 @@ else() inform_empty_interface(hosttrace-sanitizer "${HOSTTRACE_SANITIZER_TYPE} sanitizer") endif() -if (MSVC) - # VTune is much more helpful when debug information is included in the - # generated release code. +if(MSVC) + # VTune is much more helpful when debug information is included in the generated + # release code. add_flag_if_avail("/Zi") add_flag_if_avail("/DEBUG") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # user customization # get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) diff --git a/projects/rocprofiler-systems/cmake/Compilers.cmake b/projects/rocprofiler-systems/cmake/Compilers.cmake index 11ab73d12a..27d90a0568 100644 --- a/projects/rocprofiler-systems/cmake/Compilers.cmake +++ b/projects/rocprofiler-systems/cmake/Compilers.cmake @@ -1,28 +1,18 @@ # include guard include_guard(DIRECTORY) -########################################################################################## +# ######################################################################################## # -# Compilers +# Compilers # -########################################################################################## +# ######################################################################################## # -# sets (cached): +# sets (cached): # -# CMAKE_C_COMPILER_IS_ -# CMAKE_CXX_COMPILER_IS_ +# CMAKE_C_COMPILER_IS_ CMAKE_CXX_COMPILER_IS_ # -# where TYPE is: -# - GNU -# - CLANG -# - INTEL -# - INTEL_ICC -# - INTEL_ICPC -# - PGI -# - XLC -# - HP_ACC -# - MIPS -# - MSVC +# where TYPE is: - GNU - CLANG - INTEL - INTEL_ICC - INTEL_ICPC - PGI - XLC - HP_ACC - +# MIPS - MSVC # include(CheckCCompilerFlag) @@ -42,28 +32,32 @@ if("${LIBNAME}" STREQUAL "") endif() add_interface_library(${LIBNAME}-compile-options - "Adds the standard set of compiler flags used by timemory") + "Adds the standard set of compiler flags used by timemory") -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro converting string to list -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(to_list _VAR _STR) - STRING(REPLACE " " " " ${_VAR} "${_STR}") - STRING(REPLACE " " ";" ${_VAR} "${_STR}") -endmacro(to_list _VAR _STR) + string(REPLACE " " " " ${_VAR} "${_STR}") + string(REPLACE " " ";" ${_VAR} "${_STR}") +endmacro( + to_list + _VAR + _STR) - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro converting string to list -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(to_string _VAR _STR) - STRING(REPLACE ";" " " ${_VAR} "${_STR}") -endmacro(to_string _VAR _STR) + string(REPLACE ";" " " ${_VAR} "${_STR}") +endmacro( + to_string + _VAR + _STR) - -#----------------------------------------------------------------------------------------# -# Macro to add to string -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# +# Macro to add to string +# ----------------------------------------------------------------------------------------# macro(add _VAR _FLAG) if(NOT "${_FLAG}" STREQUAL "") if("${${_VAR}}" STREQUAL "") @@ -74,10 +68,9 @@ macro(add _VAR _FLAG) endif() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro to remove duplicates from string -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(set_no_duplicates _VAR) if(NOT "${ARGN}" STREQUAL "") set(${_VAR} "${ARGN}") @@ -91,40 +84,37 @@ macro(set_no_duplicates _VAR) endif(NOT "${${_VAR}}" STREQUAL "") endmacro(set_no_duplicates _VAR) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # call before running check_{c,cxx}_compiler_flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(hosttrace_begin_flag_check) if(HOSTTRACE_QUIET_CONFIG) if(NOT DEFINED CMAKE_REQUIRED_QUIET) set(CMAKE_REQUIRED_QUIET OFF) endif() - hosttrace_save_variables(FLAG_CHECK - VARIABLES CMAKE_REQUIRED_QUIET) + hosttrace_save_variables(FLAG_CHECK VARIABLES CMAKE_REQUIRED_QUIET) set(CMAKE_REQUIRED_QUIET ON) endif() endmacro() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # call after running check_{c,cxx}_compiler_flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(hosttrace_end_flag_check) if(HOSTTRACE_QUIET_CONFIG) - hosttrace_restore_variables(FLAG_CHECK - VARIABLES CMAKE_REQUIRED_QUIET) + hosttrace_restore_variables(FLAG_CHECK VARIABLES CMAKE_REQUIRED_QUIET) endif() endmacro() -########################################################################################## +# ######################################################################################## # -# C compiler flags +# C compiler flags # -########################################################################################## +# ######################################################################################## - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add C flag to target -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_C_FLAG _TARG) string(REPLACE "-" "_" _MAKE_TARG "${_TARG}") list(APPEND HOSTTRACE_MAKE_TARGETS ${_MAKE_TARG}) @@ -133,13 +123,12 @@ macro(ADD_TARGET_C_FLAG _TARG) list(APPEND ${_MAKE_TARG}_C_FLAGS ${ARGN}) endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add C flag w/o check -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_C_FLAG FLAG) - set(_TARG ) - set(_LTARG ) + set(_TARG) + set(_LTARG) if(NOT "${ARGN}" STREQUAL "") set(_TARG ${ARGN}) string(TOLOWER "_${ARGN}" _LTARG) @@ -157,17 +146,16 @@ macro(ADD_C_FLAG FLAG) unset(_LTARG) endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check C flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_C_FLAG_IF_AVAIL FLAG) set(_ENABLE ON) if(DEFINED HOSTTRACE_BUILD_C AND NOT HOSTTRACE_BUILD_C) set(_ENABLE OFF) endif() - set(_TARG ) - set(_LTARG ) + set(_TARG) + set(_LTARG) if(NOT "${ARGN}" STREQUAL "") set(_TARG ${ARGN}) string(TOLOWER "_${ARGN}" _LTARG) @@ -204,28 +192,24 @@ macro(ADD_C_FLAG_IF_AVAIL FLAG) unset(_LTARG) endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add C flag to target -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_C_FLAG_IF_AVAIL _TARG) foreach(_FLAG ${ARGN}) add_c_flag_if_avail(${_FLAG} ${_TARG}) endforeach() endmacro() - -########################################################################################## +# ######################################################################################## # -# CXX compiler flags +# CXX compiler flags # -########################################################################################## +# ######################################################################################## - - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add CXX flag to target -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_CXX_FLAG _TARG) string(REPLACE "-" "_" _MAKE_TARG "${_TARG}") list(APPEND HOSTTRACE_MAKE_TARGETS ${_MAKE_TARG}) @@ -234,7 +218,8 @@ macro(ADD_TARGET_CXX_FLAG _TARG) list(APPEND ${_MAKE_TARG}_CXX_FLAGS ${ARGN}) get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) if(CMAKE_CUDA_COMPILER_IS_NVIDIA) - target_compile_options(${_TARG} INTERFACE $<$:-Xcompiler=${ARGN}>) + target_compile_options(${_TARG} + INTERFACE $<$:-Xcompiler=${ARGN}>) list(APPEND ${_MAKE_TARG}_CUDA_FLAGS -Xcompiler=${ARGN}) elseif(CMAKE_CUDA_COMPILER_IS_CLANG) target_compile_options(${_TARG} INTERFACE $<$:${ARGN}>) @@ -242,13 +227,12 @@ macro(ADD_TARGET_CXX_FLAG _TARG) endif() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add CXX flag w/o check -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_CXX_FLAG FLAG) - set(_TARG ) - set(_LTARG ) + set(_TARG) + set(_LTARG) if(NOT "${ARGN}" STREQUAL "") set(_TARG ${ARGN}) string(TOLOWER "_${ARGN}" _LTARG) @@ -266,13 +250,12 @@ macro(ADD_CXX_FLAG FLAG) unset(_LTARG) endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check CXX flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_CXX_FLAG_IF_AVAIL FLAG) - set(_TARG ) - set(_LTARG ) + set(_TARG) + set(_LTARG) if(NOT "${ARGN}" STREQUAL "") set(_TARG ${ARGN}) string(TOLOWER "_${ARGN}" _LTARG) @@ -306,71 +289,64 @@ macro(ADD_CXX_FLAG_IF_AVAIL FLAG) unset(_LTARG) endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add CXX flag to target -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_CXX_FLAG_IF_AVAIL _TARG) foreach(_FLAG ${ARGN}) add_cxx_flag_if_avail(${_FLAG} ${_TARG}) endforeach() endmacro() - -########################################################################################## +# ######################################################################################## # -# Common +# Common # -########################################################################################## +# ######################################################################################## - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check C and CXX flag to compile-options w/o checking -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_FLAG) foreach(_ARG ${ARGN}) - ADD_C_FLAG("${_ARG}") - ADD_CXX_FLAG("${_ARG}") + add_c_flag("${_ARG}") + add_cxx_flag("${_ARG}") endforeach() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add C and CXX flag w/o checking -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_FLAG _TARG) foreach(_ARG ${ARGN}) - ADD_TARGET_C_FLAG(${_TARG} ${_ARG}) - ADD_TARGET_CXX_FLAG(${_TARG} ${_ARG}) + add_target_c_flag(${_TARG} ${_ARG}) + add_target_cxx_flag(${_TARG} ${_ARG}) endforeach() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check C and CXX flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_FLAG_IF_AVAIL) foreach(_ARG ${ARGN}) - ADD_C_FLAG_IF_AVAIL("${_ARG}") - ADD_CXX_FLAG_IF_AVAIL("${_ARG}") + add_c_flag_if_avail("${_ARG}") + add_cxx_flag_if_avail("${_ARG}") endforeach() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check C and CXX flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_FLAG_IF_AVAIL _TARG) foreach(_ARG ${ARGN}) - ADD_TARGET_C_FLAG_IF_AVAIL(${_TARG} ${_ARG}) - ADD_TARGET_CXX_FLAG_IF_AVAIL(${_TARG} ${_ARG}) + add_target_c_flag_if_avail(${_TARG} ${_ARG}) + add_target_cxx_flag_if_avail(${_TARG} ${_ARG}) endforeach() endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # check flag -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# function(HOSTTRACE_TARGET_FLAG _TARG_TARGET) cmake_parse_arguments(_TARG "IF_AVAIL" "MODE" "FLAGS;LANGUAGES" ${ARGN}) @@ -389,7 +365,8 @@ function(HOSTTRACE_TARGET_FLAG _TARG_TARGET) foreach(_FLAG ${_TARG_FLAGS}) foreach(_LANG ${_TARG_LANGUAGES}) if(NOT _TARG_IF_AVAIL) - target_compile_options(${_TARG_TARGET} ${_TARG_MODE} $<$:${_FLAG}>) + target_compile_options(${_TARG_TARGET} ${_TARG_MODE} + $<$:${_FLAG}>) continue() endif() @@ -409,7 +386,7 @@ function(HOSTTRACE_TARGET_FLAG _TARG_TARGET) hosttrace_end_flag_check() if(${FLAG_NAME}) target_compile_options(${_TARG_TARGET} ${_TARG_MODE} - $<$:${_FLAG}>) + $<$:${_FLAG}>) endif() elseif("${_LANG}" STREQUAL "CXX") string(REGEX REPLACE "^/" "cxx${_LTARG}_" FLAG_NAME "${_FLAG}") @@ -427,13 +404,14 @@ function(HOSTTRACE_TARGET_FLAG _TARG_TARGET) hosttrace_end_flag_check() if(${FLAG_NAME}) target_compile_options(${_TARG_TARGET} ${_TARG_MODE} - $<$:${_FLAG}>) + $<$:${_FLAG}>) if(CMAKE_CUDA_COMPILER_IS_NVIDIA) - target_compile_options(${_TARG_TARGET} ${_TARG_MODE} + target_compile_options( + ${_TARG_TARGET} ${_TARG_MODE} $<$:-Xcompiler=${_FLAG}>) elseif(CMAKE_CUDA_COMPILER_IS_CLANG) target_compile_options(${_TARG_TARGET} ${_TARG_MODE} - $<$:${_FLAG}>) + $<$:${_FLAG}>) endif() endif() endif() @@ -441,10 +419,9 @@ function(HOSTTRACE_TARGET_FLAG _TARG_TARGET) endforeach() endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add CUDA flag to target -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# macro(ADD_TARGET_CUDA_FLAG _TARG) string(REPLACE "-" "_" _MAKE_TARG "${_TARG}") list(APPEND HOSTTRACE_MAKE_TARGETS ${_MAKE_TARG}) @@ -453,46 +430,47 @@ macro(ADD_TARGET_CUDA_FLAG _TARG) list(APPEND ${_MAKE_TARG}_CUDA_FLAGS ${ARGN}) endmacro() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add to any language -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# function(ADD_USER_FLAGS _TARGET _LANGUAGE) - set(_FLAGS ${${_LANGUAGE}FLAGS} $ENV{${_LANGUAGE}FLAGS} - ${${_LANGUAGE}_FLAGS} $ENV{${_LANGUAGE}_FLAGS}) + set(_FLAGS ${${_LANGUAGE}FLAGS} $ENV{${_LANGUAGE}FLAGS} ${${_LANGUAGE}_FLAGS} + $ENV{${_LANGUAGE}_FLAGS}) string(REPLACE " " ";" _FLAGS "${_FLAGS}") set(${PROJECT_NAME}_${_LANGUAGE}_FLAGS - ${${PROJECT_NAME}_${_LANGUAGE}_FLAGS} ${_FLAGS} PARENT_SCOPE) + ${${PROJECT_NAME}_${_LANGUAGE}_FLAGS} ${_FLAGS} + PARENT_SCOPE) set(${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS - ${${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS} ${_FLAGS} PARENT_SCOPE) + ${${PROJECT_NAME}_${_LANGUAGE}_COMPILE_OPTIONS} ${_FLAGS} + PARENT_SCOPE) - target_compile_options(${_TARGET} INTERFACE - $<$:${_FLAGS}>) + target_compile_options(${_TARGET} + INTERFACE $<$:${_FLAGS}>) endfunction() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # add compiler definition -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# function(HOSTTRACE_TARGET_COMPILE_DEFINITIONS _TARG _VIS) foreach(_DEF ${ARGN}) - target_compile_definitions(${_TARG} ${_VIS} - $<$:${_DEF}>) + target_compile_definitions(${_TARG} ${_VIS} $<$:${_DEF}>) if(CMAKE_CUDA_COMPILER_IS_NVIDIA) target_compile_definitions(${_TARG} ${_VIS} - $<$:${_DEF}>) + $<$:${_DEF}>) elseif(CMAKE_CUDA_COMPILER_IS_CLANG) target_compile_definitions(${_TARG} ${_VIS} - $<$:${_DEF}>) + $<$:${_DEF}>) endif() endforeach() endfunction() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # determine compiler types for each language -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) foreach(LANG C CXX CUDA) @@ -505,95 +483,110 @@ foreach(LANG C CXX CUDA) endif() function(SET_COMPILER_VAR VAR _BOOL) - set(CMAKE_${LANG}_COMPILER_IS_${VAR} ${_BOOL} CACHE INTERNAL - "CMake ${LANG} compiler identification (${VAR})" FORCE) + set(CMAKE_${LANG}_COMPILER_IS_${VAR} + ${_BOOL} + CACHE INTERNAL "CMake ${LANG} compiler identification (${VAR})" FORCE) mark_as_advanced(CMAKE_${LANG}_COMPILER_IS_${VAR}) endfunction() if(("${LANG}" STREQUAL "C" AND CMAKE_COMPILER_IS_GNUCC) - OR - ("${LANG}" STREQUAL "CXX" AND CMAKE_COMPILER_IS_GNUCXX)) + OR ("${LANG}" STREQUAL "CXX" AND CMAKE_COMPILER_IS_GNUCXX)) # GNU compiler - SET_COMPILER_VAR( GNU 1) + set_compiler_var(GNU 1) elseif(CMAKE_${LANG}_COMPILER MATCHES "icc.*") # Intel icc compiler - SET_COMPILER_VAR( INTEL 1) - SET_COMPILER_VAR( INTEL_ICC 1) + set_compiler_var(INTEL 1) + set_compiler_var(INTEL_ICC 1) elseif(CMAKE_${LANG}_COMPILER MATCHES "icpc.*") # Intel icpc compiler - SET_COMPILER_VAR( INTEL 1) - SET_COMPILER_VAR( INTEL_ICPC 1) + set_compiler_var(INTEL 1) + set_compiler_var(INTEL_ICPC 1) elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "AppleClang") # Clang/LLVM compiler - SET_COMPILER_VAR( CLANG 1) - SET_COMPILER_VAR( APPLE_CLANG 1) - + set_compiler_var(CLANG 1) + set_compiler_var(APPLE_CLANG 1) elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Clang") # Clang/LLVM compiler - SET_COMPILER_VAR( CLANG 1) + set_compiler_var(CLANG 1) # HIP Clang compiler if(CMAKE_${LANG}_COMPILER MATCHES "hipcc") - SET_COMPILER_VAR( HIPCC 1) + set_compiler_var(HIPCC 1) endif() elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "PGI") # PGI compiler - SET_COMPILER_VAR( PGI 1) + set_compiler_var(PGI 1) elseif(CMAKE_${LANG}_COMPILER MATCHES "xlC" AND UNIX) # IBM xlC compiler - SET_COMPILER_VAR( XLC 1) + set_compiler_var(XLC 1) elseif(CMAKE_${LANG}_COMPILER MATCHES "aCC" AND UNIX) # HP aC++ compiler - SET_COMPILER_VAR( HP_ACC 1) + set_compiler_var(HP_ACC 1) - elseif(CMAKE_${LANG}_COMPILER MATCHES "CC" AND - CMAKE_SYSTEM_NAME MATCHES "IRIX" AND UNIX) + elseif( + CMAKE_${LANG}_COMPILER MATCHES "CC" + AND CMAKE_SYSTEM_NAME MATCHES "IRIX" + AND UNIX) # IRIX MIPSpro CC Compiler - SET_COMPILER_VAR( MIPS 1) + set_compiler_var(MIPS 1) elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "Intel") - SET_COMPILER_VAR( INTEL 1) + set_compiler_var(INTEL 1) set(CTYPE ICC) if("${LANG}" STREQUAL "CXX") set(CTYPE ICPC) endif() - SET_COMPILER_VAR( INTEL_${CTYPE} 1) + set_compiler_var(INTEL_${CTYPE} 1) elseif(CMAKE_${LANG}_COMPILER MATCHES "MSVC") # Windows Visual Studio compiler - SET_COMPILER_VAR( MSVC 1) + set_compiler_var(MSVC 1) elseif(CMAKE_${LANG}_COMPILER_ID MATCHES "NVIDIA") # NVCC - SET_COMPILER_VAR( NVIDIA 1) + set_compiler_var(NVIDIA 1) endif() # set other to no - foreach(TYPE GNU INTEL INTEL_ICC INTEL_ICPC APPLE_CLANG CLANG PGI XLC HP_ACC MIPS MSVC NVIDIA HIPCC) + foreach( + TYPE + GNU + INTEL + INTEL_ICC + INTEL_ICPC + APPLE_CLANG + CLANG + PGI + XLC + HP_ACC + MIPS + MSVC + NVIDIA + HIPCC) if(NOT DEFINED CMAKE_${LANG}_COMPILER_IS_${TYPE}) - SET_COMPILER_VAR(${TYPE} 0) + set_compiler_var(${TYPE} 0) endif() endforeach() diff --git a/projects/rocprofiler-systems/cmake/ConfigCPack.cmake b/projects/rocprofiler-systems/cmake/ConfigCPack.cmake index 88a5c1c7d3..eecf9b5f7c 100644 --- a/projects/rocprofiler-systems/cmake/ConfigCPack.cmake +++ b/projects/rocprofiler-systems/cmake/ConfigCPack.cmake @@ -1,17 +1,32 @@ - # Add packaging directives for timemory set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Runtime instrumentation and binary rewriting for Perfetto via Dyninst") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "Runtime instrumentation and binary rewriting for Perfetto via Dyninst") set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") set(CPACK_PACKAGE_CONTACT "jonathan.madsen@amd.com") set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") +if(DYNINST_BUILD_BOOST + OR DYNINST_BUILD_TBB + OR DYNINST_BUILD_ELFUTILS + OR DYNINST_BUILD_LIBIBERTY) + set(CPACK_INSTALLED_DIRECTORIES + "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/include" "lib/dyninst-tpls/include" + "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/lib" "lib/dyninst-tpls/lib") +endif() + +if(DYNINST_BUILD_ELFUTILS) + list(APPEND CPACK_INSTALLED_DIRECTORIES + "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/bin" "lib/dyninst-tpls/bin" + "${CMAKE_INSTALL_PREFIX}/lib/dyninst-tpls/share" "lib/dyninst-tpls/share") +endif() + # Debian package specific variables set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/AARInternal/hosttrace-dyninst") -if (DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) +if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE}) else() set(CPACK_DEBIAN_PACKAGE_RELEASE "local") @@ -34,7 +49,9 @@ if(CPACK_RPM_PACKAGE_RELEASE) endif() # Prepare final version for the CPACK use -set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") +set(CPACK_PACKAGE_VERSION + "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" + ) # Set the names now using CPACK utility set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") diff --git a/projects/rocprofiler-systems/cmake/Findroctracer.cmake b/projects/rocprofiler-systems/cmake/Findroctracer.cmake index cce0225dc0..672c1fa913 100644 --- a/projects/rocprofiler-systems/cmake/Findroctracer.cmake +++ b/projects/rocprofiler-systems/cmake/Findroctracer.cmake @@ -1,65 +1,72 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying file +# Copyright.txt or https://cmake.org/licensing for details. include(FindPackageHandleStandardArgs) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# set(_ROCM_PATHS $ENV{ROCM_HOME} /opt/rocm /opt/rocm/roctracer) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# -find_path(roctracer_ROOT_DIR - NAMES include/roctracer.h - HINTS ${_ROCM_PATHS} - PATHS ${_ROCM_PATHS} - PATH_SUFFIXES roctracer) +find_path( + roctracer_ROOT_DIR + NAMES include/roctracer.h + HINTS ${_ROCM_PATHS} + PATHS ${_ROCM_PATHS} + PATH_SUFFIXES roctracer) mark_as_advanced(roctracer_ROOT_DIR) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# -find_path(roctracer_INCLUDE_DIR - NAMES roctracer.h - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES roctracer/include include) +find_path( + roctracer_INCLUDE_DIR + NAMES roctracer.h + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES roctracer/include include) mark_as_advanced(roctracer_INCLUDE_DIR) -find_path(roctracer_hsa_INCLUDE_DIR - NAMES hsa.h - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES include include/hsa) +find_path( + roctracer_hsa_INCLUDE_DIR + NAMES hsa.h + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES include include/hsa) mark_as_advanced(roctracer_hsa_INCLUDE_DIR) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# -find_library(roctracer_LIBRARY - NAMES roctracer64 roctracer - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES lib lib64) +find_library( + roctracer_LIBRARY + NAMES roctracer64 roctracer + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES lib lib64) -find_library(roctracer_roctx_LIBRARY - NAMES roctx64 roctx - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES lib lib64) +find_library( + roctracer_roctx_LIBRARY + NAMES roctx64 roctx + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES lib lib64) -find_library(roctracer_kfdwrapper_LIBRARY - NAMES kfdwrapper64 kfdwrapper - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES lib lib64) +find_library( + roctracer_kfdwrapper_LIBRARY + NAMES kfdwrapper64 kfdwrapper + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES lib lib64) -find_library(roctracer_hsakmt_LIBRARY - NAMES hsakmt - HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} - PATH_SUFFIXES lib lib64) +find_library( + roctracer_hsakmt_LIBRARY + NAMES hsakmt + HINTS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATHS ${roctracer_ROOT_DIR} ${_ROCM_PATHS} + PATH_SUFFIXES lib lib64) if(roctracer_LIBRARY) get_filename_component(roctracer_LIBRARY_DIR "${roctracer_LIBRARY}" PATH CACHE) @@ -67,16 +74,13 @@ endif() mark_as_advanced(roctracer_LIBRARY roctracer_roctx_LIBRARY) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# -find_package_handle_standard_args(roctracer DEFAULT_MSG - roctracer_ROOT_DIR - roctracer_INCLUDE_DIR - roctracer_hsa_INCLUDE_DIR - roctracer_LIBRARY - roctracer_roctx_LIBRARY) +find_package_handle_standard_args( + roctracer DEFAULT_MSG roctracer_ROOT_DIR roctracer_INCLUDE_DIR + roctracer_hsa_INCLUDE_DIR roctracer_LIBRARY roctracer_roctx_LIBRARY) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# if(roctracer_FOUND) add_library(roctracer::roctracer INTERFACE IMPORTED) @@ -85,16 +89,23 @@ if(roctracer_FOUND) set(roctracer_LIBRARIES ${roctracer_LIBRARY} ${roctracer_roctx_LIBRARY}) set(roctracer_LIBRARY_DIRS ${roctracer_LIBRARY_DIR}) - target_include_directories(roctracer::roctracer INTERFACE ${roctracer_INCLUDE_DIR} ${roctracer_hsa_INCLUDE_DIR}) - target_include_directories(roctracer::roctx INTERFACE ${roctracer_INCLUDE_DIR} ${roctracer_hsa_INCLUDE_DIR}) + target_include_directories( + roctracer::roctracer INTERFACE ${roctracer_INCLUDE_DIR} + ${roctracer_hsa_INCLUDE_DIR}) + target_include_directories(roctracer::roctx INTERFACE ${roctracer_INCLUDE_DIR} + ${roctracer_hsa_INCLUDE_DIR}) target_link_libraries(roctracer::roctracer INTERFACE ${roctracer_LIBRARY}) target_link_libraries(roctracer::roctx INTERFACE ${roctracer_roctx_LIBRARY}) if(roctracer_kfdwrapper_LIBRARY) list(APPEND roctracer_LIBRARIES ${roctracer_kfdwrapper_LIBRARY}) - target_compile_definitions(roctracer::roctracer INTERFACE HOSTTRACE_ROCTRACER_LIBKFDWRAPPER=\"${roctracer_kfdwrapper_LIBRARY}\") - target_link_libraries(roctracer::roctracer INTERFACE ${roctracer_kfdwrapper_LIBRARY}) + target_compile_definitions( + roctracer::roctracer + INTERFACE + HOSTTRACE_ROCTRACER_LIBKFDWRAPPER=\"${roctracer_kfdwrapper_LIBRARY}\") + target_link_libraries(roctracer::roctracer + INTERFACE ${roctracer_kfdwrapper_LIBRARY}) target_link_libraries(roctracer::roctx INTERFACE ${roctracer_kfdwrapper_LIBRARY}) endif() @@ -106,8 +117,8 @@ if(roctracer_FOUND) endif() -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# unset(_ROCM_PATHS) -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# diff --git a/projects/rocprofiler-systems/cmake/MacroUtilities.cmake b/projects/rocprofiler-systems/cmake/MacroUtilities.cmake index a987a9b638..f1c69591a6 100644 --- a/projects/rocprofiler-systems/cmake/MacroUtilities.cmake +++ b/projects/rocprofiler-systems/cmake/MacroUtilities.cmake @@ -18,25 +18,26 @@ string(TOLOWER "${PROJECT_NAME}" PROJECT_NAME_LC) unset(${PROJECT_NAME_UC}_COMPILED_LIBRARIES CACHE) unset(${PROJECT_NAME_UC}_INTERFACE_LIBRARIES CACHE) -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # message which handles HOSTTRACE_QUIET_CONFIG settings -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # -FUNCTION(HOSTTRACE_MESSAGE TYPE) +function(HOSTTRACE_MESSAGE TYPE) if(NOT HOSTTRACE_QUIET_CONFIG) message(${TYPE} "[hosttrace] ${ARGN}") endif() -ENDFUNCTION() +endfunction() -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # Save a set of variables with the given prefix -#----------------------------------------------------------------------- -MACRO(HOSTTRACE_SAVE_VARIABLES _PREFIX) +# ----------------------------------------------------------------------- +macro(HOSTTRACE_SAVE_VARIABLES _PREFIX) # parse args - cmake_parse_arguments(SAVE - "" # options - "CONDITION" # single value args - "VARIABLES" # multiple value args + cmake_parse_arguments( + SAVE + "" # options + "CONDITION" # single value args + "VARIABLES" # multiple value args ${ARGN}) if(DEFINED SAVE_CONDITION AND NOT "${SAVE_CONDITION}" STREQUAL "") if(${SAVE_CONDITION}) @@ -59,17 +60,18 @@ MACRO(HOSTTRACE_SAVE_VARIABLES _PREFIX) endif() unset(SAVE_CONDITION) unset(SAVE_VARIABLES) -ENDMACRO() +endmacro() -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # Restore a set of variables with the given prefix -#----------------------------------------------------------------------- -MACRO(HOSTTRACE_RESTORE_VARIABLES _PREFIX) +# ----------------------------------------------------------------------- +macro(HOSTTRACE_RESTORE_VARIABLES _PREFIX) # parse args - cmake_parse_arguments(RESTORE - "" # options - "CONDITION" # single value args - "VARIABLES" # multiple value args + cmake_parse_arguments( + RESTORE + "" # options + "CONDITION" # single value args + "VARIABLES" # multiple value args ${ARGN}) if(DEFINED RESTORE_CONDITION AND NOT "${RESTORE_CONDITION}" STREQUAL "") if(${RESTORE_CONDITION}) @@ -94,125 +96,118 @@ MACRO(HOSTTRACE_RESTORE_VARIABLES _PREFIX) endif() unset(RESTORE_CONDITION) unset(RESTORE_VARIABLES) -ENDMACRO() +endmacro() -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # CACHED LIST -#----------------------------------------------------------------------- -# macro set_ifnot( ) -# If variable var is not set, set its value to that provided +# ----------------------------------------------------------------------- +# macro set_ifnot( ) If variable var is not set, set its value to that +# provided # -MACRO(CACHE_LIST _OP _LIST) +macro(CACHE_LIST _OP _LIST) set(_TMP_CACHE_LIST ${${_LIST}}) # apply operation on list list(${_OP} _TMP_CACHE_LIST ${ARGN}) # replace list - set(${_LIST} "${_TMP_CACHE_LIST}" CACHE INTERNAL "" FORCE) -ENDMACRO() + set(${_LIST} + "${_TMP_CACHE_LIST}" + CACHE INTERNAL "" FORCE) +endmacro() - -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # CMAKE EXTENSIONS -#----------------------------------------------------------------------- -# macro set_ifnot( ) -# If variable var is not set, set its value to that provided +# ----------------------------------------------------------------------- +# macro set_ifnot( ) If variable var is not set, set its value to that +# provided # -MACRO(SET_IFNOT _var _value) +macro(SET_IFNOT _var _value) if(NOT DEFINED ${_var}) set(${_var} ${_value} ${ARGN}) endif() -ENDMACRO() +endmacro() - -#----------------------------------------------------------------------- -# macro safe_remove_duplicates() -# ensures remove_duplicates is only called if list has values +# ----------------------------------------------------------------------- +# macro safe_remove_duplicates() ensures remove_duplicates is only called if list +# has values # -MACRO(SAFE_REMOVE_DUPLICATES _list) +macro(SAFE_REMOVE_DUPLICATES _list) if(NOT "${${_list}}" STREQUAL "") list(REMOVE_DUPLICATES ${_list}) endif(NOT "${${_list}}" STREQUAL "") -ENDMACRO() +endmacro() - -#----------------------------------------------------------------------- -# function - capitalize - make a string capitalized (first letter is capital) -# usage: -# capitalize("SHARED" CShared) -# message(STATUS "-- CShared is \"${CShared}\"") -# $ -- CShared is "Shared" -FUNCTION(CAPITALIZE str var) +# ----------------------------------------------------------------------- +# function - capitalize - make a string capitalized (first letter is capital) usage: +# capitalize("SHARED" CShared) message(STATUS "-- CShared is \"${CShared}\"") $ -- CShared +# is "Shared" +function(CAPITALIZE str var) # make string lower string(TOLOWER "${str}" str) string(SUBSTRING "${str}" 0 1 _first) string(TOUPPER "${_first}" _first) string(SUBSTRING "${str}" 1 -1 _remainder) string(CONCAT str "${_first}" "${_remainder}") - set(${var} "${str}" PARENT_SCOPE) -ENDFUNCTION() + set(${var} + "${str}" + PARENT_SCOPE) +endfunction() - -#----------------------------------------------------------------------- -# macro set_ifnot_match( ) -# If variable var is not set, set its value to that provided +# ----------------------------------------------------------------------- +# macro set_ifnot_match( ) If variable var is not set, set its value to that +# provided # -MACRO(SET_IFNOT_MATCH VAR APPEND) +macro(SET_IFNOT_MATCH VAR APPEND) if(NOT "${APPEND}" STREQUAL "") - STRING(REGEX MATCH "${APPEND}" _MATCH "${${VAR}}") + string(REGEX MATCH "${APPEND}" _MATCH "${${VAR}}") if(NOT "${_MATCH}" STREQUAL "") - SET(${VAR} "${${VAR}} ${APPEND}") + set(${VAR} "${${VAR}} ${APPEND}") endif() endif() -ENDMACRO() +endmacro() - -#----------------------------------------------------------------------- -# macro cache_ifnot( ) -# If variable var is not set, set its value to that provided and cache it +# ----------------------------------------------------------------------- +# macro cache_ifnot( ) If variable var is not set, set its value to that +# provided and cache it # -MACRO(CACHE_IFNOT _var _value _type _doc) - if(NOT ${_var} OR NOT ${CACHE_VARIABLES} MATCHES ${_var}) - set(${_var} ${_value} CACHE ${_type} "${_doc}") - endif() -ENDMACRO() +macro(CACHE_IFNOT _var _value _type _doc) + if(NOT ${_var} OR NOT ${CACHE_VARIABLES} MATCHES ${_var}) + set(${_var} + ${_value} + CACHE ${_type} "${_doc}") + endif() +endmacro() - -#----------------------------------------------------------------------- -# function add_enabled_interface() -# Mark an interface library as enabled +# ----------------------------------------------------------------------- +# function add_enabled_interface() Mark an interface library as enabled # -FUNCTION(ADD_ENABLED_INTERFACE _var) +function(ADD_ENABLED_INTERFACE _var) set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_ENABLED_INTERFACES ${_var}) -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------- -# function add_disabled_interface() -# Mark an interface as disabled +# ----------------------------------------------------------------------- +# function add_disabled_interface() Mark an interface as disabled # -FUNCTION(ADD_DISABLED_INTERFACE _var) +function(ADD_DISABLED_INTERFACE _var) get_property(_DISABLED GLOBAL PROPERTY ${PROJECT_NAME}_DISABLED_INTERFACES) if(NOT ${_var} IN_LIST _DISABLED) set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_DISABLED_INTERFACES ${_var}) endif() -ENDFUNCTION() +endfunction() - -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # macro for creating a library target # -FUNCTION(CREATE_EXECUTABLE) - # for include dirs, compile flags, definitions, etc. --> use INTERFACE libs - # and add them to "LINK_LIBRARIES" - # list of arguments taking multiple values - set(multival_args - HEADERS SOURCES PROPERTIES LINK_LIBRARIES INSTALL_DESTINATION) +function(CREATE_EXECUTABLE) + # for include dirs, compile flags, definitions, etc. --> use INTERFACE libs and add + # them to "LINK_LIBRARIES" list of arguments taking multiple values + set(multival_args HEADERS SOURCES PROPERTIES LINK_LIBRARIES INSTALL_DESTINATION) # parse args - cmake_parse_arguments(EXE - "INSTALL;EXCLUDE_FROM_ALL" # options - "TARGET_NAME;" # single value args - "${multival_args}" # multiple value args + cmake_parse_arguments( + EXE + "INSTALL;EXCLUDE_FROM_ALL" # options + "TARGET_NAME;" # single value args + "${multival_args}" # multiple value args ${ARGN}) set(_EXCLUDE) @@ -237,60 +232,59 @@ FUNCTION(CREATE_EXECUTABLE) # Install the exe if(EXE_INSTALL_DESTINATION) install( - TARGETS ${EXE_TARGET_NAME} + TARGETS ${EXE_TARGET_NAME} DESTINATION ${EXE_INSTALL_DESTINATION} OPTIONAL) endif() -ENDFUNCTION() +endfunction() - -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # function add_hosttrace_test_target() # # Creates a target which runs ctest but depends on all the tests being built. # -FUNCTION(ADD_HOSTTRACE_TEST_TARGET) +function(ADD_HOSTTRACE_TEST_TARGET) if(NOT TARGET hosttrace-test) - add_custom_target(hosttrace-test + add_custom_target( + hosttrace-test COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR} --target test WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMENT "Running tests...") endif() -ENDFUNCTION() +endfunction() - -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # macro add_googletest() # -# Adds a unit test and links against googletest. Additional arguments are linked -# against the test. +# Adds a unit test and links against googletest. Additional arguments are linked against +# the test. # -FUNCTION(ADD_HOSTTRACE_GOOGLE_TEST TEST_NAME) +function(ADD_HOSTTRACE_GOOGLE_TEST TEST_NAME) if(NOT HOSTTRACE_BUILD_GOOGLE_TEST) return() endif() - set(_OPTS ) + set(_OPTS) if(NOT HOSTTRACE_BUILD_TESTING) set(_OPTS EXCLUDE_FROM_ALL) endif() add_hosttrace_test_target() include(GoogleTest) # list of arguments taking multiple values - set(multival_args SOURCES DEPENDS PROPERTIES DEFINITIONS LINK_LIBRARIES - COMMAND OPTIONS ENVIRONMENT) + set(multival_args SOURCES DEPENDS PROPERTIES DEFINITIONS LINK_LIBRARIES COMMAND + OPTIONS ENVIRONMENT) # parse args cmake_parse_arguments(TEST "DISCOVER_TESTS;ADD_TESTS;MPI" "NPROCS;TIMEOUT;TARGET" - "${multival_args}" ${ARGN}) + "${multival_args}" ${ARGN}) if(NOT TARGET google-test-debug-options) add_library(google-test-debug-options INTERFACE) - target_compile_definitions(google-test-debug-options INTERFACE - $<$:DEBUG> HOSTTRACE_TESTING) + target_compile_definitions(google-test-debug-options + INTERFACE $<$:DEBUG> HOSTTRACE_TESTING) endif() if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR HOSTTRACE_USE_COVERAGE) # create a pre-processor which relaxes pass/fail when converage is enabled - target_compile_definitions(google-test-debug-options INTERFACE - HOSTTRACE_RELAXED_TESTING) + target_compile_definitions(google-test-debug-options + INTERFACE HOSTTRACE_RELAXED_TESTING) endif() list(APPEND TEST_LINK_LIBRARIES google-test-debug-options) @@ -299,12 +293,19 @@ FUNCTION(ADD_HOSTTRACE_GOOGLE_TEST TEST_NAME) endif() if(TEST_SOURCES AND NOT TARGET ${TEST_TARGET}) - CREATE_EXECUTABLE(${_OPTS} - TARGET_NAME ${TEST_TARGET} - OUTPUT_NAME ${TEST_TARGET} - SOURCES ${TEST_SOURCES} - LINK_LIBRARIES hosttrace-google-test ${TEST_LINK_LIBRARIES} - PROPERTIES "${TEST_PROPERTIES}") + create_executable( + ${_OPTS} + TARGET_NAME + ${TEST_TARGET} + OUTPUT_NAME + ${TEST_TARGET} + SOURCES + ${TEST_SOURCES} + LINK_LIBRARIES + hosttrace-google-test + ${TEST_LINK_LIBRARIES} + PROPERTIES + "${TEST_PROPERTIES}") target_compile_definitions(${TEST_TARGET} PUBLIC ${TEST_DEFINITIONS}) @@ -312,18 +313,20 @@ FUNCTION(ADD_HOSTTRACE_GOOGLE_TEST TEST_NAME) add_dependencies(hosttrace-test ${TEST_TARGET}) if(WIN32) - set_target_properties(${TEST_TARGET} - PROPERTIES - FOLDER tests - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/archive - PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime) + set_target_properties( + ${TEST_TARGET} + PROPERTIES FOLDER tests + RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime + LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime + ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/archive + PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/outputs/runtime) endif() endif() set(TEST_LAUNCHER) - if(HOSTTRACE_USE_MPI AND TEST_MPI AND MPIEXEC_EXECUTABLE) + if(HOSTTRACE_USE_MPI + AND TEST_MPI + AND MPIEXEC_EXECUTABLE) if(NOT TEST_NPROCS) set(TEST_NPROCS 2) endif() @@ -351,67 +354,63 @@ FUNCTION(ADD_HOSTTRACE_GOOGLE_TEST TEST_NAME) if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR HOSTTRACE_USE_COVERAGE) if(TEST_ENVIRONMENT) - set(TEST_ENVIRONMENT "HOSTTRACE_DEBUG=ON;HOSTTRACE_VERBOSE=6;${TEST_ENVIRONMENT}") + set(TEST_ENVIRONMENT + "HOSTTRACE_DEBUG=ON;HOSTTRACE_VERBOSE=6;${TEST_ENVIRONMENT}") else() set(TEST_ENVIRONMENT "HOSTTRACE_DEBUG=ON;HOSTTRACE_VERBOSE=6") endif() endif() if(TEST_DISCOVER_TESTS) - GTEST_DISCOVER_TESTS(${TEST_TARGET} - TEST_LIST ${TEST_NAME}_TESTS - ${TEST_OPTIONS} - DISCOVERY_TIMEOUT 15 + gtest_discover_tests( + ${TEST_TARGET} + TEST_LIST ${TEST_NAME}_TESTS ${TEST_OPTIONS} DISCOVERY_TIMEOUT 15 WORKING_DIRECTORY ${WORKING_DIR}) - SET_TESTS_PROPERTIES(${${TEST_NAME}_TESTS} PROPERTIES - ENVIRONMENT "${TEST_ENVIRONMENT}" - TIMEOUT ${TEST_TIMEOUT}) + set_tests_properties( + ${${TEST_NAME}_TESTS} PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT}" TIMEOUT + ${TEST_TIMEOUT}) elseif(TEST_ADD_TESTS) - GTEST_ADD_TESTS(TARGET ${TEST_TARGET} - TEST_LIST ${TEST_NAME}_TESTS - ${TEST_OPTIONS} + gtest_add_tests( + TARGET ${TEST_TARGET} + TEST_LIST ${TEST_NAME}_TESTS ${TEST_OPTIONS} WORKING_DIRECTORY ${WORKING_DIR}) - SET_TESTS_PROPERTIES(${${TEST_NAME}_TESTS} PROPERTIES - ENVIRONMENT "${TEST_ENVIRONMENT}" - TIMEOUT ${TEST_TIMEOUT}) + set_tests_properties( + ${${TEST_NAME}_TESTS} PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT}" TIMEOUT + ${TEST_TIMEOUT}) else() - ADD_TEST( - NAME ${TEST_NAME} - COMMAND ${TEST_COMMAND} - WORKING_DIRECTORY ${WORKING_DIR} - ${TEST_OPTIONS}) - SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES - ENVIRONMENT "${TEST_ENVIRONMENT}" - TIMEOUT ${TEST_TIMEOUT}) + add_test( + NAME ${TEST_NAME} + COMMAND ${TEST_COMMAND} + WORKING_DIRECTORY ${WORKING_DIR} ${TEST_OPTIONS}) + set_tests_properties(${TEST_NAME} PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT}" + TIMEOUT ${TEST_TIMEOUT}) endif() if(TEST_DEPENDS) - set_property(TEST ${TEST_NAME} APPEND PROPERTY DEPENDS ${TEST_DEPENDS}) + set_property( + TEST ${TEST_NAME} + APPEND + PROPERTY DEPENDS ${TEST_DEPENDS}) endif() -ENDFUNCTION() +endfunction() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro CHECKOUT_GIT_SUBMODULE() # -# Run "git submodule update" if a file in a submodule does not exist +# Run "git submodule update" if a file in a submodule does not exist # -# ARGS: -# RECURSIVE (option) -- add "--recursive" flag -# RELATIVE_PATH (one value) -- typically the relative path to submodule -# from PROJECT_SOURCE_DIR -# WORKING_DIRECTORY (one value) -- (default: PROJECT_SOURCE_DIR) -# TEST_FILE (one value) -- file to check for (default: CMakeLists.txt) -# ADDITIONAL_CMDS (many value) -- any addition commands to pass +# ARGS: RECURSIVE (option) -- add "--recursive" flag RELATIVE_PATH (one value) -- +# typically the relative path to submodule from PROJECT_SOURCE_DIR WORKING_DIRECTORY (one +# value) -- (default: PROJECT_SOURCE_DIR) TEST_FILE (one value) -- file to check for +# (default: CMakeLists.txt) ADDITIONAL_CMDS (many value) -- any addition commands to pass # -FUNCTION(CHECKOUT_GIT_SUBMODULE) +function(CHECKOUT_GIT_SUBMODULE) # parse args cmake_parse_arguments( - CHECKOUT - "RECURSIVE" + CHECKOUT "RECURSIVE" "RELATIVE_PATH;WORKING_DIRECTORY;TEST_FILE;REPO_URL;REPO_BRANCH" - "ADDITIONAL_CMDS" - ${ARGN}) + "ADDITIONAL_CMDS" ${ARGN}) if(NOT CHECKOUT_WORKING_DIRECTORY) set(CHECKOUT_WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) @@ -435,8 +434,8 @@ FUNCTION(CHECKOUT_GIT_SUBMODULE) endif() endif() - # if this file exists --> project has been checked out - # if not exists --> not been checked out + # if this file exists --> project has been checked out if not exists --> not been + # checked out set(_TEST_FILE "${_DIR}/${CHECKOUT_TEST_FILE}") # assuming a .gitmodules file exists set(_SUBMODULE "${PROJECT_SOURCE_DIR}/.gitmodules") @@ -466,11 +465,9 @@ FUNCTION(CHECKOUT_GIT_SUBMODULE) if(NOT _TEST_FILE_EXISTS AND _SUBMODULE_EXISTS) # perform the checkout execute_process( - COMMAND - ${GIT_EXECUTABLE} submodule update --init ${_RECURSE} + COMMAND ${GIT_EXECUTABLE} submodule update --init ${_RECURSE} ${CHECKOUT_ADDITIONAL_CMDS} ${CHECKOUT_RELATIVE_PATH} - WORKING_DIRECTORY - ${CHECKOUT_WORKING_DIRECTORY} + WORKING_DIRECTORY ${CHECKOUT_WORKING_DIRECTORY} RESULT_VARIABLE RET) # check the return code @@ -485,7 +482,8 @@ FUNCTION(CHECKOUT_GIT_SUBMODULE) endif() if(NOT _TEST_FILE_EXISTS AND _HAS_REPO_URL) - message(STATUS "Checking out '${CHECKOUT_REPO_URL}' @ '${CHECKOUT_REPO_BRANCH}'...") + message( + STATUS "Checking out '${CHECKOUT_REPO_URL}' @ '${CHECKOUT_REPO_BRANCH}'...") # remove the existing directory if(EXISTS "${_DIR}") @@ -496,26 +494,26 @@ FUNCTION(CHECKOUT_GIT_SUBMODULE) execute_process( COMMAND ${GIT_EXECUTABLE} clone -b ${CHECKOUT_REPO_BRANCH} - ${CHECKOUT_ADDITIONAL_CMDS} - ${CHECKOUT_REPO_URL} ${CHECKOUT_RELATIVE_PATH} - WORKING_DIRECTORY - ${CHECKOUT_WORKING_DIRECTORY} + ${CHECKOUT_ADDITIONAL_CMDS} ${CHECKOUT_REPO_URL} ${CHECKOUT_RELATIVE_PATH} + WORKING_DIRECTORY ${CHECKOUT_WORKING_DIRECTORY} RESULT_VARIABLE RET) # perform the submodule update - if(CHECKOUT_RECURSIVE AND EXISTS "${_DIR}" AND IS_DIRECTORY "${_DIR}") + if(CHECKOUT_RECURSIVE + AND EXISTS "${_DIR}" + AND IS_DIRECTORY "${_DIR}") execute_process( - COMMAND - ${GIT_EXECUTABLE} submodule update --init ${_RECURSE} - WORKING_DIRECTORY - ${_DIR} + COMMAND ${GIT_EXECUTABLE} submodule update --init ${_RECURSE} + WORKING_DIRECTORY ${_DIR} RESULT_VARIABLE RET) endif() # check the return code if(RET GREATER 0) - set(_CMD "${GIT_EXECUTABLE} clone -b ${CHECKOUT_REPO_BRANCH} - ${CHECKOUT_ADDITIONAL_CMDS} ${CHECKOUT_REPO_URL} ${CHECKOUT_RELATIVE_PATH}") + set(_CMD + "${GIT_EXECUTABLE} clone -b ${CHECKOUT_REPO_BRANCH} + ${CHECKOUT_ADDITIONAL_CMDS} ${CHECKOUT_REPO_URL} ${CHECKOUT_RELATIVE_PATH}" + ) message(STATUS "function(CHECKOUT_GIT_SUBMODULE) failed.") message(FATAL_ERROR "Command: \"${_CMD}\"") else() @@ -524,64 +522,72 @@ FUNCTION(CHECKOUT_GIT_SUBMODULE) endif() if(NOT EXISTS "${_TEST_FILE}" OR NOT _TEST_FILE_EXISTS) - message(FATAL_ERROR "Error checking out submodule: '${CHECKOUT_RELATIVE_PATH}' to '${_DIR}'") + message( + FATAL_ERROR + "Error checking out submodule: '${CHECKOUT_RELATIVE_PATH}' to '${_DIR}'") endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # try to find a package quietly # -FUNCTION(HOSTTRACE_TEST_FIND_PACKAGE PACKAGE_NAME OUTPUT_VAR) - cmake_parse_arguments( - PACKAGE "" "" "UNSET" ${ARGN}) +function(HOSTTRACE_TEST_FIND_PACKAGE PACKAGE_NAME OUTPUT_VAR) + cmake_parse_arguments(PACKAGE "" "" "UNSET" ${ARGN}) find_package(${PACKAGE_NAME} QUIET ${PACKAGE_UNPARSED_ARGUMENTS}) if(NOT ${PACKAGE_NAME}_FOUND) - set(${OUTPUT_VAR} OFF PARENT_SCOPE) + set(${OUTPUT_VAR} + OFF + PARENT_SCOPE) else() - set(${OUTPUT_VAR} ON PARENT_SCOPE) + set(${OUTPUT_VAR} + ON + PARENT_SCOPE) endif() foreach(_ARG ${PACKAGE_UNSET} FIND_PACKAGE_MESSAGE_DETAILS_${PACKAGE_NAME}) unset(${_ARG} CACHE) endforeach() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro to add an interface lib # -MACRO(ADD_INTERFACE_LIBRARY _TARGET) +macro(ADD_INTERFACE_LIBRARY _TARGET) add_library(${_TARGET} INTERFACE) add_library(${PROJECT_NAME}::${_TARGET} ALIAS ${_TARGET}) cache_list(APPEND ${PROJECT_NAME_UC}_INTERFACE_LIBRARIES ${_TARGET}) install( - TARGETS ${_TARGET} + TARGETS ${_TARGET} DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT ${PROJECT_NAME}-library-depends + EXPORT ${PROJECT_NAME}-library-depends OPTIONAL) add_enabled_interface(${_TARGET}) if(NOT "${ARGN}" STREQUAL "") set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_INTERFACE_DOC - "${PROJECT_NAME}::${_TARGET}` | ${ARGN} |") + "${PROJECT_NAME}::${_TARGET}` | ${ARGN} |") endif() -ENDMACRO() +endmacro() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# handle empty interface +# handle empty interface # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# -FUNCTION(INFORM_EMPTY_INTERFACE _TARGET _PACKAGE) +function(INFORM_EMPTY_INTERFACE _TARGET _PACKAGE) if(NOT TARGET ${_TARGET}) - hosttrace_message(AUTHOR_WARNING "A non-existant target was passed to INFORM_EMPTY_INTERFACE: ${_TARGET}") + hosttrace_message( + AUTHOR_WARNING + "A non-existant target was passed to INFORM_EMPTY_INTERFACE: ${_TARGET}") endif() if(NOT ${_TARGET} IN_LIST HOSTTRACE_EMPTY_INTERFACE_LIBRARIES) - hosttrace_message(STATUS - "[interface] ${_PACKAGE} not found/enabled. '${_TARGET}' interface will not provide ${_PACKAGE}...") - set(HOSTTRACE_EMPTY_INTERFACE_LIBRARIES ${HOSTTRACE_EMPTY_INTERFACE_LIBRARIES} ${_TARGET} PARENT_SCOPE) + hosttrace_message( + STATUS + "[interface] ${_PACKAGE} not found/enabled. '${_TARGET}' interface will not provide ${_PACKAGE}..." + ) + set(HOSTTRACE_EMPTY_INTERFACE_LIBRARIES + ${HOSTTRACE_EMPTY_INTERFACE_LIBRARIES} ${_TARGET} + PARENT_SCOPE) endif() add_disabled_interface(${_TARGET}) endfunction() @@ -589,52 +595,46 @@ endfunction() function(ADD_RPATH) set(_DIRS) foreach(_ARG ${ARGN}) - if(EXISTS "${_ARG}" AND IS_DIRECTORY "${_ARG}") - list(APPEND _DIRS "${_ARG}") - endif() + if(EXISTS "${_ARG}" AND IS_DIRECTORY "${_ARG}") + list(APPEND _DIRS "${_ARG}") + endif() get_filename_component(_DIR "${_ARG}" DIRECTORY) - if(EXISTS "${_DIR}" AND IS_DIRECTORY "${_DIR}") - list(APPEND _DIRS "${_DIR}") - endif() + if(EXISTS "${_DIR}" AND IS_DIRECTORY "${_DIR}") + list(APPEND _DIRS "${_DIR}") + endif() endforeach() if(_DIRS) list(REMOVE_DUPLICATES _DIRS) string(REPLACE ";" ":" _RPATH "${_DIRS}") # message(STATUS "\n\tRPATH additions: ${_RPATH}\n") - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${_RPATH}" PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH + "${CMAKE_INSTALL_RPATH}:${_RPATH}" + PARENT_SCOPE) endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro to build a library of type: shared, static, object # -FUNCTION(BUILD_LIBRARY) +function(BUILD_LIBRARY) # options - set(_options PIC - NO_CACHE_LIST - EXCLUDE_FROM_ALL) + set(_options PIC NO_CACHE_LIST EXCLUDE_FROM_ALL) # single-value - set(_onevalue TYPE - OUTPUT_NAME - TARGET_NAME - OUTPUT_DIR - LANGUAGE - LINKER_LANGUAGE) + set(_onevalue TYPE OUTPUT_NAME TARGET_NAME OUTPUT_DIR LANGUAGE LINKER_LANGUAGE) # multi-value - set(_multival SOURCES - LINK_LIBRARIES - COMPILE_DEFINITIONS - INCLUDE_DIRECTORIES - C_COMPILE_OPTIONS - CXX_COMPILE_OPTIONS - CUDA_COMPILE_OPTIONS - LINK_OPTIONS - EXTRA_PROPERTIES) + set(_multival + SOURCES + LINK_LIBRARIES + COMPILE_DEFINITIONS + INCLUDE_DIRECTORIES + C_COMPILE_OPTIONS + CXX_COMPILE_OPTIONS + CUDA_COMPILE_OPTIONS + LINK_OPTIONS + EXTRA_PROPERTIES) - cmake_parse_arguments( - LIBRARY "${_options}" "${_onevalue}" "${_multival}" ${ARGN}) + cmake_parse_arguments(LIBRARY "${_options}" "${_onevalue}" "${_multival}" ${ARGN}) if("${LIBRARY_LANGUAGE}" STREQUAL "") set(LIBRARY_LANGUAGE CXX) @@ -660,17 +660,15 @@ FUNCTION(BUILD_LIBRARY) if(NOT "${LIBRARY_TYPE}" STREQUAL "OBJECT") if(NOT WIN32 AND NOT XCODE) - list(APPEND LIBRARY_EXTRA_PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) + list(APPEND LIBRARY_EXTRA_PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION + ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) endif() if(NOT WIN32) - set(LIB_PREFIX ) - list(APPEND LIBRARY_EXTRA_PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIR} - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIR} - RUNTIME_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIR}) + set(LIB_PREFIX) + list(APPEND LIBRARY_EXTRA_PROPERTIES LIBRARY_OUTPUT_DIRECTORY + ${LIBRARY_OUTPUT_DIR} ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIR} + RUNTIME_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIR}) else() set(LIB_PREFIX lib) endif() @@ -695,37 +693,36 @@ FUNCTION(BUILD_LIBRARY) # append include directories target_include_directories(${LIBRARY_TARGET_NAME} - PUBLIC ${LIBRARY_INCLUDE_DIRECTORIES}) + PUBLIC ${LIBRARY_INCLUDE_DIRECTORIES}) # compile definitions - hosttrace_target_compile_definitions(${LIBRARY_TARGET_NAME} - PUBLIC ${LIBRARY_COMPILE_DEFINITIONS}) + hosttrace_target_compile_definitions(${LIBRARY_TARGET_NAME} PUBLIC + ${LIBRARY_COMPILE_DEFINITIONS}) # compile flags - target_compile_options(${LIBRARY_TARGET_NAME} PRIVATE - $<$:${LIBRARY_C_COMPILE_OPTIONS}> - $<$:${LIBRARY_CXX_COMPILE_OPTIONS}>) + target_compile_options( + ${LIBRARY_TARGET_NAME} + PRIVATE $<$:${LIBRARY_C_COMPILE_OPTIONS}> + $<$:${LIBRARY_CXX_COMPILE_OPTIONS}>) - # windows - # docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library - # if(MSVC AND NOT "${LIBRARY_TYPE}" STREQUAL "OBJECT") - # set(_MSVC_FLAGS /MD) - # if("${LIBRARY_TYPE}" STREQUAL "STATIC") - # set(_MSVC_FLAGS /MT) - # endif() - # target_compile_options(${LIBRARY_TARGET_NAME} PUBLIC - # $<$:${_MSVC_FLAGS}> - # $<$:${_MSVC_FLAGS}>) + # windows docs.microsoft.com/en-us/cpp/build/reference/md-mt-ld-use-run-time-library + # if(MSVC AND NOT "${LIBRARY_TYPE}" STREQUAL "OBJECT") set(_MSVC_FLAGS /MD) + # if("${LIBRARY_TYPE}" STREQUAL "STATIC") set(_MSVC_FLAGS /MT) endif() + # target_compile_options(${LIBRARY_TARGET_NAME} PUBLIC + # $<$:${_MSVC_FLAGS}> + # $<$:${_MSVC_FLAGS}>) # endif() # cuda flags if(_CUDA) - target_compile_options(${LIBRARY_TARGET_NAME} PRIVATE - $<$:${LIBRARY_CUDA_COMPILE_OPTIONS}>) + target_compile_options( + ${LIBRARY_TARGET_NAME} + PRIVATE $<$:${LIBRARY_CUDA_COMPILE_OPTIONS}>) endif() # link libraries - target_link_libraries(${LIBRARY_TARGET_NAME} + target_link_libraries( + ${LIBRARY_TARGET_NAME} PUBLIC ${LIBRARY_LINK_LIBRARIES} PRIVATE ${_ANALYSIS_TOOLS} ${_ARCH_LIBRARY}) @@ -739,39 +736,40 @@ FUNCTION(BUILD_LIBRARY) endif() # set_target_properties( - ${LIBRARY_TARGET_NAME} PROPERTIES - OUTPUT_NAME ${LIB_PREFIX}${LIBRARY_OUTPUT_NAME} - LANGUAGE ${LIBRARY_LANGUAGE} - LINKER_LANGUAGE ${LIBRARY_LINKER_LANGUAGE} - POSITION_INDEPENDENT_CODE ${LIBRARY_PIC} - ${LIBRARY_EXTRA_PROPERTIES}) + ${LIBRARY_TARGET_NAME} + PROPERTIES OUTPUT_NAME ${LIB_PREFIX}${LIBRARY_OUTPUT_NAME} + LANGUAGE ${LIBRARY_LANGUAGE} + LINKER_LANGUAGE ${LIBRARY_LINKER_LANGUAGE} + POSITION_INDEPENDENT_CODE ${LIBRARY_PIC} + ${LIBRARY_EXTRA_PROPERTIES}) else() set_target_properties( - ${LIBRARY_TARGET_NAME} PROPERTIES - LANGUAGE ${LIBRARY_LANGUAGE} - POSITION_INDEPENDENT_CODE ${LIBRARY_PIC} - ${LIBRARY_EXTRA_PROPERTIES}) + ${LIBRARY_TARGET_NAME} + PROPERTIES LANGUAGE ${LIBRARY_LANGUAGE} + POSITION_INDEPENDENT_CODE ${LIBRARY_PIC} + ${LIBRARY_EXTRA_PROPERTIES}) endif() set(COMPILED_TYPES "SHARED" "STATIC" "MODULE") if(NOT LIBRARY_NO_CACHE_LIST) # add to cached list of compiled libraries if("${LIBRARY_TYPE}" IN_LIST COMPILED_TYPES) - cache_list(APPEND ${PROJECT_NAME_UC}_COMPILED_LIBRARIES ${LIBRARY_TARGET_NAME}) + cache_list(APPEND ${PROJECT_NAME_UC}_COMPILED_LIBRARIES + ${LIBRARY_TARGET_NAME}) endif() endif() unset(COMPILED_TYPES) set_property(GLOBAL APPEND PROPERTY HOSTTRACE_${LIBRARY_TYPE}_LIBRARIES - ${LIBRARY_TARGET_NAME}) + ${LIBRARY_TARGET_NAME}) if("${LIBRARY_TYPE}" STREQUAL "SHARED" AND _ENABLE_CUSTOM_COMMAND) set(_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX}) set(_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) - get_target_property(_OUTNAME ${LIBRARY_TARGET_NAME} OUTPUT_NAME) - get_target_property(_VERSION ${LIBRARY_TARGET_NAME} VERSION) - get_target_property(_SOVERSION ${LIBRARY_TARGET_NAME} SOVERSION) + get_target_property(_OUTNAME ${LIBRARY_TARGET_NAME} OUTPUT_NAME) + get_target_property(_VERSION ${LIBRARY_TARGET_NAME} VERSION) + get_target_property(_SOVERSION ${LIBRARY_TARGET_NAME} SOVERSION) set(_FILENAME ${_PREFIX}${_OUTNAME}${_SUFFIX}) @@ -779,41 +777,41 @@ FUNCTION(BUILD_LIBRARY) if(NOT IS_ABSOLUTE "${_OUTDIR}") set(_OUTDIR "${PROJECT_BINARY_DIR}/${_OUTDIR}") endif() - file(RELATIVE_PATH BINARY_RELPATH - "${PROJECT_BINARY_DIR}/hosttrace/libs" "${_OUTDIR}") + file(RELATIVE_PATH BINARY_RELPATH "${PROJECT_BINARY_DIR}/hosttrace/libs" + "${_OUTDIR}") string(REGEX REPLACE "/$" "" BINARY_RELPATH "${BINARY_RELPATH}") # build tree if(WIN32) # copy if on windows - add_custom_command(TARGET ${LIBRARY_TARGET_NAME} + add_custom_command( + TARGET ${LIBRARY_TARGET_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different + COMMAND + ${CMAKE_COMMAND} -E copy_if_different $ ${PROJECT_BINARY_DIR}/hosttrace/libs WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) else() # symlink if not windows - add_custom_command(TARGET ${LIBRARY_TARGET_NAME} + add_custom_command( + TARGET ${LIBRARY_TARGET_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${BINARY_RELPATH}/${_FILENAME} - ${PROJECT_BINARY_DIR}/hosttrace/libs/${_FILENAME} + COMMAND ${CMAKE_COMMAND} -E create_symlink ${BINARY_RELPATH}/${_FILENAME} + ${PROJECT_BINARY_DIR}/hosttrace/libs/${_FILENAME} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) endif() endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # finds dependencies # function(HOSTTRACE_GET_INTERNAL_DEPENDS VAR LINK) - # set the depends before creating the library so it does not - # link to itself + # set the depends before creating the library so it does not link to itself set(DEPENDS) foreach(DEP ${ARGN}) # @@ -843,15 +841,16 @@ function(HOSTTRACE_GET_INTERNAL_DEPENDS VAR LINK) list(APPEND DEPENDS hosttrace-${DEP}-component-${LINK}) endif() endforeach() - set(${VAR} "${DEPENDS}" PARENT_SCOPE) + set(${VAR} + "${DEPENDS}" + PARENT_SCOPE) endfunction() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # finds dependencies # function(HOSTTRACE_GET_PROPERTY_DEPENDS VAR LINK) - # set the depends before creating the library so it does not - # link to itself + # set the depends before creating the library so it does not link to itself set(DEPENDS) foreach(DEP ${ARGN}) get_property(TMP GLOBAL PROPERTY HOSTTRACE_${LINK}_${DEP}_LIBRARIES) @@ -867,11 +866,12 @@ function(HOSTTRACE_GET_PROPERTY_DEPENDS VAR LINK) endif() endforeach() endforeach() - set(${VAR} "${DEPENDS}" PARENT_SCOPE) + set(${VAR} + "${DEPENDS}" + PARENT_SCOPE) endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # require variable # function(CHECK_REQUIRED VAR) @@ -880,11 +880,10 @@ function(CHECK_REQUIRED VAR) endif() endfunction() - -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # C/C++ development headers # -FUNCTION(HOSTTRACE_INSTALL_HEADER_FILES) +function(HOSTTRACE_INSTALL_HEADER_FILES) if(NOT HOSTTRACE_INSTALL_HEADERS) return() endif() @@ -893,25 +892,25 @@ FUNCTION(HOSTTRACE_INSTALL_HEADER_FILES) continue() endif() if(NOT EXISTS "${_header}") - hosttrace_message(AUTHOR_WARNING + hosttrace_message( + AUTHOR_WARNING "Skipping install of non-existant hosttrace header: '${_header}'") endif() file(RELATIVE_PATH _relative ${PROJECT_SOURCE_DIR}/source ${_header}) get_filename_component(_destpath ${_relative} DIRECTORY) install( - FILES ${_header} + FILES ${_header} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${_destpath} OPTIONAL) endforeach() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # Library installation # -FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) - cmake_parse_arguments( - LIB "LINK_VERSION;LINK_SOVERSION" "DESTINATION;EXPORT" "TARGETS" ${ARGN}) +function(HOSTTRACE_INSTALL_LIBRARIES) + cmake_parse_arguments(LIB "LINK_VERSION;LINK_SOVERSION" "DESTINATION;EXPORT" + "TARGETS" ${ARGN}) if(NOT LIB_DESTINATION) set(LIB_DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -937,10 +936,9 @@ FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) list(REMOVE_DUPLICATES LIB_TARGETS) - if (WIN32) - # use the defaults for destination folders on windows; this follows - # conventional windows locations by putting DLLs into bin and LIBs - # into lib + if(WIN32) + # use the defaults for destination folders on windows; this follows conventional + # windows locations by putting DLLs into bin and LIBs into lib set(_dst) else() # set destination to be the one specified by input argument @@ -959,27 +957,29 @@ FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) set_property(GLOBAL APPEND PROPERTY HOSTTRACE_EXPORTED_LIBRARIES ${_LIB}) install( - TARGETS ${_LIB} - ${_dst} + TARGETS ${_LIB} ${_dst} EXPORT ${PROJECT_NAME}-library-depends OPTIONAL) - if (WIN32 AND "${_LIB}" IN_LIST SHARED_LIBS) + if(WIN32 AND "${_LIB}" IN_LIST SHARED_LIBS) # for windows install pdb files too - install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) + install( + FILES $ + DESTINATION ${CMAKE_INSTALL_BINDIR} + OPTIONAL) endif() if(HOSTTRACE_USE_PYTHON AND ${_LIB} IN_LIST SHARED_LIBS) set(_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX}) set(_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) - get_target_property(_OUTNAME ${_LIB} OUTPUT_NAME) - get_target_property(_VERSION ${_LIB} VERSION) - get_target_property(_SOVERSION ${_LIB} SOVERSION) + get_target_property(_OUTNAME ${_LIB} OUTPUT_NAME) + get_target_property(_VERSION ${_LIB} VERSION) + get_target_property(_SOVERSION ${_LIB} SOVERSION) set(_FILENAME ${_PREFIX}${_OUTNAME}${_SUFFIX}) - set(_VERSION_FILENAME ) - set(_SOVERSION_FILENAME ) + set(_VERSION_FILENAME) + set(_SOVERSION_FILENAME) set(_FILE_TYPES _FILENAME) # if(_VERSION AND LIB_LINK_VERSION) @@ -1001,7 +1001,7 @@ FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) endif() file(RELATIVE_PATH INSTALL_RELPATH "${_PYLIB}" - "${CMAKE_INSTALL_PREFIX}/${LIB_DESTINATION}") + "${CMAKE_INSTALL_PREFIX}/${LIB_DESTINATION}") get_target_property(_OUTDIR ${_LIB} LIBRARY_OUTPUT_DIRECTORY) if(NOT IS_ABSOLUTE "${_OUTDIR}") @@ -1017,11 +1017,12 @@ FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) endif() if(WIN32) # install a second time if windows - install(TARGETS ${_LIB} DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/${PROJECT_NAME}/libs) + install(TARGETS ${_LIB} + DESTINATION ${CMAKE_INSTALL_PYTHONDIR}/${PROJECT_NAME}/libs) else() # symlink if not windows - install(CODE - " + install( + CODE " EXECUTE_PROCESS( COMMAND ${CMAKE_COMMAND} -E create_symlink ${INSTALL_RELPATH}/${${_FNAME}} ${_PYLIB}/${${_FNAME}} @@ -1033,15 +1034,13 @@ FUNCTION(HOSTTRACE_INSTALL_LIBRARIES) endforeach() endif() endforeach() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------- +# ----------------------------------------------------------------------- # Add pre-compiled headers # -FUNCTION(HOSTTRACE_TARGET_PRECOMPILE_HEADERS _TARG) - cmake_parse_arguments( - HEAD "INSTALL_INTERFACE" "" "FILES" ${ARGN}) +function(HOSTTRACE_TARGET_PRECOMPILE_HEADERS _TARG) + cmake_parse_arguments(HEAD "INSTALL_INTERFACE" "" "FILES" ${ARGN}) if(HOSTTRACE_PRECOMPILE_HEADERS) set(_BINARY_IFACE) @@ -1053,45 +1052,29 @@ FUNCTION(HOSTTRACE_TARGET_PRECOMPILE_HEADERS _TARG) string(REPLACE "source/" "" _HEADER "${_HEADER}") list(APPEND _INSTALL_IFACE "<${_HEADER}>") endforeach() - target_precompile_headers(${_TARG} INTERFACE - $) + target_precompile_headers(${_TARG} INTERFACE $) if(HEAD_INSTALL_INTERFACE) target_precompile_headers(${_TARG} INTERFACE - $) + $) endif() endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # macro to build a library of type: shared, static, object # -FUNCTION(BUILD_INTERMEDIATE_LIBRARY) +function(BUILD_INTERMEDIATE_LIBRARY) # options - set(_options USE_INTERFACE - USE_CATEGORY - INSTALL_SOURCE - FORCE_OBJECT - FORCE_SHARED - FORCE_STATIC) + set(_options USE_INTERFACE USE_CATEGORY INSTALL_SOURCE FORCE_OBJECT FORCE_SHARED + FORCE_STATIC) # single-value - set(_onevalue NAME - TARGET - CATEGORY - FOLDER - VISIBILITY) + set(_onevalue NAME TARGET CATEGORY FOLDER VISIBILITY) # multi-value - set(_multival HEADERS - SOURCES - DEPENDS - INCLUDES - PROPERTY_DEPENDS - PUBLIC_LINK - PRIVATE_LINK) + set(_multival HEADERS SOURCES DEPENDS INCLUDES PROPERTY_DEPENDS PUBLIC_LINK + PRIVATE_LINK) - cmake_parse_arguments( - COMP "${_options}" "${_onevalue}" "${_multival}" ${ARGN}) + cmake_parse_arguments(COMP "${_options}" "${_onevalue}" "${_multival}" ${ARGN}) check_required(COMP_NAME) check_required(COMP_TARGET) @@ -1099,7 +1082,7 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) check_required(COMP_FOLDER) if(NOT COMP_VISIBILITY) - set(COMP_VISIBILITY default) + set(COMP_VISIBILITY default) endif() set(VIS_OPTS "default" "hidden") @@ -1140,8 +1123,8 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) get_filename_component(_SOURCE_NAME "${_SOURCE}" NAME) get_filename_component(_SOURCE_DIR "${_SOURCE}" DIRECTORY) get_filename_component(_SOURCE_DIR "${_SOURCE_DIR}" NAME) - if(NOT "${_SOURCE_NAME}" STREQUAL "extern.cpp" AND - NOT "${_SOURCE_DIR}" STREQUAL "extern") + if(NOT "${_SOURCE_NAME}" STREQUAL "extern.cpp" AND NOT "${_SOURCE_DIR}" + STREQUAL "extern") list(APPEND _SOURCES ${_SOURCE}) else() message(WARNING "Not installing ${_SOURCE} source") @@ -1162,7 +1145,8 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) # set the depends before creating the library so it does not link to itself hosttrace_get_internal_depends(_DEPENDS ${LINK} ${COMP_DEPENDS} hosttrace-core) hosttrace_get_property_depends(_PROPERTY_OBJS OBJECT ${COMP_PROPERTY_DEPENDS}) - hosttrace_get_property_depends(_PROPERTY_LINK ${UPP_LINK} ${COMP_PROPERTY_DEPENDS}) + hosttrace_get_property_depends(_PROPERTY_LINK ${UPP_LINK} + ${COMP_PROPERTY_DEPENDS}) # must reset this variable set(DEPENDS) @@ -1180,22 +1164,30 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) set_property(GLOBAL APPEND PROPERTY HOSTTRACE_HEADERS ${COMP_HEADERS}) set_property(GLOBAL APPEND PROPERTY HOSTTRACE_SOURCES ${COMP_SOURCES}) - set_property(GLOBAL APPEND PROPERTY HOSTTRACE_${UPP_LINK}_${COMP_CATEGORY}_LIBRARIES - hosttrace-${COMP_TARGET}-${LINK}) + set_property( + GLOBAL APPEND PROPERTY HOSTTRACE_${UPP_LINK}_${COMP_CATEGORY}_LIBRARIES + hosttrace-${COMP_TARGET}-${LINK}) - # message(STATUS "Building ${TARGET_NAME}") - # message(STATUS "[-------] ${TARGET_NAME} :: ${DEPENDS}") + # message(STATUS "Building ${TARGET_NAME}") message(STATUS "[-------] + # ${TARGET_NAME} :: ${DEPENDS}") build_library( NO_CACHE_LIST ${${LINK}_OPTIONS} - TARGET_NAME ${TARGET_NAME} - OUTPUT_NAME hosttrace-${COMP_TARGET} - LANGUAGE CXX - LINKER_LANGUAGE ${_LINKER_LANGUAGE} - OUTPUT_DIR ${PROJECT_BINARY_DIR}/${COMP_FOLDER} - SOURCES ${_SOURCES} - CXX_COMPILE_OPTIONS ${${PROJECT_NAME}_CXX_COMPILE_OPTIONS}) + TARGET_NAME + ${TARGET_NAME} + OUTPUT_NAME + hosttrace-${COMP_TARGET} + LANGUAGE + CXX + LINKER_LANGUAGE + ${_LINKER_LANGUAGE} + OUTPUT_DIR + ${PROJECT_BINARY_DIR}/${COMP_FOLDER} + SOURCES + ${_SOURCES} + CXX_COMPILE_OPTIONS + ${${PROJECT_NAME}_CXX_COMPILE_OPTIONS}) target_include_directories(${TARGET_NAME} PUBLIC ${COMP_INCLUDES}) @@ -1213,36 +1205,31 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) list(REMOVE_DUPLICATES DEPENDS) endif() - target_link_libraries(${TARGET_NAME} PUBLIC - hosttrace-external-${LINK} - hosttrace-headers - hosttrace-vector - hosttrace-dmp - ${DEPENDS} - ${COMP_PUBLIC_LINK}) + target_link_libraries( + ${TARGET_NAME} + PUBLIC hosttrace-external-${LINK} hosttrace-headers hosttrace-vector + hosttrace-dmp ${DEPENDS} ${COMP_PUBLIC_LINK}) - target_link_libraries(${TARGET_NAME} PRIVATE - hosttrace-compile-options - hosttrace-develop-options - hosttrace-${COMP_VISIBILITY}-visibility - ${COMP_PRIVATE_LINK}) + target_link_libraries( + ${TARGET_NAME} + PRIVATE hosttrace-compile-options hosttrace-develop-options + hosttrace-${COMP_VISIBILITY}-visibility ${COMP_PRIVATE_LINK}) - hosttrace_target_compile_definitions(${TARGET_NAME} PRIVATE - HOSTTRACE_SOURCE - HOSTTRACE_${COMP_CATEGORY}_SOURCE + hosttrace_target_compile_definitions( + ${TARGET_NAME} PRIVATE HOSTTRACE_SOURCE HOSTTRACE_${COMP_CATEGORY}_SOURCE HOSTTRACE_${UPP_COMP}_SOURCE) hosttrace_target_compile_definitions(${TARGET_NAME} INTERFACE - HOSTTRACE_USE_${UPP_COMP}_EXTERN) + HOSTTRACE_USE_${UPP_COMP}_EXTERN) if(NOT "${UPP_COMP}" STREQUAL "CORE") hosttrace_target_compile_definitions(${TARGET_NAME} PUBLIC - HOSTTRACE_USE_CORE_EXTERN) + HOSTTRACE_USE_CORE_EXTERN) endif() if("${COMP_CATEGORY}" STREQUAL "COMPONENT" OR COMP_USE_CATEGORY) hosttrace_target_compile_definitions(${TARGET_NAME} INTERFACE - HOSTTRACE_USE_${COMP_CATEGORY}_EXTERN) + HOSTTRACE_USE_${COMP_CATEGORY}_EXTERN) endif() if("${LINK}" STREQUAL "OBJECT") @@ -1250,8 +1237,8 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) add_interface_library(hosttrace-${LC_CATEGORY}-${LINK}) endif() if(NOT "hosttrace-${LC_CATEGORY}-${LINK}" STREQUAL "${TARGET_NAME}") - target_sources(hosttrace-${LC_CATEGORY}-${LINK} INTERFACE - $) + target_sources(hosttrace-${LC_CATEGORY}-${LINK} + INTERFACE $) endif() else() if(NOT TARGET hosttrace-${LC_CATEGORY}-${LINK}) @@ -1259,17 +1246,18 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) endif() if(NOT "hosttrace-${LC_CATEGORY}-${LINK}" STREQUAL "${TARGET_NAME}") - target_link_libraries(hosttrace-${LC_CATEGORY}-${LINK} INTERFACE ${TARGET_NAME}) + target_link_libraries(hosttrace-${LC_CATEGORY}-${LINK} + INTERFACE ${TARGET_NAME}) endif() hosttrace_install_libraries( - TARGETS ${TARGET_NAME} - DESTINATION ${CMAKE_INSTALL_LIBDIR} - EXPORT ${PROJECT_NAME}-library-depends) + TARGETS ${TARGET_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT + ${PROJECT_NAME}-library-depends) - set_property(GLOBAL APPEND PROPERTY HOSTTRACE_INTERMEDIATE_TARGETS ${TARGET_NAME}) + set_property(GLOBAL APPEND PROPERTY HOSTTRACE_INTERMEDIATE_TARGETS + ${TARGET_NAME}) set_property(GLOBAL APPEND PROPERTY HOSTTRACE_INTERMEDIATE_${UPP_LINK}_TARGETS - ${TARGET_NAME}) + ${TARGET_NAME}) endif() endforeach() @@ -1281,109 +1269,116 @@ FUNCTION(BUILD_INTERMEDIATE_LIBRARY) if(NOT TARGET hosttrace-${COMP_TARGET}) add_interface_library(hosttrace-${COMP_TARGET}) - target_link_libraries(hosttrace-${COMP_TARGET} INTERFACE - hosttrace-${COMP_TARGET}-${_LIB_DEFAULT_TYPE}) + target_link_libraries(hosttrace-${COMP_TARGET} + INTERFACE hosttrace-${COMP_TARGET}-${_LIB_DEFAULT_TYPE}) endif() if(NOT TARGET hosttrace-${LC_CATEGORY}) add_interface_library(hosttrace-${LC_CATEGORY}) - target_link_libraries(hosttrace-${LC_CATEGORY} INTERFACE - hosttrace-${LC_CATEGORY}-${_LIB_DEFAULT_TYPE}) + target_link_libraries(hosttrace-${LC_CATEGORY} + INTERFACE hosttrace-${LC_CATEGORY}-${_LIB_DEFAULT_TYPE}) endif() - if(WIN32 AND TARGET hosttrace-${COMP_TARGET}-shared AND TARGET hosttrace-${COMP_TARGET}-static) + if(WIN32 + AND TARGET hosttrace-${COMP_TARGET}-shared + AND TARGET hosttrace-${COMP_TARGET}-static) add_dependencies(hosttrace-${COMP_TARGET}-shared hosttrace-${COMP_TARGET}-static) endif() -ENDFUNCTION() +endfunction() - -FUNCTION(ADD_CMAKE_DEFINES _VAR) +function(ADD_CMAKE_DEFINES _VAR) # parse args cmake_parse_arguments(DEF "VALUE;QUOTE;DEFAULT" "" "" ${ARGN}) if(DEF_VALUE) if(DEF_QUOTE) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES - "${_VAR} \"@${_VAR}@\"") + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES + "${_VAR} \"@${_VAR}@\"") else() - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES "${_VAR} @${_VAR}@") + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES + "${_VAR} @${_VAR}@") endif() if(DEF_DEFAULT) if(DEF_QUOTE) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_DEFAULT_CMAKE_DEFINES - "#if !defined(${_VAR})\n#cmakedefine ${_VAR} \"@${_VAR}@\"\n#endif\n") + set_property( + GLOBAL APPEND + PROPERTY + ${PROJECT_NAME}_DEFAULT_CMAKE_DEFINES + "#if !defined(${_VAR})\n#cmakedefine ${_VAR} \"@${_VAR}@\"\n#endif\n" + ) else() - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_DEFAULT_CMAKE_DEFINES - "#if !defined(${_VAR})\n#cmakedefine ${_VAR} @${_VAR}@\n#endif\n") + set_property( + GLOBAL APPEND + PROPERTY + ${PROJECT_NAME}_DEFAULT_CMAKE_DEFINES + "#if !defined(${_VAR})\n#cmakedefine ${_VAR} @${_VAR}@\n#endif\n") endif() endif() else() - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES "${_VAR}") + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES "${_VAR}") endif() -ENDFUNCTION() +endfunction() -#----------------------------------------------------------------------- -# function add_feature( ) -# Add a project feature, whose activation is specified by the -# existence of the variable , to the list of enabled/disabled -# features, plus a docstring describing the feature +# ----------------------------------------------------------------------- +# function add_feature( ) Add a project feature, whose activation is +# specified by the existence of the variable , to the list of enabled/disabled +# features, plus a docstring describing the feature # -FUNCTION(ADD_FEATURE _var _description) - set(EXTRA_DESC "") - foreach(currentArg ${ARGN}) - if(NOT "${currentArg}" STREQUAL "${_var}" AND - NOT "${currentArg}" STREQUAL "${_description}" AND - NOT "${currentArg}" STREQUAL "CMAKE_DEFINE" AND - NOT "${currentArg}" STREQUAL "DOC") - set(EXTRA_DESC "${EXTA_DESC}${currentArg}") - endif() - endforeach() +function(ADD_FEATURE _var _description) + set(EXTRA_DESC "") + foreach(currentArg ${ARGN}) + if(NOT "${currentArg}" STREQUAL "${_var}" + AND NOT "${currentArg}" STREQUAL "${_description}" + AND NOT "${currentArg}" STREQUAL "CMAKE_DEFINE" + AND NOT "${currentArg}" STREQUAL "DOC") + set(EXTRA_DESC "${EXTA_DESC}${currentArg}") + endif() + endforeach() - set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_FEATURES ${_var}) - set_property(GLOBAL PROPERTY ${_var}_DESCRIPTION "${_description}${EXTRA_DESC}") + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_FEATURES ${_var}) + set_property(GLOBAL PROPERTY ${_var}_DESCRIPTION "${_description}${EXTRA_DESC}") - IF("CMAKE_DEFINE" IN_LIST ARGN) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES "${_var} @${_var}@") - IF(HOSTTRACE_BUILD_DOCS) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC - "${_var}` | ${_description}${EXTRA_DESC} |") - ENDIF() - ELSEIF("DOC" IN_LIST ARGN AND HOSTTRACE_BUILD_DOCS) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC - "${_var}` | ${_description}${EXTRA_DESC} |") - ENDIF() -ENDFUNCTION() + if("CMAKE_DEFINE" IN_LIST ARGN) + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES + "${_var} @${_var}@") + if(HOSTTRACE_BUILD_DOCS) + set_property( + GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC + "${_var}` | ${_description}${EXTRA_DESC} |") + endif() + elseif("DOC" IN_LIST ARGN AND HOSTTRACE_BUILD_DOCS) + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC + "${_var}` | ${_description}${EXTRA_DESC} |") + endif() +endfunction() - -#----------------------------------------------------------------------------------------# -# function add_option( [NO_FEATURE]) -# Add an option and add as a feature if NO_FEATURE is not provided +# ----------------------------------------------------------------------------------------# +# function add_option( [NO_FEATURE]) Add an +# option and add as a feature if NO_FEATURE is not provided # -FUNCTION(ADD_OPTION _NAME _MESSAGE _DEFAULT) - OPTION(${_NAME} "${_MESSAGE}" ${_DEFAULT}) - IF("NO_FEATURE" IN_LIST ARGN) - MARK_AS_ADVANCED(${_NAME}) - ELSE() - ADD_FEATURE(${_NAME} "${_MESSAGE}") - IF(HOSTTRACE_BUILD_DOCS) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC - "${_NAME}` | ${_MESSAGE} |") - ENDIF() - ENDIF() - IF("ADVANCED" IN_LIST ARGN) - MARK_AS_ADVANCED(${_NAME}) - ENDIF() - IF("CMAKE_DEFINE" IN_LIST ARGN) - SET_PROPERTY(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES ${_NAME}) - ENDIF() -ENDFUNCTION() +function(ADD_OPTION _NAME _MESSAGE _DEFAULT) + option(${_NAME} "${_MESSAGE}" ${_DEFAULT}) + if("NO_FEATURE" IN_LIST ARGN) + mark_as_advanced(${_NAME}) + else() + add_feature(${_NAME} "${_MESSAGE}") + if(HOSTTRACE_BUILD_DOCS) + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_OPTIONS_DOC + "${_NAME}` | ${_MESSAGE} |") + endif() + endif() + if("ADVANCED" IN_LIST ARGN) + mark_as_advanced(${_NAME}) + endif() + if("CMAKE_DEFINE" IN_LIST ARGN) + set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_CMAKE_DEFINES ${_NAME}) + endif() +endfunction() - -#----------------------------------------------------------------------------------------# -# function print_enabled_features() -# Print enabled features plus their docstrings. +# ----------------------------------------------------------------------------------------# +# function print_enabled_features() Print enabled features plus their docstrings. # -FUNCTION(PRINT_ENABLED_FEATURES) +function(PRINT_ENABLED_FEATURES) set(_basemsg "The following features are defined/enabled (+):") set(_currentFeatureText "${_basemsg}") get_property(_features GLOBAL PROPERTY ${PROJECT_NAME}_FEATURES) @@ -1399,11 +1394,13 @@ FUNCTION(PRINT_ENABLED_FEATURES) get_property(_desc GLOBAL PROPERTY ${_feature}_DESCRIPTION) # print description, if not standard ON/OFF, print what is set to if(_desc) - if(NOT "${${_feature}}" STREQUAL "ON" AND - NOT "${${_feature}}" STREQUAL "TRUE") - set(_currentFeatureText "${_currentFeatureText}: ${_desc} -- [\"${${_feature}}\"]") + if(NOT "${${_feature}}" STREQUAL "ON" AND NOT "${${_feature}}" STREQUAL + "TRUE") + set(_currentFeatureText + "${_currentFeatureText}: ${_desc} -- [\"${${_feature}}\"]") else() - string(REGEX REPLACE "^${PROJECT_NAME}_USE_" "" _feature_tmp "${_feature}") + string(REGEX REPLACE "^${PROJECT_NAME}_USE_" "" _feature_tmp + "${_feature}") string(TOLOWER "${_feature_tmp}" _feature_tmp_l) capitalize("${_feature_tmp}" _feature_tmp_c) foreach(_var _feature _feature_tmp _feature_tmp_l _feature_tmp_c) @@ -1424,14 +1421,12 @@ FUNCTION(PRINT_ENABLED_FEATURES) if(NOT "${_currentFeatureText}" STREQUAL "${_basemsg}") message(STATUS "${_currentFeatureText}\n") endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# -# function print_disabled_features() -# Print disabled features plus their docstrings. +# ----------------------------------------------------------------------------------------# +# function print_disabled_features() Print disabled features plus their docstrings. # -FUNCTION(PRINT_DISABLED_FEATURES) +function(PRINT_DISABLED_FEATURES) set(_basemsg "The following features are NOT defined/enabled (-):") set(_currentFeatureText "${_basemsg}") get_property(_features GLOBAL PROPERTY ${PROJECT_NAME}_FEATURES) @@ -1446,8 +1441,8 @@ FUNCTION(PRINT_DISABLED_FEATURES) get_property(_desc GLOBAL PROPERTY ${_feature}_DESCRIPTION) if(_desc) - set(_currentFeatureText "${_currentFeatureText}: ${_desc}") - set(_desc NOTFOUND) + set(_currentFeatureText "${_currentFeatureText}: ${_desc}") + set(_desc NOTFOUND) endif(_desc) endif() endforeach(_feature) @@ -1455,14 +1450,13 @@ FUNCTION(PRINT_DISABLED_FEATURES) if(NOT "${_currentFeatureText}" STREQUAL "${_basemsg}") message(STATUS "${_currentFeatureText}\n") endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# -# function print_enabled_interfaces() -# Print enabled INTERFACE libraries plus their docstrings. +# ----------------------------------------------------------------------------------------# +# function print_enabled_interfaces() Print enabled INTERFACE libraries plus their +# docstrings. # -FUNCTION(PRINT_ENABLED_INTERFACES) +function(PRINT_ENABLED_INTERFACES) set(_basemsg "The following INTERFACE libraries are enabled:") set(_currentFeatureText "${_basemsg}") get_property(_enabled GLOBAL PROPERTY ${PROJECT_NAME}_ENABLED_INTERFACES) @@ -1484,15 +1478,14 @@ FUNCTION(PRINT_ENABLED_INTERFACES) if(NOT "${_currentFeatureText}" STREQUAL "${_basemsg}") message(STATUS "${_currentFeatureText}\n") endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# -# function print_disabled_interfaces() -# Print disabled interfaces plus their docstrings. +# ----------------------------------------------------------------------------------------# +# function print_disabled_interfaces() Print disabled interfaces plus their docstrings. # -FUNCTION(PRINT_DISABLED_INTERFACES) - set(_basemsg "The following INTERFACE libraries are NOT enabled (empty INTERFACE libraries):") +function(PRINT_DISABLED_INTERFACES) + set(_basemsg + "The following INTERFACE libraries are NOT enabled (empty INTERFACE libraries):") set(_currentFeatureText "${_basemsg}") get_property(_disabled GLOBAL PROPERTY ${PROJECT_NAME}_DISABLED_INTERFACES) if(NOT "${_disabled}" STREQUAL "") @@ -1506,69 +1499,89 @@ FUNCTION(PRINT_DISABLED_INTERFACES) if(NOT "${_currentFeatureText}" STREQUAL "${_basemsg}") message(STATUS "${_currentFeatureText}\n") endif() -ENDFUNCTION() +endfunction() - -#----------------------------------------------------------------------------------------# -# function print_features() -# Print all features plus their docstrings. +# ----------------------------------------------------------------------------------------# +# function print_features() Print all features plus their docstrings. # -FUNCTION(PRINT_FEATURES) +function(PRINT_FEATURES) message(STATUS "") print_enabled_features() print_disabled_features() message(STATUS "") print_enabled_interfaces() print_disabled_interfaces() -ENDFUNCTION() +endfunction() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # this function is provided to easily select which files use alternative compiler: # -# GLOBAL --> all files -# TARGET --> all files in a target -# SOURCE --> specific source files -# DIRECTORY --> all files in directory -# PROJECT --> all files/targets in a project/subproject +# GLOBAL --> all files TARGET --> all files in a target SOURCE --> specific +# source files DIRECTORY --> all files in directory PROJECT --> all files/targets in +# a project/subproject # -FUNCTION(hosttrace_custom_compilation) - CMAKE_PARSE_ARGUMENTS(COMP "GLOBAL;PROJECT" "COMPILER" "DIRECTORY;TARGET;SOURCE" ${ARGN}) +function(hosttrace_custom_compilation) + cmake_parse_arguments(COMP "GLOBAL;PROJECT" "COMPILER" "DIRECTORY;TARGET;SOURCE" + ${ARGN}) # find hosttrace_launch_compiler - FIND_PROGRAM(HOSTTRACE_COMPILE_LAUNCHER - NAMES hosttrace_launch_compiler - HINTS ${PROJECT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} - PATHS ${PROJECT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} - PATH_SUFFIXES scripts bin) + find_program( + HOSTTRACE_COMPILE_LAUNCHER + NAMES hosttrace_launch_compiler + HINTS ${PROJECT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} + PATHS ${PROJECT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} + PATH_SUFFIXES scripts bin) - IF(NOT COMP_COMPILER) - MESSAGE(FATAL_ERROR "hosttrace_custom_compilation not provided COMPILER argument") - ENDIF() + if(NOT COMP_COMPILER) + message(FATAL_ERROR "hosttrace_custom_compilation not provided COMPILER argument") + endif() - IF(NOT HOSTTRACE_COMPILE_LAUNCHER) - MESSAGE(FATAL_ERROR "hosttrace could not find 'hosttrace_launch_compiler'. Please set '-DHOSTTRACE_COMPILE_LAUNCHER=/path/to/launcher'") - ENDIF() + if(NOT HOSTTRACE_COMPILE_LAUNCHER) + message( + FATAL_ERROR + "hosttrace could not find 'hosttrace_launch_compiler'. Please set '-DHOSTTRACE_COMPILE_LAUNCHER=/path/to/launcher'" + ) + endif() - IF(COMP_GLOBAL) + if(COMP_GLOBAL) # if global, don't bother setting others - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") - SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") - ELSE() - FOREACH(_TYPE PROJECT DIRECTORY TARGET SOURCE) - # make project/subproject scoping easy, e.g. hosttrace_custom_compilation(PROJECT) after project(...) - IF("${_TYPE}" STREQUAL "PROJECT" AND COMP_${_TYPE}) - LIST(APPEND COMP_DIRECTORY ${PROJECT_SOURCE_DIR}) - UNSET(COMP_${_TYPE}) - ENDIF() + set_property( + GLOBAL + PROPERTY + RULE_LAUNCH_COMPILE + "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") + set_property( + GLOBAL + PROPERTY + RULE_LAUNCH_LINK + "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") + else() + foreach(_TYPE PROJECT DIRECTORY TARGET SOURCE) + # make project/subproject scoping easy, e.g. + # hosttrace_custom_compilation(PROJECT) after project(...) + if("${_TYPE}" STREQUAL "PROJECT" AND COMP_${_TYPE}) + list(APPEND COMP_DIRECTORY ${PROJECT_SOURCE_DIR}) + unset(COMP_${_TYPE}) + endif() # set the properties if defined - IF(COMP_${_TYPE}) - FOREACH(_VAL ${COMP_${_TYPE}}) - SET_PROPERTY(${_TYPE} ${_VAL} PROPERTY RULE_LAUNCH_COMPILE "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") - SET_PROPERTY(${_TYPE} ${_VAL} PROPERTY RULE_LAUNCH_LINK "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}") - ENDFOREACH() - ENDIF() - ENDFOREACH() - ENDIF() -ENDFUNCTION() + if(COMP_${_TYPE}) + foreach(_VAL ${COMP_${_TYPE}}) + set_property( + ${_TYPE} ${_VAL} + PROPERTY + RULE_LAUNCH_COMPILE + "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}" + ) + set_property( + ${_TYPE} ${_VAL} + PROPERTY + RULE_LAUNCH_LINK + "${HOSTTRACE_COMPILE_LAUNCHER} ${COMP_COMPILER} ${CMAKE_CXX_COMPILER}" + ) + endforeach() + endif() + endforeach() + endif() +endfunction() cmake_policy(POP) diff --git a/projects/rocprofiler-systems/cmake/Packages.cmake b/projects/rocprofiler-systems/cmake/Packages.cmake index dbb0ffb726..ca817f0d7e 100644 --- a/projects/rocprofiler-systems/cmake/Packages.cmake +++ b/projects/rocprofiler-systems/cmake/Packages.cmake @@ -1,29 +1,28 @@ # include guard include_guard(DIRECTORY) -########################################################################################## +# ######################################################################################## # -# External Packages are found here +# External Packages are found here # -########################################################################################## +# ######################################################################################## add_interface_library(hosttrace-headers - "Provides minimal set of include flags to compile with hosttrace") -add_interface_library(hosttrace-threading - "Enables multithreading support") -add_interface_library(hosttrace-dyninst + "Provides minimal set of include flags to compile with hosttrace") +add_interface_library(hosttrace-threading "Enables multithreading support") +add_interface_library( + hosttrace-dyninst "Provides flags and libraries for Dyninst (dynamic instrumentation)") -add_interface_library(hosttrace-roctracer - "Provides flags and libraries for roctracer") +add_interface_library(hosttrace-roctracer "Provides flags and libraries for roctracer") # include threading because of rooflines target_link_libraries(hosttrace-headers INTERFACE hosttrace-threading) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# Threading +# Threading # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# if(NOT WIN32) set(CMAKE_THREAD_PREFER_PTHREAD ON) @@ -42,12 +41,11 @@ if(pthread_LIBRARY AND NOT WIN32) target_link_libraries(hosttrace-threading INTERFACE ${pthread_LIBRARY}) endif() - -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# roctracer +# roctracer # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# if(HOSTTRACE_USE_ROCTRACER) list(APPEND CMAKE_PREFIX_PATH /opt/rocm) @@ -58,31 +56,41 @@ if(HOSTTRACE_USE_ROCTRACER) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:${roctracer_LIBRARY_DIRS}") endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# Dyninst +# Dyninst # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# if(HOSTTRACE_BUILD_DYNINST) checkout_git_submodule( - RELATIVE_PATH external/dyninst - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - REPO_URL https://github.com/jrmadsen/dyninst.git - REPO_BRANCH hosttrace-submodule) + RELATIVE_PATH external/dyninst + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + REPO_URL https://github.com/jrmadsen/dyninst.git + REPO_BRANCH formatting) - set(DYNINST_OPTION_PREFIX ON) - set(DYNINST_BUILD_DOCS OFF) - set(DYNINST_QUIET_CONFIG ON CACHE BOOL "Suppress dyninst cmake messages") - set(DYNINST_BUILD_PARSE_THAT OFF CACHE BOOL "Build dyninst parseThat executable") - set(DYNINST_BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared dyninst libraries") - set(DYNINST_BUILD_STATIC_LIBS ON CACHE BOOL "Build static dyninst libraries") - set(DYNINST_ENABLE_LTO ON CACHE BOOL "Enable LTO for dyninst libraries") + set(DYNINST_OPTION_PREFIX ON) + set(DYNINST_BUILD_DOCS OFF) + set(DYNINST_QUIET_CONFIG + ON + CACHE BOOL "Suppress dyninst cmake messages") + set(DYNINST_BUILD_PARSE_THAT + OFF + CACHE BOOL "Build dyninst parseThat executable") + set(DYNINST_BUILD_SHARED_LIBS + OFF + CACHE BOOL "Build shared dyninst libraries") + set(DYNINST_BUILD_STATIC_LIBS + ON + CACHE BOOL "Build static dyninst libraries") + set(DYNINST_ENABLE_LTO + ON + CACHE BOOL "Enable LTO for dyninst libraries") - hosttrace_save_variables(PIC CMAKE_POSITION_INDEPENDENT_CODE) + hosttrace_save_variables(PIC VARIABLES CMAKE_POSITION_INDEPENDENT_CODE) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_subdirectory(external/dyninst) - hosttrace_restore_variables(PIC CMAKE_POSITION_INDEPENDENT_CODE) + hosttrace_restore_variables(PIC VARIABLES CMAKE_POSITION_INDEPENDENT_CODE) add_library(Dyninst::Dyninst INTERFACE IMPORTED) foreach(_LIB common dyninstAPI parseAPI instructionAPI symtabAPI stackwalk Boost TBB) @@ -91,43 +99,52 @@ if(HOSTTRACE_BUILD_DYNINST) target_link_libraries(hosttrace-dyninst INTERFACE Dyninst::Dyninst) - set(HOSTTRACE_DYNINST_API_RT ${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI_RT/libdyninstAPI_RT${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(HOSTTRACE_DYNINST_API_RT + ${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI_RT/libdyninstAPI_RT${CMAKE_SHARED_LIBRARY_SUFFIX} + ) if(HOSTTRACE_DYNINST_API_RT) - target_compile_definitions(hosttrace-dyninst INTERFACE - DYNINST_API_RT="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}:$:${CMAKE_INSTALL_PREFIX}/lib/$:$") + target_compile_definitions( + hosttrace-dyninst + INTERFACE + DYNINST_API_RT="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}:$:${CMAKE_INSTALL_PREFIX}/lib/$:$" + ) endif() else() - find_package(Dyninst ${hosttrace_FIND_QUIETLY} REQUIRED COMPONENTS dyninstAPI parseAPI instructionAPI symtabAPI) + find_package(Dyninst ${hosttrace_FIND_QUIETLY} REQUIRED + COMPONENTS dyninstAPI parseAPI instructionAPI symtabAPI) - if(TARGET Dyninst::Dyninst) # updated Dyninst CMake system was found + if(TARGET Dyninst::Dyninst) # updated Dyninst CMake system was found # useful for defining the location of the runtime API - find_library(HOSTTRACE_DYNINST_API_RT dyninstAPI_RT + find_library( + HOSTTRACE_DYNINST_API_RT dyninstAPI_RT HINTS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} PATHS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} PATH_SUFFIXES lib) if(HOSTTRACE_DYNINST_API_RT) - target_compile_definitions(hosttrace-dyninst INTERFACE - DYNINST_API_RT="${HOSTTRACE_DYNINST_API_RT}") + target_compile_definitions( + hosttrace-dyninst INTERFACE DYNINST_API_RT="${HOSTTRACE_DYNINST_API_RT}") endif() add_rpath(${Dyninst_LIBRARIES}) target_link_libraries(hosttrace-dyninst INTERFACE Dyninst::Dyninst) - else() # updated Dyninst CMake system was not found + else() # updated Dyninst CMake system was not found set(_BOOST_COMPONENTS atomic system thread date_time) - set(hosttrace_BOOST_COMPONENTS "${_BOOST_COMPONENTS}" CACHE STRING - "Boost components used by Dyninst in hosttrace") + set(hosttrace_BOOST_COMPONENTS + "${_BOOST_COMPONENTS}" + CACHE STRING "Boost components used by Dyninst in hosttrace") set(Boost_NO_BOOST_CMAKE ON) - find_package(Boost QUIET REQUIRED - COMPONENTS ${hosttrace_BOOST_COMPONENTS}) + find_package(Boost QUIET REQUIRED COMPONENTS ${hosttrace_BOOST_COMPONENTS}) # some installs of dyninst don't set this properly if(EXISTS "${DYNINST_INCLUDE_DIR}" AND NOT DYNINST_HEADER_DIR) - get_filename_component(DYNINST_HEADER_DIR "${DYNINST_INCLUDE_DIR}" REALPATH CACHE) + get_filename_component(DYNINST_HEADER_DIR "${DYNINST_INCLUDE_DIR}" REALPATH + CACHE) else() - find_path(DYNINST_HEADER_DIR + find_path( + DYNINST_HEADER_DIR NAMES BPatch.h dyninstAPI_RT.h HINTS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} ${Dyninst_DIR}/../../.. PATHS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} ${Dyninst_DIR}/../../.. @@ -135,7 +152,8 @@ else() endif() # useful for defining the location of the runtime API - find_library(DYNINST_API_RT dyninstAPI_RT + find_library( + DYNINST_API_RT dyninstAPI_RT HINTS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} PATHS ${Dyninst_ROOT_DIR} ${Dyninst_DIR} PATH_SUFFIXES lib) @@ -150,14 +168,15 @@ else() endif() if(NOT TBB_FOUND) - find_path(TBB_INCLUDE_DIR + find_path( + TBB_INCLUDE_DIR NAMES tbb/tbb.h PATH_SUFFIXES include) endif() if(DYNINST_API_RT) - target_compile_definitions(hosttrace-dyninst INTERFACE - DYNINST_API_RT="${DYNINST_API_RT}") + target_compile_definitions(hosttrace-dyninst + INTERFACE DYNINST_API_RT="${DYNINST_API_RT}") endif() if(Boost_DIR) @@ -169,9 +188,21 @@ else() endif() add_rpath(${DYNINST_LIBRARIES} ${Boost_LIBRARIES}) - target_link_libraries(hosttrace-dyninst INTERFACE - ${DYNINST_LIBRARIES} ${Boost_LIBRARIES}) - foreach(_TARG dyninst dyninstAPI instructionAPI symtabAPI parseAPI headers atomic system thread date_time TBB) + target_link_libraries(hosttrace-dyninst INTERFACE ${DYNINST_LIBRARIES} + ${Boost_LIBRARIES}) + foreach( + _TARG + dyninst + dyninstAPI + instructionAPI + symtabAPI + parseAPI + headers + atomic + system + thread + date_time + TBB) if(TARGET Dyninst::${_TARG}) target_link_libraries(hosttrace-dyninst INTERFACE Dyninst::${_TARG}) elseif(TARGET Boost::${_TARG}) @@ -180,49 +211,48 @@ else() target_link_libraries(hosttrace-dyninst INTERFACE ${_TARG}) endif() endforeach() - target_include_directories(hosttrace-dyninst SYSTEM INTERFACE - ${TBB_INCLUDE_DIR} - ${Boost_INCLUDE_DIRS} - ${DYNINST_HEADER_DIR}) + target_include_directories( + hosttrace-dyninst SYSTEM INTERFACE ${TBB_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} + ${DYNINST_HEADER_DIR}) target_compile_definitions(hosttrace-dyninst INTERFACE hosttrace_USE_DYNINST) endif() endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# Perfetto +# Perfetto # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# set(perfetto_DIR ${PROJECT_SOURCE_DIR}/external/perfetto) checkout_git_submodule( - RELATIVE_PATH external/perfetto - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - REPO_URL https://android.googlesource.com/platform/external/perfetto - REPO_BRANCH v17.0 - TEST_FILE sdk/perfetto.cc) + RELATIVE_PATH external/perfetto + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + REPO_URL https://android.googlesource.com/platform/external/perfetto + REPO_BRANCH v17.0 + TEST_FILE sdk/perfetto.cc) -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# ELFIO +# ELFIO # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# if(HOSTTRACE_BUILD_DEVICETRACE) checkout_git_submodule( - RELATIVE_PATH external/elfio - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - REPO_URL https://github.com/jrmadsen/ELFIO.git - REPO_BRANCH set-offset-support) + RELATIVE_PATH external/elfio + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + REPO_URL https://github.com/jrmadsen/ELFIO.git + REPO_BRANCH set-offset-support) add_subdirectory(external/elfio) endif() -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # -# Clang Tidy +# Clang Tidy # -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# # clang-tidy macro(HOSTTRACE_ACTIVATE_CLANG_TIDY) @@ -230,17 +260,18 @@ macro(HOSTTRACE_ACTIVATE_CLANG_TIDY) find_program(CLANG_TIDY_COMMAND NAMES clang-tidy) add_feature(CLANG_TIDY_COMMAND "Path to clang-tidy command") if(NOT CLANG_TIDY_COMMAND) - timemory_message(WARNING "HOSTTRACE_USE_CLANG_TIDY is ON but clang-tidy is not found!") + timemory_message( + WARNING "HOSTTRACE_USE_CLANG_TIDY is ON but clang-tidy is not found!") set(HOSTTRACE_USE_CLANG_TIDY OFF) else() set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_COMMAND}) - # Create a preprocessor definition that depends on .clang-tidy content so - # the compile command will change when .clang-tidy changes. This ensures - # that a subsequent build re-runs clang-tidy on all sources even if they - # do not otherwise need to be recompiled. Nothing actually uses this - # definition. We add it to targets on which we run clang-tidy just to - # get the build dependency on the .clang-tidy file. + # Create a preprocessor definition that depends on .clang-tidy content so the + # compile command will change when .clang-tidy changes. This ensures that a + # subsequent build re-runs clang-tidy on all sources even if they do not + # otherwise need to be recompiled. Nothing actually uses this definition. We + # add it to targets on which we run clang-tidy just to get the build + # dependency on the .clang-tidy file. file(SHA1 ${CMAKE_CURRENT_LIST_DIR}/.clang-tidy clang_tidy_sha1) set(CLANG_TIDY_DEFINITIONS "CLANG_TIDY_SHA1=${clang_tidy_sha1}") unset(clang_tidy_sha1) @@ -248,75 +279,91 @@ macro(HOSTTRACE_ACTIVATE_CLANG_TIDY) endif() endmacro() -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# # -# clang-format target +# clang-format target # -#------------------------------------------------------------------------------# +# ------------------------------------------------------------------------------# -find_program(HOSTTRACE_CLANG_FORMAT_EXE - NAMES - clang-format-12 - clang-format-11 - clang-format-10 - clang-format-9 - clang-format) +find_program(HOSTTRACE_CLANG_FORMAT_EXE NAMES clang-format-11 clang-format-mp-11 + clang-format) if(HOSTTRACE_CLANG_FORMAT_EXE) - file(GLOB sources - ${PROJECT_SOURCE_DIR}/src/*.cpp) - file(GLOB headers - ${PROJECT_SOURCE_DIR}/include/*.hpp) - file(GLOB_RECURSE examples - ${PROJECT_SOURCE_DIR}/examples/*.cpp - ${PROJECT_SOURCE_DIR}/examples/*.hpp) - add_custom_target(format + file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cpp) + file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hpp) + file(GLOB_RECURSE examples ${PROJECT_SOURCE_DIR}/examples/*.cpp + ${PROJECT_SOURCE_DIR}/examples/*.hpp) + add_custom_target( + format ${HOSTTRACE_CLANG_FORMAT_EXE} -i ${sources} ${headers} ${examples} COMMENT "Running ${HOSTTRACE_CLANG_FORMAT_EXE}...") else() - message(AUTHOR_WARNING "clang-format could not be found. format build target not available.") + message( + AUTHOR_WARNING + "clang-format could not be found. format build target not available.") endif() -#----------------------------------------------------------------------------------------# -# configure submodule -#----------------------------------------------------------------------------------------# +# ----------------------------------------------------------------------------------------# +# configure submodule +# ----------------------------------------------------------------------------------------# -set(TIMEMORY_INSTALL_HEADERS OFF CACHE BOOL "Disable timemory header install") -set(TIMEMORY_INSTALL_CONFIG OFF CACHE BOOL "Disable timemory cmake configuration install") -set(TIMEMORY_INSTALL_ALL OFF CACHE BOOL "Disable install target depending on all target") -set(TIMEMORY_BUILD_C OFF CACHE BOOL "Disable timemory C library") -set(TIMEMORY_BUILD_FORTRAN OFF CACHE BOOL "Disable timemory Fortran library") -set(TIMEMORY_BUILD_TOOLS OFF CACHE BOOL "Ensure timem executable is built") -set(TIMEMORY_BUILD_EXCLUDE_FROM_ALL ON CACHE BOOL "Set timemory to only build dependencies") -set(TIMEMORY_QUIET_CONFIG ON CACHE BOOL "Make timemory configuration quieter") +set(TIMEMORY_INSTALL_HEADERS + OFF + CACHE BOOL "Disable timemory header install") +set(TIMEMORY_INSTALL_CONFIG + OFF + CACHE BOOL "Disable timemory cmake configuration install") +set(TIMEMORY_INSTALL_ALL + OFF + CACHE BOOL "Disable install target depending on all target") +set(TIMEMORY_BUILD_C + OFF + CACHE BOOL "Disable timemory C library") +set(TIMEMORY_BUILD_FORTRAN + OFF + CACHE BOOL "Disable timemory Fortran library") +set(TIMEMORY_BUILD_TOOLS + OFF + CACHE BOOL "Ensure timem executable is built") +set(TIMEMORY_BUILD_EXCLUDE_FROM_ALL + ON + CACHE BOOL "Set timemory to only build dependencies") +set(TIMEMORY_QUIET_CONFIG + ON + CACHE BOOL "Make timemory configuration quieter") # timemory feature settings -set(TIMEMORY_USE_GOTCHA ON CACHE BOOL "Enable GOTCHA support in timemory") -set(TIMEMORY_USE_PERFETTO OFF CACHE BOOL "Disable perfetto support in timemory") +set(TIMEMORY_USE_GOTCHA + ON + CACHE BOOL "Enable GOTCHA support in timemory") +set(TIMEMORY_USE_PERFETTO + OFF + CACHE BOOL "Disable perfetto support in timemory") # timemory feature build settings -set(TIMEMORY_BUILD_GOTCHA ON CACHE BOOL "Enable building GOTCHA library from submodule") +set(TIMEMORY_BUILD_GOTCHA + ON + CACHE BOOL "Enable building GOTCHA library from submodule") # timemory build settings -set(TIMEMORY_TLS_MODEL "global-dynamic" CACHE STRING "Thread-local static model" FORCE) +set(TIMEMORY_TLS_MODEL + "global-dynamic" + CACHE STRING "Thread-local static model" FORCE) checkout_git_submodule( - RELATIVE_PATH external/timemory - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - REPO_URL https://github.com/NERSC/timemory.git - REPO_BRANCH develop) + RELATIVE_PATH external/timemory + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + REPO_URL https://github.com/NERSC/timemory.git + REPO_BRANCH gpu-kernel-instrumentation) -hosttrace_save_variables(BUILD_CONFIG - BUILD_SHARED_LIBS - BUILD_STATIC_LIBS - CMAKE_POSITION_INDEPENDENT_CODE) +hosttrace_save_variables(BUILD_CONFIG VARIABLES BUILD_SHARED_LIBS BUILD_STATIC_LIBS + CMAKE_POSITION_INDEPENDENT_CODE) -# ensure timemory builds PIC static libs so that we don't have to install timemory shared lib +# ensure timemory builds PIC static libs so that we don't have to install timemory shared +# lib set(BUILD_SHARED_LIBS ON) set(BUILD_STATIC_LIBS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_subdirectory(external/timemory) -hosttrace_restore_variables(BUILD_CONFIG - BUILD_SHARED_LIBS - BUILD_STATIC_LIBS - CMAKE_POSITION_INDEPENDENT_CODE) +hosttrace_restore_variables(BUILD_CONFIG VARIABLES BUILD_SHARED_LIBS BUILD_STATIC_LIBS + CMAKE_POSITION_INDEPENDENT_CODE) diff --git a/projects/rocprofiler-systems/examples/CMakeLists.txt b/projects/rocprofiler-systems/examples/CMakeLists.txt index 33d79c20ad..4de5b8a5db 100644 --- a/projects/rocprofiler-systems/examples/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR) -project(hosttrace-dyninst-examples - LANGUAGES CXX) +project(hosttrace-dyninst-examples LANGUAGES CXX) add_subdirectory(transpose) add_subdirectory(parallel-overhead) diff --git a/projects/rocprofiler-systems/examples/parallel-overhead/CMakeLists.txt b/projects/rocprofiler-systems/examples/parallel-overhead/CMakeLists.txt index cfad83faed..27bc2a6077 100644 --- a/projects/rocprofiler-systems/examples/parallel-overhead/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/parallel-overhead/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.13 FATAL_ERROR) -project(hosttrace-parallel-overhead - LANGUAGES CXX) +project(hosttrace-parallel-overhead LANGUAGES CXX) set(CMAKE_BUILD_TYPE "Release") find_package(Threads REQUIRED) @@ -9,6 +8,6 @@ add_executable(parallel-overhead parallel-overhead.cpp) target_link_libraries(parallel-overhead Threads::Threads) if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - set_target_properties(parallel-overhead PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set_target_properties(parallel-overhead PROPERTIES RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}) endif() diff --git a/projects/rocprofiler-systems/examples/parallel-overhead/parallel-overhead.cpp b/projects/rocprofiler-systems/examples/parallel-overhead/parallel-overhead.cpp index ff17c347a6..99d77d2fcd 100644 --- a/projects/rocprofiler-systems/examples/parallel-overhead/parallel-overhead.cpp +++ b/projects/rocprofiler-systems/examples/parallel-overhead/parallel-overhead.cpp @@ -32,12 +32,9 @@ main(int argc, char** argv) size_t nthread = 16; size_t nitr = 50000; long nfib = 10; - if(argc > 1) - nfib = atol(argv[1]); - if(argc > 2) - nthread = atol(argv[2]); - if(argc > 3) - nitr = atol(argv[3]); + if(argc > 1) nfib = atol(argv[1]); + if(argc > 2) nthread = atol(argv[2]); + if(argc > 3) nitr = atol(argv[3]); std::vector threads{}; for(size_t i = 0; i < nthread; ++i) diff --git a/projects/rocprofiler-systems/examples/transpose/CMakeLists.txt b/projects/rocprofiler-systems/examples/transpose/CMakeLists.txt index 2e5ddc7c3d..3393afe178 100644 --- a/projects/rocprofiler-systems/examples/transpose/CMakeLists.txt +++ b/projects/rocprofiler-systems/examples/transpose/CMakeLists.txt @@ -1,8 +1,6 @@ - cmake_minimum_required(VERSION 3.13 FATAL_ERROR) -project(hosttrace-transpose - LANGUAGES CXX) +project(hosttrace-transpose LANGUAGES CXX) find_program(HIPCC_EXECUTABLE NAMES hipcc) @@ -31,13 +29,11 @@ if(TRANSPOSE_USE_MPI) endif() if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - set_target_properties(transpose PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set_target_properties(transpose PROPERTIES RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}) if(NOT CMAKE_CXX_COMPILER_IS_HIPCC AND HIPCC_EXECUTABLE) # defined in MacroUtilities.cmake - hosttrace_custom_compilation( - COMPILER ${HIPCC_EXECUTABLE} - TARGET transpose) + hosttrace_custom_compilation(COMPILER ${HIPCC_EXECUTABLE} TARGET transpose) endif() endif() diff --git a/projects/rocprofiler-systems/examples/transpose/transpose.cpp b/projects/rocprofiler-systems/examples/transpose/transpose.cpp index 51aaf340e4..20599937a2 100644 --- a/projects/rocprofiler-systems/examples/transpose/transpose.cpp +++ b/projects/rocprofiler-systems/examples/transpose/transpose.cpp @@ -161,8 +161,7 @@ main(int argc, char** argv) MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); #endif - if(rank == 0) - run(argc, argv); + if(rank == 0) run(argc, argv); #if defined(USE_MPI) MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); diff --git a/projects/rocprofiler-systems/examples/transpose/transpose.new.cpp b/projects/rocprofiler-systems/examples/transpose/transpose.new.cpp index 786d5d34fb..c3f4398a84 100644 --- a/projects/rocprofiler-systems/examples/transpose/transpose.new.cpp +++ b/projects/rocprofiler-systems/examples/transpose/transpose.new.cpp @@ -130,18 +130,14 @@ main(int argc, char** argv) { int nx = 32; int ny = 32; - if(argc > 1) - nx = atoi(argv[1]); - if(argc > 2) - ny = atoi(argv[2]); + if(argc > 1) nx = atoi(argv[1]); + if(argc > 2) ny = atoi(argv[2]); unsigned int M = 4960; unsigned int N = 4960; - if(argc > 3) - M = atoi(argv[3]); - if(argc > 4) - N = atoi(argv[4]); + if(argc > 3) M = atoi(argv[3]); + if(argc > 4) N = atoi(argv[4]); std::cout << "M: " << M << " N: " << N << std::endl; size_t size = sizeof(int) * M * N; diff --git a/projects/rocprofiler-systems/external/dyninst b/projects/rocprofiler-systems/external/dyninst index c7e4924022..b96fa72a02 160000 --- a/projects/rocprofiler-systems/external/dyninst +++ b/projects/rocprofiler-systems/external/dyninst @@ -1 +1 @@ -Subproject commit c7e4924022dfe902dfd50122da8df8a270b8483f +Subproject commit b96fa72a026eb703a4fc742c08180a47b01d914c diff --git a/projects/rocprofiler-systems/external/timemory b/projects/rocprofiler-systems/external/timemory index f2dc618160..174607ac8c 160000 --- a/projects/rocprofiler-systems/external/timemory +++ b/projects/rocprofiler-systems/external/timemory @@ -1 +1 @@ -Subproject commit f2dc61816048cb31adc87d26f2a2050fe6b8cb63 +Subproject commit 174607ac8cf4b93284dab3ad028806f26ebde216 diff --git a/projects/rocprofiler-systems/include/hosttrace.hpp b/projects/rocprofiler-systems/include/hosttrace.hpp index 0a46fd0128..7f2adfb74f 100644 --- a/projects/rocprofiler-systems/include/hosttrace.hpp +++ b/projects/rocprofiler-systems/include/hosttrace.hpp @@ -58,9 +58,9 @@ #include #include -#define MUTNAMELEN 1024 -#define FUNCNAMELEN 32 * 1024 -#define NO_ERROR -1 +#define MUTNAMELEN 1024 +#define FUNCNAMELEN 32 * 1024 +#define NO_ERROR -1 #define TIMEMORY_BIN_DIR "bin" #if !defined(PATH_MAX) @@ -165,14 +165,12 @@ static auto regex_opts = std::regex_constants::egrep | std::regex_constants::opt // control debug printf statements #define dprintf(...) \ - if(debug_print || verbose_level > 0) \ - fprintf(stderr, __VA_ARGS__); \ + if(debug_print || verbose_level > 0) fprintf(stderr, __VA_ARGS__); \ fflush(stderr); // control verbose printf statements #define verbprintf(LEVEL, ...) \ - if(verbose_level >= LEVEL) \ - fprintf(stdout, __VA_ARGS__); \ + if(verbose_level >= LEVEL) fprintf(stdout, __VA_ARGS__); \ fflush(stdout); //======================================================================================// @@ -316,11 +314,9 @@ struct function_signature string_t get() const { std::stringstream ss; - if(use_return_info) - ss << m_return << " "; + if(use_return_info) ss << m_return << " "; ss << m_name; - if(use_args_info) - ss << m_params; + if(use_args_info) ss << m_params; if(m_loop && m_info_beg) { if(m_info_end) @@ -335,10 +331,8 @@ struct function_signature } else { - if(use_file_info && m_file.length() > 0) - ss << '/' << m_file; - if(use_line_info && m_row.first > 0) - ss << ":" << m_row.first; + if(use_file_info && m_file.length() > 0) ss << '/' << m_file; + if(use_line_info && m_row.first > 0) ss << ":" << m_row.first; } m_signature = ss.str(); @@ -472,8 +466,7 @@ dump_info(std::ostream& _os, const fmodset_t& _data) static inline void dump_info(const string_t& _oname, const fmodset_t& _data, int _level) { - if(!debug_print && verbose_level < _level) - return; + if(!debug_print && verbose_level < _level) return; std::ofstream ofs(_oname); if(ofs) @@ -585,8 +578,7 @@ hosttrace_get_address_space(patch_pointer_t _bpatch, int _cmdc, char** _cmdv, { verbprintf(1, "Opening '%s' for binary rewrite... ", _name.c_str()); fflush(stderr); - if(!_name.empty()) - mutatee = _bpatch->openBinary(_name.c_str(), false); + if(!_name.empty()) mutatee = _bpatch->openBinary(_name.c_str(), false); if(!mutatee) { fprintf(stderr, "[hosttrace]> Failed to open binary '%s'\n", _name.c_str()); @@ -617,8 +609,7 @@ hosttrace_get_address_space(patch_pointer_t _bpatch, int _cmdc, char** _cmdv, std::stringstream ss; for(int i = 0; i < _cmdc; ++i) { - if(!_cmdv[i]) - continue; + if(!_cmdv[i]) continue; ss << _cmdv[i] << " "; } fprintf(stderr, "[hosttrace]> Failed to create process: '%s'\n", @@ -636,8 +627,7 @@ hosttrace_get_address_space(patch_pointer_t _bpatch, int _cmdc, char** _cmdv, TIMEMORY_NOINLINE inline void hosttrace_thread_exit(thread_t* thread, BPatch_exitType exit_type) { - if(!thread) - return; + if(!thread) return; BPatch_process* app = thread->getProcess(); @@ -650,16 +640,19 @@ hosttrace_thread_exit(thread_t* thread, BPatch_exitType exit_type) switch(exit_type) { - case ExitedNormally: { + case ExitedNormally: + { fprintf(stderr, "[hosttrace]> Thread exited normally\n"); break; } - case ExitedViaSignal: { + case ExitedViaSignal: + { fprintf(stderr, "[hosttrace]> Thread terminated unexpectedly\n"); break; } case NoExit: - default: { + default: + { fprintf(stderr, "[hosttrace]> %s invoked with NoExit\n", __FUNCTION__); break; } diff --git a/projects/rocprofiler-systems/src/hosttrace-details.cpp b/projects/rocprofiler-systems/src/hosttrace-details.cpp index 6eeed9c8cb..a3e2f59261 100644 --- a/projects/rocprofiler-systems/src/hosttrace-details.cpp +++ b/projects/rocprofiler-systems/src/hosttrace-details.cpp @@ -43,8 +43,7 @@ function_signature get_loop_file_line_info(module_t* mutatee_module, procedure_t* f, flow_graph_t* cfGraph, basic_loop_t* loopToInstrument) { - if(!cfGraph || !loopToInstrument || !f) - return function_signature("", "", ""); + if(!cfGraph || !loopToInstrument || !f) return function_signature{ "", "", "" }; char fname[MUTNAMELEN]; char mname[MUTNAMELEN]; @@ -57,8 +56,7 @@ get_loop_file_line_info(module_t* mutatee_module, procedure_t* f, flow_graph_t* bpvector_t* loopExitInst = cfGraph->findLoopInstPoints(BPatch_locLoopEndIter, loopToInstrument); - if(!loopStartInst || !loopExitInst) - return function_signature("", "", ""); + if(!loopStartInst || !loopExitInst) return function_signature{ "", "", "" }; unsigned long baseAddr = (unsigned long) (*loopStartInst)[0]->getAddress(); unsigned long lastAddr = @@ -85,8 +83,7 @@ get_loop_file_line_info(module_t* mutatee_module, procedure_t* f, flow_graph_t* for(auto itr : *params) { string_t _name = itr->getType()->getName(); - if(_name.empty()) - _name = itr->getName(); + if(_name.empty()) _name = itr->getName(); _params.push_back(_name); } } @@ -103,8 +100,7 @@ get_loop_file_line_info(module_t* mutatee_module, procedure_t* f, flow_graph_t* // filename = lines[0].fileName(); auto row1 = lines[0].lineNumber(); auto col1 = lines[0].lineOffset(); - if(col1 < 0) - col1 = 0; + if(col1 < 0) col1 = 0; // This following section is attempting to remedy the limitations of // getSourceLines for loops. As the program goes through the loop, the resulting @@ -122,10 +118,8 @@ get_loop_file_line_info(module_t* mutatee_module, procedure_t* f, flow_graph_t* { auto row2 = linesEnd[0].lineNumber(); auto col2 = linesEnd[0].lineOffset(); - if(col2 < 0) - col2 = 0; - if(row2 < row1) - row1 = row2; /* Fix for wrong line numbers*/ + if(col2 < 0) col2 = 0; + if(row2 < row1) row1 = row2; // Fix for wrong line numbers return function_signature(typeName, fname, filename, _params, { row1, row2 }, { col1, col2 }, true, info1, info2); @@ -180,8 +174,7 @@ get_func_file_line_info(module_t* mutatee_module, procedure_t* f) for(auto itr : *params) { string_t _name = itr->getType()->getName(); - if(_name.empty()) - _name = itr->getName(); + if(_name.empty()) _name = itr->getName(); _params.push_back(_name); } } @@ -196,17 +189,14 @@ get_func_file_line_info(module_t* mutatee_module, procedure_t* f) row1 = lines[0].lineNumber(); col1 = lines[0].lineOffset(); - if(col1 < 0) - col1 = 0; + if(col1 < 0) col1 = 0; info2 = mutatee_module->getSourceLines((unsigned long) (lastAddr - 1), lines); if(info2) { row2 = lines[1].lineNumber(); col2 = lines[1].lineOffset(); - if(col2 < 0) - col2 = 0; - if(row2 < row1) - row1 = row2; + if(col2 < 0) col2 = 0; + if(row2 < row1) row1 = row2; return function_signature(typeName, fname, filename, _params, { row1, 0 }, { 0, 0 }, false, info1, info2); } @@ -239,8 +229,7 @@ errorFunc(error_level_t level, int num, const char** params) { printf("Error #%d (level %d): %s\n", num, level, line); // We consider some errors fatal. - if(num == 101) - exit(-1); + if(num == 101) exit(-1); } } @@ -251,15 +240,13 @@ errorFunc(error_level_t level, int num, const char** params) procedure_t* find_function(image_t* app_image, const std::string& _name, strset_t _extra) { - if(_name.empty()) - return nullptr; + if(_name.empty()) return nullptr; auto _find = [app_image](const string_t& _f) -> procedure_t* { // Extract the vector of functions bpvector_t _found; auto ret = app_image->findFunction(_f.c_str(), _found, false, true, true); - if(ret == nullptr || _found.empty()) - return nullptr; + if(ret == nullptr || _found.empty()) return nullptr; return _found.at(0); }; @@ -271,8 +258,7 @@ find_function(image_t* app_image, const std::string& _name, strset_t _extra) ++itr; } - if(!_func) - verbprintf(2, "hosttrace: Unable to find function %s\n", _name.c_str()); + if(!_func) verbprintf(2, "hosttrace: Unable to find function %s\n", _name.c_str()); return _func; } @@ -289,8 +275,7 @@ error_func_real(error_level_t level, int num, const char* const* params) { if(level == BPatchInfo) { - if(error_print > 1) - printf("%s\n", params[0]); + if(error_print > 1) printf("%s\n", params[0]); } else printf("%s", params[0]); @@ -306,8 +291,7 @@ error_func_real(error_level_t level, int num, const char* const* params) { printf("Error #%d (level %d): %s\n", num, level, line); // We consider some errors fatal. - if(num == 101) - exit(-1); + if(num == 101) exit(-1); } } } diff --git a/projects/rocprofiler-systems/src/hosttrace.cpp b/projects/rocprofiler-systems/src/hosttrace.cpp index 496a38bc97..16dca37309 100644 --- a/projects/rocprofiler-systems/src/hosttrace.cpp +++ b/projects/rocprofiler-systems/src/hosttrace.cpp @@ -186,8 +186,7 @@ main(int argc, char** argv) if(_cmdc > 0) std::cout << "\n[hosttrace][command]: " << cmd_string(_cmdc, _cmdv) << "\n\n"; - if(_cmdc > 0) - cmdv0 = _cmdv[0]; + if(_cmdc > 0) cmdv0 = _cmdv[0]; std::stringstream jump_description; jump_description @@ -417,8 +416,7 @@ main(int argc, char** argv) return -1; } - if(parser.exists("e")) - werror = true; + if(parser.exists("e")) werror = true; if(parser.exists("v")) { @@ -434,11 +432,9 @@ main(int argc, char** argv) debug_print = true; } - if(parser.exists("m")) - main_fname = parser.get("m"); + if(parser.exists("m")) main_fname = parser.get("m"); - if(parser.exists("l")) - loop_level_instr = true; + if(parser.exists("l")) loop_level_instr = true; if(_cmdc == 0 && parser.exists("c")) { @@ -485,17 +481,13 @@ main(int argc, char** argv) inputlib = parser.get("L"); } - if(parser.exists("S")) - stl_func_instr = true; + if(parser.exists("S")) stl_func_instr = true; - if(parser.exists("cstdlib")) - cstd_func_instr = true; + if(parser.exists("cstdlib")) cstd_func_instr = true; - if(parser.exists("mpi")) - use_mpi = true; + if(parser.exists("mpi")) use_mpi = true; - if(parser.exists("p")) - _pid = parser.get("p"); + if(parser.exists("p")) _pid = parser.get("p"); if(parser.exists("d")) { @@ -509,8 +501,7 @@ main(int argc, char** argv) break; } default_components += _components.at(i); - if(i + 1 < _components.size()) - default_components += ","; + if(i + 1 < _components.size()) default_components += ","; } if(default_components == "none") default_components = {}; @@ -531,8 +522,7 @@ main(int argc, char** argv) instr_pop_hash = "hosttrace_pop_" + instr_mode + "_hash"; } - if(parser.exists("prefer")) - prefer_library = parser.get("prefer"); + if(parser.exists("prefer")) prefer_library = parser.get("prefer"); if(parser.exists("load")) { @@ -564,8 +554,7 @@ main(int argc, char** argv) fini_stub_names = parser.get("fini-functions"); auto env_vars = parser.get("env"); - if(verbose_level >= 0) - tim::makedir(modfunc_dump_dir); + if(verbose_level >= 0) tim::makedir(modfunc_dump_dir); //----------------------------------------------------------------------------------// // @@ -576,8 +565,7 @@ main(int argc, char** argv) // Helper function for adding regex expressions // auto add_regex = [](auto& regex_array, const string_t& regex_expr) { - if(!regex_expr.empty()) - regex_array.push_back(std::regex(regex_expr, regex_opts)); + if(!regex_expr.empty()) regex_array.push_back(std::regex(regex_expr, regex_opts)); }; add_regex(func_include, tim::get_env("HOSTTRACE_REGEX_INCLUDE", "")); @@ -783,8 +771,7 @@ main(int argc, char** argv) auto itr = module_names.begin(); std::advance(itr, i); std::cout << std::setw(mwid) << *itr << " | "; - if(i % ncol == ncol - 1) - std::cout << "\n| "; + if(i % ncol == ncol - 1) std::cout << "\n| "; } std::cout << '\n' << std::endl; } @@ -833,8 +820,7 @@ main(int argc, char** argv) result = (addr_space->loadLibrary(_libname.c_str()) != nullptr); verbprintf(1, "loadLibrary(%s) result = %s\n", _libname.c_str(), (result) ? "success" : "failure"); - if(result) - break; + if(result) break; } if(!result) { @@ -906,18 +892,15 @@ main(int argc, char** argv) auto* mpi_init_func = find_function(app_image, "MPI_Init", { "MPI_Init_thread" }); auto* mpi_fini_func = find_function(app_image, "MPI_Finalize"); - if(!main_func && main_fname == "main") - main_func = find_function(app_image, "_main"); + if(!main_func && main_fname == "main") main_func = find_function(app_image, "_main"); verbprintf(0, "Instrumenting with '%s' and '%s'...\n", instr_push_func.c_str(), instr_pop_func.c_str()); - if(mpi_init_func && mpi_fini_func) - use_mpi = true; + if(mpi_init_func && mpi_fini_func) use_mpi = true; bool use_mpip = false; - if(use_mpi) - use_mpip = true; + if(use_mpi) use_mpip = true; //----------------------------------------------------------------------------------// // @@ -930,8 +913,7 @@ main(int argc, char** argv) verbprintf(3, "Attempting to find instrumentation for '%s' via '%s' and '%s'...\n", _name.c_str(), _beg.c_str(), _end.c_str()); - if(_beg.empty() || _end.empty()) - return false; + if(_beg.empty() || _end.empty()) return false; auto* _beg_func = find_function(app_image, _beg); auto* _end_func = find_function(app_image, _end); if(_beg_func && _end_func) @@ -957,17 +939,14 @@ main(int argc, char** argv) { string_t _name = itr; size_t _pos = _name.find_last_of('/'); - if(_pos != npos_v) - _name = _name.substr(_pos + 1); + if(_pos != npos_v) _name = _name.substr(_pos + 1); _pos = _name.find('.'); - if(_pos != npos_v) - _name = _name.substr(0, _pos); + if(_pos != npos_v) _name = _name.substr(0, _pos); _pos = _name.find("libhosttrace-"); if(_pos != npos_v) _name = _name.erase(_pos, std::string("libhosttrace-").length()); _pos = _name.find("lib"); - if(_pos == 0) - _name = _name.substr(_pos + std::string("lib").length()); + if(_pos == 0) _name = _name.substr(_pos + std::string("lib").length()); while((_pos = _name.find('-')) != npos_v) _name.replace(_pos, 1, "_"); @@ -1005,18 +984,15 @@ main(int argc, char** argv) } } - if(add_instr_library(_name, best_init_name, base_fini_name)) - continue; + if(add_instr_library(_name, best_init_name, base_fini_name)) continue; // check user-specified signatures first for(const auto& bitr : init_stub_names) { - if(used_stub_names.find(bitr) != used_stub_names.end()) - continue; + if(used_stub_names.find(bitr) != used_stub_names.end()) continue; for(const auto& fitr : fini_stub_names) { - if(used_stub_names.find(fitr) != used_stub_names.end()) - continue; + if(used_stub_names.find(fitr) != used_stub_names.end()) continue; if(add_instr_library(_name, bitr, fitr)) goto found_instr_functions; // exit loop after match } @@ -1065,8 +1041,7 @@ main(int argc, char** argv) pair_t(fini_func, "hosttrace_trace_finalize"), pair_t(env_func, "hosttrace_trace_set_env") }) { - if(itr.first == main_func && !is_driver) - continue; + if(itr.first == main_func && !is_driver) continue; if(!itr.first) { stringstream_t ss; @@ -1092,8 +1067,7 @@ main(int argc, char** argv) { char moduleName[MUTNAMELEN]; _module->getName(moduleName, MUTNAMELEN); - if(strcmp(moduleName, "DEFAULT_MODULE") != 0) - _has_debug_info = true; + if(strcmp(moduleName, "DEFAULT_MODULE") != 0) _has_debug_info = true; } } }; @@ -1153,8 +1127,7 @@ main(int argc, char** argv) { verbprintf(2, "Getting main function signature...\n"); main_sign = get_func_file_line_info(main_func->getModule(), main_func); - if(main_sign.m_params == "()") - main_sign.m_params = "(int argc, char** argv)"; + if(main_sign.m_params == "()") main_sign.m_params = "(int argc, char** argv)"; } verbprintf(2, "Getting call expressions... "); @@ -1221,23 +1194,16 @@ main(int argc, char** argv) // //----------------------------------------------------------------------------------// - if(trace_env_call) - init_names.push_back(trace_env_call.get()); - if(mode_env_call) - init_names.push_back(mode_env_call.get()); - if(mpii_env_call) - init_names.push_back(mpii_env_call.get()); - if(mpif_env_call) - init_names.push_back(mpif_env_call.get()); - if(use_mpi && use_mpi_env_call) - init_names.push_back(use_mpi_env_call.get()); - if(use_mpip && use_mpip_env_call) - init_names.push_back(use_mpip_env_call.get()); + if(trace_env_call) init_names.push_back(trace_env_call.get()); + if(mode_env_call) init_names.push_back(mode_env_call.get()); + if(mpii_env_call) init_names.push_back(mpii_env_call.get()); + if(mpif_env_call) init_names.push_back(mpif_env_call.get()); + if(use_mpi && use_mpi_env_call) init_names.push_back(use_mpi_env_call.get()); + if(use_mpip && use_mpip_env_call) init_names.push_back(use_mpip_env_call.get()); for(const auto& itr : env_variables) { - if(itr) - init_names.push_back(itr.get()); + if(itr) init_names.push_back(itr.get()); } for(const auto& itr : beg_expr) @@ -1253,11 +1219,9 @@ main(int argc, char** argv) } } - if(use_mpi && umpi_call) - init_names.push_back(umpi_call.get()); + if(use_mpi && umpi_call) init_names.push_back(umpi_call.get()); - if(init_call && binary_rewrite) - init_names.push_back(init_call.get()); + if(init_call && binary_rewrite) init_names.push_back(init_call.get()); if(binary_rewrite) { @@ -1299,13 +1263,11 @@ main(int argc, char** argv) verbprintf(0, "No binary_rewrite and no app_thread!...\n"); } - if(fini_call) - fini_names.push_back(fini_call.get()); + if(fini_call) fini_names.push_back(fini_call.get()); for(const auto& itr : end_expr) { - if(itr.second) - fini_names.push_back(itr.second.get()); + if(itr.second) fini_names.push_back(itr.second.get()); } //----------------------------------------------------------------------------------// @@ -1321,8 +1283,7 @@ main(int argc, char** argv) (unsigned long) procedures.size()); for(auto* itr : procedures) { - if(itr == main_func) - continue; + if(itr == main_func) continue; char modname[MUTNAMELEN]; char fname[FUNCNAMELEN]; @@ -1339,14 +1300,11 @@ main(int argc, char** argv) continue; } - if(std::string{ modname }.find("libdyninst") != std::string::npos) - continue; + if(std::string{ modname }.find("libdyninst") != std::string::npos) continue; - if(module_constraint(modname)) - continue; + if(module_constraint(modname)) continue; - if(!instrument_module(modname)) - continue; + if(!instrument_module(modname)) continue; itr->getName(fname, FUNCNAMELEN); @@ -1358,11 +1316,9 @@ main(int argc, char** argv) continue; } - if(routine_constraint(name.m_name.c_str())) - continue; + if(routine_constraint(name.m_name.c_str())) continue; - if(!instrument_entity(name.m_name)) - continue; + if(!instrument_entity(name.m_name)) continue; if(is_static_exe && has_debug_info && string_t{ fname } == "_fini" && string_t{ modname } == "DEFAULT_MODULE") @@ -1389,8 +1345,7 @@ main(int argc, char** argv) // try to get loops via the control flow graph flow_graph_t* cfg = itr->getCFG(); basic_loop_vec_t basic_loop{}; - if(cfg) - cfg->getOuterLoops(basic_loop); + if(cfg) cfg->getOuterLoops(basic_loop); // if the function has dynamic callsites and user specified instrumenting // dynamic callsites, force the instrumentation @@ -1502,8 +1457,7 @@ main(int argc, char** argv) { char modname[1024]; m->getName(modname, 1024); - if(strstr(modname, "libdyninst") != nullptr) - continue; + if(strstr(modname, "libdyninst") != nullptr) continue; if(!m->getProcedures()) { @@ -1513,8 +1467,7 @@ main(int argc, char** argv) verbprintf(1, "Parsing module: %s\n", modname); bpvector_t* p = m->getProcedures(); - if(!p) - continue; + if(!p) continue; instr_procedures(*p); } @@ -1692,8 +1645,7 @@ main(int argc, char** argv) } for(auto& mitr : _data) { - if(_mode != "modules") - std::cout << "\n" << mitr.first << ":\n"; + if(_mode != "modules") std::cout << "\n" << mitr.first << ":\n"; for(auto& itr : mitr.second) { std::cout << " " << itr << "\n"; @@ -1701,23 +1653,20 @@ main(int argc, char** argv) } }; - if(!print_available.empty()) - _dump_info(print_available, available_module_functions); + if(!print_available.empty()) _dump_info(print_available, available_module_functions); if(!print_instrumented.empty()) _dump_info(print_instrumented, instrumented_module_functions); if(!print_overlapping.empty()) _dump_info(print_overlapping, overlapping_module_functions); - if(_dump_and_exit) - exit(EXIT_SUCCESS); + if(_dump_and_exit) exit(EXIT_SUCCESS); //----------------------------------------------------------------------------------// // // Either write the instrumented binary or execute the application // //----------------------------------------------------------------------------------// - if(binary_rewrite) - addr_space->finalizeInsertionSet(false, nullptr); + if(binary_rewrite) addr_space->finalizeInsertionSet(false, nullptr); int code = -1; if(binary_rewrite) @@ -1753,8 +1702,7 @@ main(int argc, char** argv) strvec_t linked_libraries = tim::popen::read_fork(ldd); auto perr = tim::popen::pclose(ldd); - if(perr != 0) - perror("Error in hosttrace_fork"); + if(perr != 0) perror("Error in hosttrace_fork"); for(const auto& itr : linked_libraries) printf("\t%s\n", itr.c_str()); @@ -1847,13 +1795,11 @@ instrument_module(const string_t& file_name) }; auto is_include = [&](bool _if_empty) { - if(file_include.empty()) - return _if_empty; + if(file_include.empty()) return _if_empty; // NOLINTNEXTLINE(readability-use-anyofallof) for(auto& itr : file_include) { - if(std::regex_search(file_name, itr)) - return true; + if(std::regex_search(file_name, itr)) return true; } return false; }; @@ -1862,8 +1808,7 @@ instrument_module(const string_t& file_name) // NOLINTNEXTLINE(readability-use-anyofallof) for(auto& itr : file_exclude) { - if(std::regex_search(file_name, itr)) - return true; + if(std::regex_search(file_name, itr)) return true; } return false; }; @@ -1939,8 +1884,7 @@ instrument_module(const string_t& file_name) return false; }*/ - if(_user_exclude) - return (_report("Excluding", "user-regex", 2), false); + if(_user_exclude) return (_report("Excluding", "user-regex", 2), false); _report("Including", "no constraint", 2); @@ -1953,13 +1897,11 @@ bool instrument_entity(const string_t& function_name) { auto is_include = [&](bool _if_empty) { - if(func_include.empty()) - return _if_empty; + if(func_include.empty()) return _if_empty; // NOLINTNEXTLINE(readability-use-anyofallof) for(auto& itr : func_include) { - if(std::regex_search(function_name, itr)) - return true; + if(std::regex_search(function_name, itr)) return true; } return false; }; @@ -2073,8 +2015,7 @@ insert_instr(address_space_t* mutatee, procedure_t* funcToInstr, Tp traceFunc, basic_loop_t* loopToInstrument) { module_t* module = funcToInstr->getModule(); - if(!module || !traceFunc) - return; + if(!module || !traceFunc) return; bpvector_t* _points = nullptr; auto _trace = traceFunc.get(); @@ -2091,10 +2032,8 @@ insert_instr(address_space_t* mutatee, procedure_t* funcToInstr, Tp traceFunc, _points = funcToInstr->findPoint(traceLoc); } - if(_points == nullptr) - return; - if(_points->empty()) - return; + if(_points == nullptr) return; + if(_points->empty()) return; /*if(loop_level_instr) { @@ -2140,15 +2079,12 @@ module_constraint(char* fname) string_t _fname = fname; // never instrumentat any module matching hosttrace - if(_fname.find("hosttrace") != string_t::npos) - return true; + if(_fname.find("hosttrace") != string_t::npos) return true; // always instrument these modules - if(_fname == "DEFAULT_MODULE" || _fname == "LIBRARY_MODULE") - return false; + if(_fname == "DEFAULT_MODULE" || _fname == "LIBRARY_MODULE") return false; - if(instrument_module(_fname)) - return false; + if(instrument_module(_fname)) return false; // do not instrument return true; @@ -2161,8 +2097,7 @@ bool routine_constraint(const char* fname) { string_t _fname = fname; - if(_fname.find("hosttrace") != string_t::npos) - return true; + if(_fname.find("hosttrace") != string_t::npos) return true; auto npos = std::string::npos; if(_fname.find("FunctionInfo") != npos || _fname.find("_L_lock") != npos || diff --git a/projects/rocprofiler-systems/src/libmisc.cpp b/projects/rocprofiler-systems/src/libmisc.cpp index b5362ef4dc..f82bf44c8d 100644 --- a/projects/rocprofiler-systems/src/libmisc.cpp +++ b/projects/rocprofiler-systems/src/libmisc.cpp @@ -56,8 +56,7 @@ void mpi_gotcha::audit(const gotcha_data_t& _data, audit::incoming, int*, char***) { HOSTTRACE_DEBUG("[%s] %s(int*, char***)\n", __FUNCTION__, _data.tool_id.c_str()); - if(get_state() == ::State::DelayedInit) - get_state() = ::State::PreInit; + if(get_state() == ::State::DelayedInit) get_state() = ::State::PreInit; } void @@ -65,8 +64,7 @@ mpi_gotcha::audit(const gotcha_data_t& _data, audit::incoming, int*, char***, in { HOSTTRACE_DEBUG("[%s] %s(int*, char***, int, int*)\n", __FUNCTION__, _data.tool_id.c_str()); - if(get_state() == ::State::DelayedInit) - get_state() = ::State::PreInit; + if(get_state() == ::State::DelayedInit) get_state() = ::State::PreInit; } void @@ -96,15 +94,13 @@ mpi_gotcha::audit(const gotcha_data_t& _data, audit::outgoing, int _retval) void hosttrace_component::start() { - if(m_prefix) - hosttrace_push_trace(m_prefix); + if(m_prefix) hosttrace_push_trace(m_prefix); } void hosttrace_component::stop() { - if(m_prefix) - hosttrace_pop_trace(m_prefix); + if(m_prefix) hosttrace_pop_trace(m_prefix); } void diff --git a/projects/rocprofiler-systems/src/library.cpp b/projects/rocprofiler-systems/src/library.cpp index 66eea7d695..cff5916d46 100644 --- a/projects/rocprofiler-systems/src/library.cpp +++ b/projects/rocprofiler-systems/src/library.cpp @@ -68,8 +68,7 @@ void setup_gotchas() { static bool _initialized = false; - if(_initialized) - return; + if(_initialized) return; _initialized = true; HOSTTRACE_DEBUG( @@ -168,8 +167,7 @@ bool hosttrace_init_tooling() { static bool _once = false; - if(get_state() != State::PreInit || _once) - return false; + if(get_state() != State::PreInit || _once) return false; _once = true; HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); @@ -195,19 +193,16 @@ hosttrace_init_tooling() "HOSTTRACE_COMPONENTS", "wall_clock", get_use_timemory()); // enable timestamp directories when perfetto + mpi is activated - if(get_use_perfetto() && get_use_mpi()) - tim::settings::time_output() = true; + if(get_use_perfetto() && get_use_mpi()) tim::settings::time_output() = true; auto _cmd = tim::read_command_line(process::get_id()); auto _exe = (_cmd.empty()) ? "hosttrace" : _cmd.front(); auto _pos = _exe.find_last_of('/'); - if(_pos < _exe.length() - 1) - _exe = _exe.substr(_pos + 1); + if(_pos < _exe.length() - 1) _exe = _exe.substr(_pos + 1); tim::timemory_init({ _exe }, "hosttrace-"); - if(get_sample_rate() < 1) - get_sample_rate() = 1; + if(get_sample_rate() < 1) get_sample_rate() = 1; get_sample_data().reserve(512); if(get_use_timemory()) @@ -269,10 +264,8 @@ hosttrace_init_tooling() args.shmem_size_hint_kb = shmem_size_hint; - if(get_backend() != "inprocess") - args.backends |= perfetto::kSystemBackend; - if(get_backend() != "system") - args.backends |= perfetto::kInProcessBackend; + if(get_backend() != "inprocess") args.backends |= perfetto::kSystemBackend; + if(get_backend() != "system") args.backends |= perfetto::kInProcessBackend; perfetto::Tracing::Initialize(args); perfetto::TrackEvent::Register(); @@ -395,8 +388,7 @@ hosttrace_init_tooling() // ends the tracing session static auto _ensure_finalization = ensure_finalization(); - if(dmp::rank() == 0) - puts(""); + if(dmp::rank() == 0) puts(""); return true; } } // namespace @@ -408,8 +400,7 @@ extern "C" void hosttrace_push_trace(const char* name) { // return if not active - if(get_state() == State::Finalized) - return; + if(get_state() == State::Finalized) return; if(get_state() != State::Active && !hosttrace_init_tooling()) { @@ -426,8 +417,7 @@ extern "C" static thread_local size_t _sample_idx = 0; auto _enabled = (_sample_idx++ % _sample_rate == 0); get_sample_data().emplace_back(_enabled); - if(_enabled) - get_functors().first(name); + if(_enabled) get_functors().first(name); } void hosttrace_pop_trace(const char* name) @@ -438,8 +428,7 @@ extern "C" auto& _sample_data = get_sample_data(); if(!_sample_data.empty()) { - if(_sample_data.back()) - get_functors().second(name); + if(_sample_data.back()) get_functors().second(name); _sample_data.pop_back(); } } @@ -458,13 +447,11 @@ extern "C" void hosttrace_trace_finalize(void) { // return if not active - if(get_state() != State::Active) - return; + if(get_state() != State::Active) return; HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); - if(dmp::rank() == 0) - puts(""); + if(dmp::rank() == 0) puts(""); get_state() = State::Finalized; diff --git a/projects/rocprofiler-systems/src/roctracer.cpp b/projects/rocprofiler-systems/src/roctracer.cpp index 70286f1d82..3908d326f0 100644 --- a/projects/rocprofiler-systems/src/roctracer.cpp +++ b/projects/rocprofiler-systems/src/roctracer.cpp @@ -80,8 +80,7 @@ hsa_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* static thread_local timestamp_t hsa_begin_timestamp = 0; static auto& timer = get_hsa_timer(); - if(!timer) - return; + if(!timer) return; switch(cid) { @@ -126,7 +125,8 @@ hsa_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* case HSA_API_ID_hsa_system_get_info: case HSA_API_ID_hsa_system_get_major_extension_table: case HSA_API_ID_hsa_wavefront_get_info: break; - default: { + default: + { if(data->phase == ACTIVITY_API_PHASE_ENTER) { hsa_begin_timestamp = timer->timestamp_fn_ns(); @@ -176,8 +176,7 @@ hsa_activity_callback(uint32_t op, activity_record_t* record, void* arg) default: break; } - if(!_name) - return; + if(!_name) return; if(get_use_perfetto()) { @@ -209,7 +208,8 @@ hip_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* { case HIP_API_ID___hipPushCallConfiguration: case HIP_API_ID___hipPopCallConfiguration: break; - case HIP_API_ID_hipLaunchKernel: { + case HIP_API_ID_hipLaunchKernel: + { const char* _name = hipKernelNameRefByPtr(data->args.hipLaunchKernel.function_address, data->args.hipLaunchKernel.stream); @@ -221,13 +221,13 @@ hip_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* } if(get_use_timemory()) { - get_roctracer_hip_data().emplace( - data->correlation_id, - roctracer_bundle_t{ tim::static_string{ _name }(), _scope }); + get_roctracer_hip_data().emplace(data->correlation_id, + roctracer_bundle_t{ _name, _scope }); } break; } - case HIP_API_ID_hipModuleLaunchKernel: { + case HIP_API_ID_hipModuleLaunchKernel: + { const char* _name = hipKernelNameRef(data->args.hipModuleLaunchKernel.f); tim::auto_lock_t _lk{ tim::type_mutex() }; get_roctracer_kernels().emplace(data->correlation_id); @@ -237,13 +237,13 @@ hip_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* } if(get_use_timemory()) { - get_roctracer_hip_data().emplace( - data->correlation_id, - roctracer_bundle_t{ tim::static_string{ _name }(), _scope }); + get_roctracer_hip_data().emplace(data->correlation_id, + roctracer_bundle_t{ _name, _scope }); } break; } - default: { + default: + { tim::auto_lock_t _lk{ tim::type_mutex() }; const char* _name = roctracer_op_string(domain, cid, 0); if(get_use_perfetto()) @@ -252,9 +252,8 @@ hip_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* } if(get_use_timemory()) { - get_roctracer_hip_data().emplace( - data->correlation_id, - roctracer_bundle_t{ tim::static_string{ _name }(), _scope }); + get_roctracer_hip_data().emplace(data->correlation_id, + roctracer_bundle_t{ _name, _scope }); } break; } @@ -269,8 +268,7 @@ hip_api_callback(uint32_t domain, uint32_t cid, const void* callback_data, void* void hip_activity_callback(const char* begin, const char* end, void*) { - if(!trait::runtime_enabled::get()) - return; + if(!trait::runtime_enabled::get()) return; static auto _kernel_names = std::unordered_map{}; const roctracer_record_t* record = reinterpret_cast(begin); const roctracer_record_t* end_record = @@ -386,15 +384,13 @@ struct dynamic_library , flags{ _flags } { handle = dlopen(filename.c_str(), flags); - if(!handle) - fprintf(stderr, "%s\n", dlerror()); + if(!handle) fprintf(stderr, "%s\n", dlerror()); dlerror(); // Clear any existing error } ~dynamic_library() { - if(handle) - dlclose(handle); + if(handle) dlclose(handle); } std::string envname = {}; @@ -464,12 +460,10 @@ roctracer::remove_tear_down(const std::string& _lbl) void roctracer::setup() { - if(!get_use_timemory() && !get_use_perfetto()) - return; + if(!get_use_timemory() && !get_use_perfetto()) return; auto_lock_t _lk{ type_mutex() }; - if(roctracer_is_setup()) - return; + if(roctracer_is_setup()) return; roctracer_is_setup() = true; HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); @@ -503,8 +497,7 @@ void roctracer::tear_down() { auto_lock_t _lk{ type_mutex() }; - if(!roctracer_is_setup()) - return; + if(!roctracer_is_setup()) return; roctracer_is_setup() = false; HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); @@ -529,15 +522,13 @@ roctracer::tear_down() void roctracer::start() { - if(tracker_type::start() == 0) - setup(); + if(tracker_type::start() == 0) setup(); } void roctracer::stop() { - if(tracker_type::stop() == 0) - tear_down(); + if(tracker_type::stop() == 0) tear_down(); } } // namespace component } // namespace tim @@ -548,15 +539,14 @@ TIMEMORY_INSTANTIATE_EXTERN_COMPONENT(roctracer_data, true, double) // HSA-runtime tool on-load method extern "C" { - TIMEMORY_VISIBILITY("default") bool OnLoad(HsaApiTable* table, uint64_t runtime_version, uint64_t failed_tool_count, - const char* const* failed_tool_names); - TIMEMORY_VISIBILITY("default") void OnUnload(); + const char* const* failed_tool_names) TIMEMORY_VISIBILITY("default"); + void OnUnload() TIMEMORY_VISIBILITY("default"); bool OnLoad(HsaApiTable* table, uint64_t runtime_version, uint64_t failed_tool_count, const char* const* failed_tool_names) { - puts(__FUNCTION__); + HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); tim::consume_parameters(table, runtime_version, failed_tool_count, failed_tool_names); @@ -589,8 +579,7 @@ extern "C" // initialize HSA tracing roctracer_set_properties(ACTIVITY_DOMAIN_HSA_API, (void*) table); - fprintf(stdout, " HSA-trace("); - fflush(stdout); + HOSTTRACE_DEBUG(" HSA-trace("); if(!hsa_api_vec.empty()) { for(unsigned i = 0; i < hsa_api_vec.size(); ++i) @@ -601,7 +590,8 @@ extern "C" &cid, nullptr)); ROCTRACER_CALL(roctracer_enable_op_callback( ACTIVITY_DOMAIN_HSA_API, cid, hsa_api_callback, nullptr)); - printf(" %s", api); + + HOSTTRACE_DEBUG(" %s", api); } } else @@ -609,7 +599,7 @@ extern "C" ROCTRACER_CALL(roctracer_enable_domain_callback( ACTIVITY_DOMAIN_HSA_API, hsa_api_callback, nullptr)); } - printf(")\n"); + HOSTTRACE_DEBUG("\n"); } bool trace_hsa_activity = @@ -625,8 +615,7 @@ extern "C" }; roctracer_set_properties(ACTIVITY_DOMAIN_HSA_OPS, &ops_properties); - fprintf(stdout, " HSA-activity-trace()\n"); - fflush(stdout); + HOSTTRACE_DEBUG(" HSA-activity-trace()\n"); ROCTRACER_CALL(roctracer_enable_op_activity(ACTIVITY_DOMAIN_HSA_OPS, HSA_OP_ID_COPY)); } @@ -639,8 +628,7 @@ extern "C" roctracer_disable_op_activity(ACTIVITY_DOMAIN_HSA_OPS, HSA_OP_ID_COPY)); }; - if(comp::roctracer::is_setup()) - _setup(); + if(comp::roctracer::is_setup()) _setup(); comp::roctracer::add_setup("hsa", std::move(_setup)); comp::roctracer::add_tear_down("hsa", std::move(_tear_down)); @@ -651,7 +639,7 @@ extern "C" // HSA-runtime on-unload method void OnUnload() { - puts(__FUNCTION__); + HOSTTRACE_DEBUG("[%s]\n", __FUNCTION__); // ONLOAD_TRACE(""); } } diff --git a/projects/rocprofiler-systems/tests/CMakeLists.txt b/projects/rocprofiler-systems/tests/CMakeLists.txt index 32098644b1..289ad4b1c8 100644 --- a/projects/rocprofiler-systems/tests/CMakeLists.txt +++ b/projects/rocprofiler-systems/tests/CMakeLists.txt @@ -1,10 +1,11 @@ - if(NOT DYNINST_API_RT_DIR AND DYNINST_API_RT) get_filename_component(DYNINST_API_RT_DIR "${DYNINST_API_RT}" DIRECTORY) endif() if(HOSTTRACE_BUILD_DYNINST) - set(DYNINST_API_RT_DIR "${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI_RT:${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI") + set(DYNINST_API_RT_DIR + "${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI_RT:${PROJECT_BINARY_DIR}/external/dyninst/dyninstAPI" + ) endif() set(_test_environment @@ -14,69 +15,53 @@ set(_test_environment if(TARGET transpose) add_test( NAME transpose-binary-rewrite - COMMAND $ -o $/transpose.inst -v 2 -- $ - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + COMMAND + $ -o $/transpose.inst -v + 2 -- $ + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_test( NAME transpose-binary-rewrite-run COMMAND $/transpose.inst - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_test( NAME transpose-runtime-instrument COMMAND $ -v 2 -- $ - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) + + set_tests_properties(transpose-binary-rewrite-run PROPERTIES DEPENDS + transpose-binary-rewrite) set_tests_properties( - transpose-binary-rewrite-run - PROPERTIES - DEPENDS transpose-binary-rewrite - ) - - set_tests_properties( - transpose-binary-rewrite - transpose-binary-rewrite-run - transpose-runtime-instrument - PROPERTIES - ENVIRONMENT "${_test_environment}" - TIMEOUT 600 - ) + transpose-binary-rewrite transpose-binary-rewrite-run transpose-runtime-instrument + PROPERTIES ENVIRONMENT "${_test_environment}" TIMEOUT 600) endif() if(TARGET parallel-overhead) add_test( NAME parallel-overhead-binary-rewrite - COMMAND $ -o $/parallel-overhead.inst -v 2 -- $ - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + COMMAND + $ -o + $/parallel-overhead.inst -v 2 -- + $ + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_test( NAME parallel-overhead-binary-rewrite-run COMMAND $/parallel-overhead.inst - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_test( NAME parallel-overhead-runtime-instrument COMMAND $ -v 2 -- $ - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - ) + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) + + set_tests_properties(parallel-overhead-binary-rewrite-run + PROPERTIES DEPENDS parallel-overhead-binary-rewrite) set_tests_properties( - parallel-overhead-binary-rewrite-run - PROPERTIES - DEPENDS parallel-overhead-binary-rewrite - ) - - set_tests_properties( - parallel-overhead-binary-rewrite - parallel-overhead-binary-rewrite-run + parallel-overhead-binary-rewrite parallel-overhead-binary-rewrite-run parallel-overhead-runtime-instrument - PROPERTIES - ENVIRONMENT "${_test_environment}" - TIMEOUT 600 - ) + PROPERTIES ENVIRONMENT "${_test_environment}" TIMEOUT 600) endif()