|
| 1 | +include("../../build_utils/CMakeLists.txt") |
| 2 | +SetRequiredCMakeVersion() |
| 3 | +cmake_minimum_required(VERSION ${REQUIRED_CMAKE_VERSION}) |
| 4 | + |
| 5 | +project(PTI_Tools_UniTrace C CXX) |
| 6 | +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) |
| 7 | +SetCompilerFlags() |
| 8 | +SetBuildType() |
| 9 | + |
| 10 | +option(BUILD_WITH_MPI |
| 11 | + "Build with support for MPI tracing" |
| 12 | + ON |
| 13 | +) |
| 14 | + |
| 15 | +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") |
| 16 | + |
| 17 | +# Tool Library |
| 18 | +macro(FindHeadersPath TARGET L0_GEN_SCRIPT GEN_FILE_NAME custom_target) |
| 19 | + RequirePythonInterp() |
| 20 | + find_path(L0_INC_PATH |
| 21 | + NAMES level_zero |
| 22 | + PATHS ENV CPATH) |
| 23 | + if (NOT L0_INC_PATH) |
| 24 | + message(FATAL_ERROR |
| 25 | + "Level Zero headers path is not found.\n" |
| 26 | + "You may need to install oneAPI Level Zero Driver to fix this issue.") |
| 27 | + else() |
| 28 | + message(STATUS "Level Zero headers are found at ${L0_INC_PATH}") |
| 29 | + endif() |
| 30 | + |
| 31 | + set(L0_GEN_INC_PATH "${CMAKE_BINARY_DIR}") |
| 32 | + add_custom_target(${custom_target} ALL |
| 33 | + DEPENDS ${L0_GEN_INC_PATH}/${GEN_FILE_NAME}) |
| 34 | + add_custom_command(OUTPUT ${L0_GEN_INC_PATH}/${GEN_FILE_NAME} |
| 35 | + COMMAND "${PYTHON_EXECUTABLE}" ${L0_GEN_SCRIPT} ${L0_GEN_INC_PATH} "${L0_INC_PATH}/level_zero") |
| 36 | + target_include_directories(${TARGET} |
| 37 | + PUBLIC "${L0_GEN_INC_PATH}") |
| 38 | + add_dependencies(${TARGET} |
| 39 | + ${custom_target}) |
| 40 | +endmacro() |
| 41 | + |
| 42 | +# Get Git Commit Hash |
| 43 | +macro(GetGitCommitHash TARGET GET_COMMIT_HASH_SCRIPT COMMIT_HASH_FILE_NAME target) |
| 44 | + RequirePythonInterp() |
| 45 | + |
| 46 | + add_custom_target(${target} ALL DEPENDS ${CMAKE_BINARY_DIR}/${COMMIT_HASH_FILE_NAME}) |
| 47 | + add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${COMMIT_HASH_FILE_NAME} |
| 48 | + COMMAND "${PYTHON_EXECUTABLE}" ${GET_COMMIT_HASH_SCRIPT} ${CMAKE_BINARY_DIR} ${COMMIT_HASH_FILE_NAME}) |
| 49 | + add_dependencies(${TARGET} ${target}) |
| 50 | +endmacro() |
| 51 | + |
| 52 | +# Download itt source from github repo |
| 53 | +set(ITT_HASH 47467459a7984988ab838b5108c03ab1cf0a3f73) |
| 54 | +execute_process(COMMAND python3 ${PROJECT_SOURCE_DIR}/scripts/get_itt.py ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR} ${ITT_HASH}) |
| 55 | + |
| 56 | +add_subdirectory(${CMAKE_BINARY_DIR}/ittapi) |
| 57 | +if (BUILD_WITH_MPI) |
| 58 | + find_package(MPI REQUIRED) |
| 59 | + add_library(unitrace_mpi SHARED |
| 60 | + "${PROJECT_SOURCE_DIR}/src/mpi/mpi.c") |
| 61 | + add_dependencies(unitrace_mpi ittnotify) |
| 62 | + |
| 63 | + target_link_libraries(unitrace_mpi |
| 64 | + PUBLIC MPI::MPI_C |
| 65 | + PRIVATE ${CMAKE_BINARY_DIR}/bin/libittnotify.a) |
| 66 | + target_include_directories(unitrace_mpi |
| 67 | + PRIVATE "${PROJECT_SOURCE_DIR}" |
| 68 | + PRIVATE "${I_MPI_ROOT}/include" |
| 69 | + PRIVATE "${PROJECT_SOURCE_DIR}/src" |
| 70 | + PRIVATE "${PROJECT_SOURCE_DIR}/../utils" |
| 71 | + PRIVATE "${PROJECT_SOURCE_DIR}/../../utils" |
| 72 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/itt" |
| 73 | + PRIVATE "${CMAKE_BINARY_DIR}/ittheaders" |
| 74 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/mpi" |
| 75 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/opencl" |
| 76 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/levelzero") |
| 77 | + if(CMAKE_INCLUDE_PATH) |
| 78 | + target_include_directories(unitrace_mpi |
| 79 | + PUBLIC "${CMAKE_INCLUDE_PATH}") |
| 80 | + endif() |
| 81 | +endif() |
| 82 | + |
| 83 | +add_library(unitrace_tool SHARED |
| 84 | + "${PROJECT_SOURCE_DIR}/src/opencl/cl_ext_collector.cc" |
| 85 | + "${PROJECT_SOURCE_DIR}/../utils/correlator.cc" |
| 86 | + "${PROJECT_SOURCE_DIR}/../../utils/trace_guard.cc" |
| 87 | + "${PROJECT_SOURCE_DIR}/src/tracer.cc") |
| 88 | +link_directories(${ONEAPI_COMPILER_HOME}/lib) |
| 89 | +find_package(Xptifw REQUIRED) |
| 90 | +target_link_libraries(unitrace_tool PRIVATE Xptifw::Xptifw) |
| 91 | +target_include_directories(unitrace_tool |
| 92 | + PRIVATE "${PROJECT_SOURCE_DIR}" |
| 93 | + PRIVATE "${ONEAPI_COMPILER_HOME}/include" |
| 94 | + PRIVATE "${PROJECT_SOURCE_DIR}/src" |
| 95 | + PRIVATE "${PROJECT_SOURCE_DIR}/../utils" |
| 96 | + PRIVATE "${PROJECT_SOURCE_DIR}/../../utils" |
| 97 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/xpti" |
| 98 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/itt" |
| 99 | + PRIVATE "${CMAKE_BINARY_DIR}/ittheaders" |
| 100 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/opencl" |
| 101 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/levelzero") |
| 102 | +target_compile_definitions(unitrace_tool PUBLIC PTI_LEVEL_ZERO=1) |
| 103 | +if(CMAKE_INCLUDE_PATH) |
| 104 | + target_include_directories(unitrace_tool |
| 105 | + PUBLIC "${CMAKE_INCLUDE_PATH}") |
| 106 | +endif() |
| 107 | + |
| 108 | +FindOpenCLLibrary(unitrace_tool) |
| 109 | +FindOpenCLHeaders(unitrace_tool) |
| 110 | + |
| 111 | +GetOpenCLTracingHeaders(unitrace_tool) |
| 112 | + |
| 113 | +FindL0Library(unitrace_tool) |
| 114 | +FindL0Headers(unitrace_tool) |
| 115 | + |
| 116 | +FindHeadersPath(unitrace_tool "${PROJECT_SOURCE_DIR}/scripts/gen_tracing_common_header.py" "common_header.gen" gen_common_header) |
| 117 | +FindHeadersPath(unitrace_tool "${PROJECT_SOURCE_DIR}/scripts/gen_tracing_callbacks.py" "tracing.gen" gen_tracing_header) |
| 118 | + |
| 119 | + |
| 120 | +target_include_directories(unitrace_tool PRIVATE "${L0_INC_PATH}") |
| 121 | + |
| 122 | +# Loader |
| 123 | + |
| 124 | +add_executable(unitrace "${PROJECT_SOURCE_DIR}/src/unitrace.cc") |
| 125 | +set(_use_mpi 1) |
| 126 | + |
| 127 | +if (BUILD_WITH_MPI) |
| 128 | + set(_use_mpi 1) |
| 129 | +else() |
| 130 | + set(_use_mpi 0) |
| 131 | +endif() |
| 132 | +target_compile_definitions(unitrace PRIVATE BUILD_WITH_MPI=${_use_mpi}) |
| 133 | +target_include_directories(unitrace |
| 134 | + PRIVATE "${CMAKE_BINARY_DIR}" |
| 135 | + PRIVATE "${PROJECT_SOURCE_DIR}/src" |
| 136 | + PRIVATE "${PROJECT_SOURCE_DIR}/src/levelzero" |
| 137 | + PRIVATE "${PROJECT_SOURCE_DIR}/../utils" |
| 138 | + PRIVATE "${PROJECT_SOURCE_DIR}/../../utils") |
| 139 | +if(UNIX) |
| 140 | + target_link_libraries(unitrace pthread dl) |
| 141 | +endif() |
| 142 | +FindL0Library(unitrace) |
| 143 | +FindL0Headers(unitrace) |
| 144 | +GetGitCommitHash(unitrace "${PROJECT_SOURCE_DIR}/scripts/get_commit_hash.py" "unitrace_commit_hash.h" get_git_commit_hash_unitrace) |
| 145 | +GetGitCommitHash(unitrace_tool "${PROJECT_SOURCE_DIR}/scripts/get_commit_hash.py" "unitrace_tool_commit_hash.h" get_git_commit_hash_unitrace_tool) |
| 146 | + |
| 147 | +add_custom_command(TARGET unitrace POST_BUILD COMMAND "rm" "-rf" "unitrace_commit_hash.h") |
| 148 | +add_custom_command(TARGET unitrace_tool POST_BUILD COMMAND "rm" "-rf" "unitrace_tool_commit_hash.h") |
| 149 | + |
| 150 | +# Clearning files only for release build, for any other build types lets skip deletion for better debuggability |
| 151 | +string(TOLOWER "${CMAKE_BUILD_TYPE}" LOWER_CMAKE_BUILD_TYPE) |
| 152 | +if(NOT LOWER_CMAKE_BUILD_TYPE STREQUAL "debug") |
| 153 | + add_custom_command(TARGET unitrace_tool POST_BUILD COMMAND "rm" "-rf" "tracing.gen") |
| 154 | + add_custom_command(TARGET unitrace_tool POST_BUILD COMMAND "rm" "-rf" "common_header.gen") |
| 155 | +endif() |
| 156 | + |
| 157 | +configure_file(${PROJECT_SOURCE_DIR}/scripts/mergetrace.py mergetrace.py COPYONLY) |
| 158 | + |
| 159 | +# Installation |
| 160 | + |
| 161 | +install(TARGETS unitrace unitrace_tool DESTINATION bin) |
| 162 | +if (BUILD_WITH_MPI) |
| 163 | + install(TARGETS unitrace_mpi DESTINATION bin) |
| 164 | +endif() |
0 commit comments