Files
rocm-systems/external/CMakeLists.txt
T

345 lines
11 KiB
CMake
Raw Normal View History

2023-08-08 18:39:01 -05:00
#
#
# External dependencies
#
#
include(rocprofiler_utilities)
cmake_policy(PUSH)
cmake_policy(SET CMP0077 NEW) # option() honors normal variables
2023-08-22 13:29:11 -05:00
set(BUILD_TESTING OFF)
2024-01-17 01:27:41 -06:00
set(BUILD_SHARED_LIBS OFF)
2024-01-24 16:32:54 -06:00
set(BUILD_OBJECT_LIBS OFF) # Specific to PTL
set(BUILD_STATIC_LIBS ON)
2024-01-17 01:27:41 -06:00
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
2024-01-24 16:32:54 -06:00
set(CMAKE_CXX_VISIBILITY_PRESET "hidden")
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
2023-08-08 18:39:01 -05:00
2023-11-28 10:04:37 -06:00
# filesystem library
if(ROCPROFILER_BUILD_GHC_FS)
2024-01-24 16:32:54 -06:00
# checkout submodule if not already checked out or clone repo if no .gitmodules file
2023-11-28 10:04:37 -06:00
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/filesystem
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/gulrak/filesystem.git
REPO_BRANCH "v1.5.14")
target_compile_definitions(
rocprofiler-sdk-cxx-filesystem
2023-11-28 10:04:37 -06:00
INTERFACE $<BUILD_INTERFACE:ROCPROFILER_HAS_GHC_LIB_FILESYSTEM=1>)
target_include_directories(
rocprofiler-sdk-cxx-filesystem SYSTEM
2023-11-28 10:04:37 -06:00
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/filesystem/include>)
endif()
2023-08-08 18:39:01 -05:00
if(ROCPROFILER_BUILD_TESTS)
2023-08-22 13:29:11 -05:00
if(ROCPROFILER_BUILD_GTEST)
2024-01-24 16:32:54 -06:00
# checkout submodule if not already checked out or clone repo if no .gitmodules
# file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/googletest
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/google/googletest.git
REPO_BRANCH "main")
2024-01-24 16:32:54 -06:00
set(BUILD_GMOCK OFF)
set(INSTALL_GTEST OFF)
2023-08-22 13:29:11 -05:00
add_subdirectory(googletest EXCLUDE_FROM_ALL)
2023-08-08 18:39:01 -05:00
2023-08-22 13:29:11 -05:00
if(NOT TARGET GTest::gtest)
message(FATAL_ERROR "missing GTest::gtest")
endif()
target_link_libraries(rocprofiler-sdk-gtest INTERFACE GTest::gtest)
2023-08-22 13:29:11 -05:00
target_include_directories(
rocprofiler-sdk-gtest SYSTEM
2023-08-22 13:29:11 -05:00
INTERFACE ${CMAKE_CURRENT_LIST_DIR}/googletest/googletest/include)
mark_as_advanced(INSTALL_GTEST)
mark_as_advanced(BUILD_GMOCK)
mark_as_advanced(GTEST_HAS_ABSL)
else()
find_package(GTest REQUIRED)
target_link_libraries(rocprofiler-sdk-gtest INTERFACE GTest::gtest)
2023-08-08 18:39:01 -05:00
endif()
2023-08-22 13:29:11 -05:00
endif()
if(ROCPROFILER_BUILD_GLOG)
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/glog
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/google/glog.git
REPO_BRANCH "master")
# May want to use GFLAGS in the future
set(WITH_GFLAGS OFF)
set(WITH_GTEST OFF)
2024-05-29 16:45:56 -05:00
set(WITH_UNWIND "none")
2023-08-22 13:29:11 -05:00
add_subdirectory(glog EXCLUDE_FROM_ALL)
2023-08-08 18:39:01 -05:00
target_link_libraries(rocprofiler-sdk-glog INTERFACE $<BUILD_INTERFACE:glog::glog>)
2023-08-08 18:39:01 -05:00
target_include_directories(
rocprofiler-sdk-glog SYSTEM
2023-08-22 13:29:11 -05:00
INTERFACE $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/external/glog>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/glog/src>)
else()
find_package(glog REQUIRED)
target_link_libraries(rocprofiler-sdk-glog INTERFACE glog::glog)
2023-08-22 13:29:11 -05:00
endif()
if(ROCPROFILER_BUILD_FMT)
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/fmt
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/fmtlib/fmt.git
REPO_BRANCH "master")
2023-08-08 18:39:01 -05:00
2023-08-22 13:29:11 -05:00
set(FMT_TEST OFF)
add_subdirectory(fmt EXCLUDE_FROM_ALL)
target_link_libraries(rocprofiler-sdk-fmt INTERFACE $<BUILD_INTERFACE:fmt::fmt>)
2023-08-22 13:29:11 -05:00
target_include_directories(
rocprofiler-sdk-fmt SYSTEM
2023-08-22 13:29:11 -05:00
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/fmt/include>)
else()
find_package(fmt REQUIRED)
target_link_libraries(rocprofiler-sdk-fmt INTERFACE fmt::fmt)
2023-08-08 18:39:01 -05:00
endif()
if(NOT TARGET PTL::ptl-static)
2024-01-24 16:32:54 -06:00
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RELATIVE_PATH external/ptl
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/jrmadsen/PTL.git
REPO_BRANCH rocprofiler)
set(PTL_USE_TBB OFF)
set(PTL_USE_GPU OFF)
set(PTL_USE_LOCKS ON)
set(PTL_BUILD_EXAMPLES OFF)
set(PTL_DEVELOPER_INSTALL OFF)
add_subdirectory(ptl EXCLUDE_FROM_ALL)
endif()
2024-07-12 16:20:33 -07:00
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/yaml-cpp
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/jbeder/yaml-cpp.git
REPO_BRANCH "master")
add_subdirectory(yaml-cpp EXCLUDE_FROM_ALL)
target_link_libraries(rocprofiler-sdk-yaml-cpp
2024-07-12 16:20:33 -07:00
INTERFACE $<BUILD_INTERFACE:yaml-cpp::yaml-cpp>)
target_include_directories(
rocprofiler-sdk-yaml-cpp
2024-07-12 16:20:33 -07:00
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/yaml-cpp/include>)
2024-05-22 00:53:42 -05:00
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/cereal
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/jrmadsen/cereal.git
REPO_BRANCH "rocprofiler")
target_compile_definitions(rocprofiler-sdk-cereal
2024-05-22 00:53:42 -05:00
INTERFACE $<BUILD_INTERFACE:CEREAL_THREAD_SAFE=1>)
target_include_directories(
rocprofiler-sdk-cereal
2024-05-22 00:53:42 -05:00
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/cereal/include>)
# doxygen-awesome
if(ROCPROFILER_BUILD_DOCS)
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/doxygen-awesome-css
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
TEST_FILE Makefile
REPO_URL https://github.com/jothepro/doxygen-awesome-css.git
REPO_BRANCH "main")
endif()
2024-05-22 15:51:12 -05:00
# perfetto
2024-05-22 15:51:12 -05:00
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/perfetto
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
TEST_FILE meson.build
2025-04-17 23:10:52 -05:00
REPO_URL https://github.com/google/perfetto
2024-05-22 15:51:12 -05:00
REPO_BRANCH "v44.0")
add_library(rocprofiler-sdk-perfetto-static-library STATIC)
2024-05-22 15:51:12 -05:00
target_sources(
rocprofiler-sdk-perfetto-static-library
2024-05-22 15:51:12 -05:00
PRIVATE ${PROJECT_SOURCE_DIR}/external/perfetto/sdk/perfetto.h
${PROJECT_SOURCE_DIR}/external/perfetto/sdk/perfetto.cc)
target_include_directories(
rocprofiler-sdk-perfetto-static-library SYSTEM
2024-05-22 15:51:12 -05:00
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/perfetto/sdk>)
set_target_properties(
rocprofiler-sdk-perfetto-static-library
PROPERTIES POSITION_INDEPENDENT_CODE ON OUTPUT_NAME rocprofiler-sdk-perfetto)
target_link_libraries(
rocprofiler-sdk-perfetto
INTERFACE $<BUILD_INTERFACE:rocprofiler-sdk-perfetto-static-library>)
# ELFIO
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/elfio
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/serge1/ELFIO.git
REPO_BRANCH "Release_3.12")
set(ELFIO_BUILD_EXAMPLES OFF)
set(ELFIO_BUILD_TESTS OFF)
add_subdirectory(elfio EXCLUDE_FROM_ALL)
if(TARGET rocprofiler-sdk-elfio)
get_target_property(ELFIO_INCLUDE_DIR elfio::elfio INTERFACE_INCLUDE_DIRECTORIES)
target_include_directories(rocprofiler-sdk-elfio SYSTEM
INTERFACE ${ELFIO_INCLUDE_DIR})
endif()
2024-07-30 19:57:19 -05:00
#
2024-07-30 19:57:19 -05:00
# OTF2
#
2024-07-30 19:57:19 -05:00
add_subdirectory(otf2)
2024-12-19 03:53:32 +01:00
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/json
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/nlohmann/json.git
REPO_BRANCH "develop")
#
# JSON
#
2024-12-19 03:53:32 +01:00
add_subdirectory(json)
target_include_directories(
rocprofiler-sdk-json SYSTEM
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/json/include>)
#
# SQLite3
#
if(ROCPROFILER_BUILD_SQLITE3)
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/sqlite
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
TEST_FILE configure
REPO_URL https://github.com/sqlite/sqlite
REPO_BRANCH "version-3.47.0")
find_program(
MAKE_COMMAND
NAMES make gmake
PATH_SUFFIXES bin REQUIRED)
include(ExternalProject)
externalproject_add(
rocprofiler-sdk-sqlite-build
PREFIX ${PROJECT_BINARY_DIR}/external/sqlite/build
SOURCE_DIR ${PROJECT_SOURCE_DIR}/external/sqlite
BUILD_IN_SOURCE 0
CONFIGURE_COMMAND
<SOURCE_DIR>/configure --prefix=${PROJECT_BINARY_DIR}/external/sqlite/install
--libdir=${PROJECT_BINARY_DIR}/external/sqlite/install/lib
--enable-tempstore=yes --enable-all --disable-tcl --with-pic CFLAGS=-O3\ -g1
BUILD_COMMAND ${MAKE_COMMAND} install -s
INSTALL_COMMAND "")
target_link_libraries(
rocprofiler-sdk-sqlite3
INTERFACE
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/external/sqlite/install/lib/libsqlite3.so>
)
target_include_directories(
rocprofiler-sdk-sqlite3 SYSTEM
INTERFACE $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/external/sqlite/install/include>
)
add_dependencies(rocprofiler-sdk-sqlite3 rocprofiler-sdk-sqlite-build)
else()
# make it optional temporarily because ROCm CI does not have SQLite3 dev installed and
# cannot build from source (missing tclsh)
find_package(SQLite3)
if(SQLite3_FOUND)
target_link_libraries(rocprofiler-sdk-sqlite3 INTERFACE SQLite::SQLite3)
endif()
endif()
#
# PyBind11
#
if(ROCPROFILER_BUILD_PYBIND11)
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/pybind11
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/pybind/pybind11.git
REPO_BRANCH "v2.9.2")
target_include_directories(
rocprofiler-sdk-pybind11 SYSTEM
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/external/pybind11/include>)
else()
find_package(pybind11 REQUIRED)
target_link_libraries(rocprofiler-sdk-pybind11 INTERFACE pybind11::pybind11)
endif()
#
# GOTCHA
#
if(ROCPROFILER_BUILD_GOTCHA)
# checkout submodule if not already checked out or clone repo if no .gitmodules file
rocprofiler_checkout_git_submodule(
RECURSIVE
RELATIVE_PATH external/gotcha
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://github.com/jrmadsen/GOTCHA.git
REPO_BRANCH "rocprofiler")
function(add_gotcha_subdirectory)
set(GOTCHA_ENABLE_TESTS OFF)
set(GOTCHA_ENABLE_WARNING_ERROR OFF)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
"${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/rocprofiler-sdk")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
"${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/rocprofiler-sdk")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
"${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/rocprofiler-sdk")
add_subdirectory(gotcha EXCLUDE_FROM_ALL)
add_dependencies(rocprofiler-sdk-gotcha gotcha)
install(
TARGETS gotcha
DESTINATION "${CMAKE_INSTALL_LIBDIR}/rocprofiler-sdk"
OPTIONAL)
endfunction()
add_gotcha_subdirectory()
target_link_libraries(rocprofiler-sdk-gotcha INTERFACE gotcha::gotcha)
else()
find_package(gotcha REQUIRED)
if(TARGET gotcha::gotcha)
target_link_libraries(rocprofiler-sdk-gotcha INTERFACE gotcha::gotcha)
elseif(TARGET gotcha)
target_link_libraries(rocprofiler-sdk-gotcha INTERFACE gotcha)
endif()
endif()
cmake_policy(POP)