# # common utilities for tests # include(FetchContent) set(FETCHCONTENT_BASE_DIR ${PROJECT_BINARY_DIR}/external) # default FAIL_REGULAR_EXPRESSION for tests set(ROCPROFILER_DEFAULT_FAIL_REGEX "threw an exception|Permission denied|Could not create logging file" CACHE STRING "Default FAIL_REGULAR_EXPRESSION for tests") # build flags add_library(rocprofiler-tests-build-flags INTERFACE) add_library(rocprofiler::tests-build-flags ALIAS rocprofiler-tests-build-flags) target_compile_options(rocprofiler-tests-build-flags INTERFACE -W -Wall -Wextra -Wshadow) target_compile_features(rocprofiler-tests-build-flags INTERFACE cxx_std_17) if(ROCPROFILER_BUILD_CI OR ROCPROFILER_BUILD_WERROR) target_compile_options(rocprofiler-tests-build-flags INTERFACE -Werror) endif() # serialization library if(NOT TARGET rocprofiler::cereal) get_filename_component(ROCPROFILER_SOURCE_DIR "${PROJECT_SOURCE_DIR}/.." REALPATH) add_library(rocprofiler-cereal INTERFACE) add_library(rocprofiler::cereal ALIAS rocprofiler-cereal) target_compile_definitions(rocprofiler-cereal INTERFACE $) if(EXISTS ${ROCPROFILER_SOURCE_DIR}/external AND COMMAND rocprofiler_checkout_git_submodule) rocprofiler_checkout_git_submodule( RECURSIVE RELATIVE_PATH external/cereal WORKING_DIRECTORY ${ROCPROFILER_SOURCE_DIR} REPO_URL https://github.com/jrmadsen/cereal.git REPO_BRANCH "rocprofiler") target_include_directories( rocprofiler-cereal SYSTEM INTERFACE $ ) else() fetchcontent_declare( cereal GIT_REPOSITORY https://github.com/jrmadsen/cereal.git GIT_TAG rocprofiler SOURCE_DIR ${PROJECT_BINARY_DIR}/external/cereal BINARY_DIR ${PROJECT_BINARY_DIR}/external/build/cereal-build SUBBUILD_DIR ${PROJECT_BINARY_DIR}/external/build/cereal-subdir) # This particular version of projD requires workarounds fetchcontent_getproperties(cereal) if(NOT cereal_POPULATED) fetchcontent_populate(cereal) endif() target_include_directories( rocprofiler-cereal SYSTEM INTERFACE $) endif() endif() # perfetto fetchcontent_declare( perfetto GIT_REPOSITORY https://android.googlesource.com/platform/external/perfetto GIT_TAG v42.0 SOURCE_DIR ${PROJECT_BINARY_DIR}/external/perfetto BINARY_DIR ${PROJECT_BINARY_DIR}/external/build/perfetto-build SUBBUILD_DIR ${PROJECT_BINARY_DIR}/external/build/perfetto-subdir) fetchcontent_getproperties(perfetto) if(NOT perfetto_POPULATED) fetchcontent_populate(perfetto) endif() add_library(rocprofiler-tests-perfetto STATIC) add_library(rocprofiler::tests-perfetto ALIAS rocprofiler-tests-perfetto) target_sources( rocprofiler-tests-perfetto PRIVATE ${PROJECT_BINARY_DIR}/external/perfetto/sdk/perfetto.h ${PROJECT_BINARY_DIR}/external/perfetto/sdk/perfetto.cc) target_include_directories( rocprofiler-tests-perfetto SYSTEM INTERFACE $) set_target_properties(rocprofiler-tests-perfetto PROPERTIES POSITION_INDEPENDENT_CODE ON) # common utilities cmake_path(GET CMAKE_CURRENT_SOURCE_DIR PARENT_PATH COMMON_LIBRARY_INCLUDE_DIR) add_library(rocprofiler-tests-common-library INTERFACE) add_library(rocprofiler::tests-common-library ALIAS rocprofiler-tests-common-library) target_link_libraries(rocprofiler-tests-common-library INTERFACE rocprofiler::tests-build-flags rocprofiler::cereal) target_compile_features(rocprofiler-tests-common-library INTERFACE cxx_std_17) target_include_directories(rocprofiler-tests-common-library INTERFACE ${COMMON_LIBRARY_INCLUDE_DIR}) set(EXTERNAL_SUBMODULE_DIR "${PROJECT_SOURCE_DIR}/../external") cmake_path(ABSOLUTE_PATH EXTERNAL_SUBMODULE_DIR NORMALIZE) if(EXISTS ${EXTERNAL_SUBMODULE_DIR}/filesystem/include/ghc/filesystem.hpp) target_compile_definitions( rocprofiler-tests-common-library INTERFACE $) target_include_directories( rocprofiler-tests-common-library SYSTEM INTERFACE $) endif()