mirror of
https://github.com/wolfpld/tracy.git
synced 2026-10-24 09:40:53 +00:00
Find zone moves from the instrumentation intro under it: searching builds on having inspected a zone, not the other way around.
397 lines
14 KiB
CMake
397 lines
14 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/options.cmake)
|
|
|
|
set_option(NO_FILESELECTOR "Disable the file selector" OFF)
|
|
set_option(GTK_FILESELECTOR "Use the GTK file selector on Linux instead of the xdg-portal one" OFF)
|
|
set_option(LEGACY "Instead of Wayland, use the legacy X11 backend on Linux" OFF)
|
|
set_option(SELF_PROFILE "Enable self-profiling" OFF)
|
|
set_option_value(SANITIZE "Sanitizer parameters" "")
|
|
|
|
if(APPLE)
|
|
set_option(BUNDLE "Build a macOS application bundle" OFF)
|
|
endif()
|
|
|
|
set(NO_STATISTICS OFF)
|
|
set(VENDOR_GUI ON)
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/version.cmake)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
|
|
project(
|
|
tracy-profiler
|
|
LANGUAGES C CXX
|
|
VERSION ${TRACY_VERSION_STRING}
|
|
)
|
|
|
|
if(APPLE)
|
|
enable_language(OBJC)
|
|
endif()
|
|
|
|
if(SELF_PROFILE)
|
|
add_definitions(-DTRACY_ENABLE)
|
|
add_compile_options(-g -O3 -fno-omit-frame-pointer)
|
|
endif()
|
|
|
|
if(SANITIZE)
|
|
add_compile_options(-fsanitize=${SANITIZE} -fno-omit-frame-pointer)
|
|
add_link_options(-fsanitize=${SANITIZE} -fno-omit-frame-pointer)
|
|
endif()
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/config.cmake)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/vendor.cmake)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/server.cmake)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/GitRef.cmake)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/manual.cmake)
|
|
|
|
include(ExternalProject)
|
|
ExternalProject_Add(embed
|
|
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/helpers
|
|
CMAKE_ARGS
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
|
|
# Embeds a file into the profiler as a compressed C array (data/NAME.cpp/.hpp).
|
|
# FILE is relative to the current source directory; with BUILD, relative to
|
|
# the current build directory. With TEXT, line endings are normalized to unix.
|
|
function(Embed LIST NAME FILE)
|
|
cmake_parse_arguments(EMBED "TEXT;BUILD" "" "" ${ARGN})
|
|
if(EMBED_TEXT)
|
|
set(EMBED_FLAGS -t)
|
|
else()
|
|
set(EMBED_FLAGS)
|
|
endif()
|
|
if(EMBED_BUILD)
|
|
set(EMBED_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${FILE})
|
|
else()
|
|
set(EMBED_SOURCE ${CMAKE_CURRENT_LIST_DIR}/${FILE})
|
|
endif()
|
|
add_custom_command(
|
|
OUTPUT data/${NAME}.cpp data/${NAME}.hpp
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory data
|
|
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/embed ${EMBED_FLAGS} ${NAME} ${EMBED_SOURCE} data/${NAME}
|
|
DEPENDS embed ${EMBED_SOURCE}
|
|
)
|
|
list(APPEND ${LIST} data/${NAME}.cpp)
|
|
return(PROPAGATE ${LIST})
|
|
endfunction()
|
|
|
|
set(SERVER_FILES
|
|
TracyAchievementData.cpp
|
|
TracyAchievements.cpp
|
|
TracyBadVersion.cpp
|
|
TracyColor.cpp
|
|
TracyConfig.cpp
|
|
TracyDisassembly.cpp
|
|
TracyEmbed.cpp
|
|
TracyEventDebug.cpp
|
|
TracyFileselector.cpp
|
|
TracyFilesystem.cpp
|
|
TracyImGui.cpp
|
|
TracyManualData.cpp
|
|
TracyManualWindow.cpp
|
|
TracyMarkdown.cpp
|
|
TracyMicroArchitecture.cpp
|
|
TracyMouse.cpp
|
|
TracyNameGen.cpp
|
|
TracyProtoHistory.cpp
|
|
TracySourceContents.cpp
|
|
TracySourceTokenizer.cpp
|
|
TracySourceView.cpp
|
|
TracyStorage.cpp
|
|
TracyTexture.cpp
|
|
TracyTimelineController.cpp
|
|
TracyTimelineItem.cpp
|
|
TracyTimelineItemCpuData.cpp
|
|
TracyTimelineItemGpu.cpp
|
|
TracyTimelineItemPlot.cpp
|
|
TracyTimelineItemThread.cpp
|
|
TracyUserData.cpp
|
|
TracyUtility.cpp
|
|
TracyView.cpp
|
|
TracyView_Annotations.cpp
|
|
TracyView_Callstack.cpp
|
|
TracyView_Compare.cpp
|
|
TracyView_ConnectionState.cpp
|
|
TracyView_ContextSwitch.cpp
|
|
TracyView_CpuData.cpp
|
|
TracyView_FindZone.cpp
|
|
TracyView_FlameGraph.cpp
|
|
TracyView_FrameOverview.cpp
|
|
TracyView_FrameStatistics.cpp
|
|
TracyView_FrameTimeline.cpp
|
|
TracyView_FrameTree.cpp
|
|
TracyView_GpuTimeline.cpp
|
|
TracyView_Locks.cpp
|
|
TracyView_Memory.cpp
|
|
TracyView_Messages.cpp
|
|
TracyView_Navigation.cpp
|
|
TracyView_NotificationArea.cpp
|
|
TracyView_Options.cpp
|
|
TracyView_Playback.cpp
|
|
TracyView_Plots.cpp
|
|
TracyView_Ranges.cpp
|
|
TracyView_Samples.cpp
|
|
TracyView_Statistics.cpp
|
|
TracyView_Timeline.cpp
|
|
TracyView_TraceInfo.cpp
|
|
TracyView_Utility.cpp
|
|
TracyView_ZoneInfo.cpp
|
|
TracyView_ZoneTimeline.cpp
|
|
TracyWeb.cpp
|
|
TracyWindowConstraints.cpp
|
|
)
|
|
|
|
if(NOT EMSCRIPTEN)
|
|
list(APPEND SERVER_FILES
|
|
TracyLlm.cpp
|
|
TracyLlmApi.cpp
|
|
TracyLlmChat.cpp
|
|
TracyLlmEmbeddings.cpp
|
|
TracyLlmTools.cpp
|
|
)
|
|
endif()
|
|
|
|
list(TRANSFORM SERVER_FILES PREPEND "src/profiler/")
|
|
|
|
set(PROFILER_FILES
|
|
src/ConnectionHistory.cpp
|
|
src/Filters.cpp
|
|
src/Fonts.cpp
|
|
src/HttpRequest.cpp
|
|
src/ImGuiContext.cpp
|
|
src/ini.c
|
|
src/IsElevated.cpp
|
|
src/main.cpp
|
|
src/ResolvService.cpp
|
|
src/RunQueue.cpp
|
|
src/WindowPosition.cpp
|
|
src/winmain.cpp
|
|
src/winmainArchDiscovery.cpp
|
|
)
|
|
|
|
Embed(PROFILER_FILES PersonalityAnnoyed src/llm/personality.annoyed.md TEXT)
|
|
Embed(PROFILER_FILES PersonalityEmotion src/llm/personality.emotion.md TEXT)
|
|
Embed(PROFILER_FILES SystemPrompt src/llm/system.prompt.md TEXT)
|
|
Embed(PROFILER_FILES SkillCallstack src/llm/skill.callstack.md TEXT)
|
|
Embed(PROFILER_FILES SkillOptimization src/llm/skill.optimization.md TEXT)
|
|
Embed(PROFILER_FILES ToolsJson src/llm/tools.json TEXT)
|
|
|
|
Embed(PROFILER_FILES FontFixed src/font/FiraCode-Retina.ttf)
|
|
Embed(PROFILER_FILES FontIcons src/font/Font\ Awesome\ 7\ Free-Solid-900.otf)
|
|
Embed(PROFILER_FILES FontNormal src/font/Roboto-Regular.ttf)
|
|
Embed(PROFILER_FILES FontBold src/font/Roboto-Bold.ttf)
|
|
Embed(PROFILER_FILES FontItalic src/font/Roboto-Italic.ttf)
|
|
Embed(PROFILER_FILES FontBoldItalic src/font/Roboto-BoldItalic.ttf)
|
|
Embed(PROFILER_FILES FontEmoji src/font/NotoEmoji-Regular.ttf)
|
|
Embed(PROFILER_FILES FontCjk src/font/SourceHanSans-Normal.ttc)
|
|
set(MANUAL_MD ${CMAKE_CURRENT_BINARY_DIR}/manual/tracy.md)
|
|
add_custom_command(
|
|
OUTPUT ${MANUAL_MD}
|
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/../manual/latex2md.py
|
|
--tex ${CMAKE_CURRENT_LIST_DIR}/../manual/tracy.tex
|
|
--out ${MANUAL_MD}
|
|
--pandoc ${TRACY_PANDOC}
|
|
--icons ${CMAKE_CURRENT_LIST_DIR}/src/profiler/IconsFontAwesome7.h
|
|
DEPENDS
|
|
${CMAKE_CURRENT_LIST_DIR}/../manual/tracy.tex
|
|
${CMAKE_CURRENT_LIST_DIR}/../manual/filter.lua
|
|
${CMAKE_CURRENT_LIST_DIR}/../manual/latex2md.py
|
|
${CMAKE_CURRENT_LIST_DIR}/src/profiler/IconsFontAwesome7.h
|
|
COMMENT "Generating user manual"
|
|
VERBATIM)
|
|
|
|
Embed(PROFILER_FILES Manual manual/tracy.md TEXT BUILD)
|
|
|
|
Embed(PROFILER_FILES Text100Million src/achievements/100Million.md TEXT)
|
|
Embed(PROFILER_FILES TextAnnotateZones src/achievements/AnnotateZones.md TEXT)
|
|
Embed(PROFILER_FILES TextAppInfo src/achievements/AppInfo.md TEXT)
|
|
Embed(PROFILER_FILES TextConnectToClient src/achievements/ConnectToClient.md TEXT)
|
|
Embed(PROFILER_FILES TextContention src/achievements/Contention.md TEXT)
|
|
Embed(PROFILER_FILES TextFindZone src/achievements/FindZone.md TEXT)
|
|
Embed(PROFILER_FILES TextFrameImages src/achievements/FrameImages.md TEXT)
|
|
Embed(PROFILER_FILES TextGhostZones src/achievements/GhostZones.md TEXT)
|
|
Embed(PROFILER_FILES TextGlobalSettings src/achievements/GlobalSettings.md TEXT)
|
|
Embed(PROFILER_FILES TextGpu src/achievements/Gpu.md TEXT)
|
|
Embed(PROFILER_FILES TextInspectZone src/achievements/InspectZone.md TEXT)
|
|
Embed(PROFILER_FILES TextInstrumentationIntro src/achievements/InstrumentationIntro.md TEXT)
|
|
Embed(PROFILER_FILES TextInstrumentationStatistics src/achievements/InstrumentationStatistics.md TEXT)
|
|
Embed(PROFILER_FILES TextInstrumentFrames src/achievements/InstrumentFrames.md TEXT)
|
|
Embed(PROFILER_FILES TextIntro src/achievements/Intro.md TEXT)
|
|
Embed(PROFILER_FILES TextLeaks src/achievements/Leaks.md TEXT)
|
|
Embed(PROFILER_FILES TextLoadTrace src/achievements/LoadTrace.md TEXT)
|
|
Embed(PROFILER_FILES TextLocks src/achievements/Locks.md TEXT)
|
|
Embed(PROFILER_FILES TextManual src/achievements/Manual.md TEXT)
|
|
Embed(PROFILER_FILES TextMemory src/achievements/Memory.md TEXT)
|
|
Embed(PROFILER_FILES TextPlots src/achievements/Plots.md TEXT)
|
|
Embed(PROFILER_FILES TextSamplingIntro src/achievements/SamplingIntro.md TEXT)
|
|
Embed(PROFILER_FILES TextSaveTrace src/achievements/SaveTrace.md TEXT)
|
|
Embed(PROFILER_FILES TextSections src/achievements/Sections.md TEXT)
|
|
|
|
set(INCLUDES "${CMAKE_CURRENT_BINARY_DIR}")
|
|
set(LIBS "")
|
|
|
|
if(USE_WAYLAND)
|
|
pkg_check_modules(WAYLAND REQUIRED egl wayland-egl wayland-cursor xkbcommon)
|
|
pkg_check_modules(WAYLAND_CLIENT REQUIRED wayland-client)
|
|
if(WAYLAND_CLIENT_VERSION VERSION_LESS 1.22)
|
|
message(WARNING "libwayland ${WAYLAND_CLIENT_VERSION} is too old and does not provide version 6 of the core protocol. Building in this configuration is not supported and will result in reduced functionality.")
|
|
endif()
|
|
set(INCLUDES "${INCLUDES};${WAYLAND_INCLUDE_DIRS}")
|
|
set(LIBS "${LIBS};${WAYLAND_LINK_LIBRARIES}")
|
|
set(PROFILER_FILES ${PROFILER_FILES}
|
|
src/BackendWayland.cpp
|
|
)
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/FindWaylandScanner.cmake)
|
|
|
|
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
|
|
pkg_get_variable(WAYLAND_PROTOCOLS_PKGDATADIR wayland-protocols pkgdatadir)
|
|
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/stable/xdg-shell/xdg-shell.xml
|
|
BASENAME xdg-shell
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/staging/xdg-activation/xdg-activation-v1.xml
|
|
BASENAME xdg-activation
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml
|
|
BASENAME xdg-decoration
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/staging/fractional-scale/fractional-scale-v1.xml
|
|
BASENAME fractional-scale
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/stable/viewporter/viewporter.xml
|
|
BASENAME viewporter
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/staging/cursor-shape/cursor-shape-v1.xml
|
|
BASENAME cursor-shape
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/unstable/tablet/tablet-unstable-v2.xml
|
|
BASENAME tablet
|
|
)
|
|
ecm_add_wayland_client_protocol(PROFILER_FILES
|
|
PROTOCOL ${WAYLAND_PROTOCOLS_PKGDATADIR}/staging/xdg-toplevel-icon/xdg-toplevel-icon-v1.xml
|
|
BASENAME xdg-toplevel-icon
|
|
)
|
|
elseif(EMSCRIPTEN)
|
|
set(PROFILER_FILES ${PROFILER_FILES}
|
|
src/BackendEmscripten.cpp
|
|
)
|
|
else()
|
|
set(PROFILER_FILES ${PROFILER_FILES}
|
|
src/BackendGlfw.cpp
|
|
${ImGui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
|
|
)
|
|
endif()
|
|
|
|
include_directories(${INCLUDES})
|
|
link_libraries(${LIBS})
|
|
|
|
if(SELF_PROFILE)
|
|
set(PROFILER_FILES ${PROFILER_FILES}
|
|
../public/TracyClient.cpp
|
|
)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
set(PROFILER_FILES ${PROFILER_FILES}
|
|
win32/Tracy.manifest
|
|
win32/Tracy.rc
|
|
)
|
|
add_executable(${PROJECT_NAME} WIN32 ${PROFILER_FILES} ${COMMON_FILES} ${SERVER_FILES})
|
|
set_property(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME})
|
|
elseif(APPLE AND BUNDLE)
|
|
set(ICON_SRC ${CMAKE_CURRENT_LIST_DIR}/../icon/icon.png)
|
|
set(ICON_ICNS ${CMAKE_CURRENT_BINARY_DIR}/icon.icns)
|
|
add_custom_command(
|
|
OUTPUT ${ICON_ICNS}
|
|
COMMAND sips -s format icns ${ICON_SRC} --out ${ICON_ICNS}
|
|
DEPENDS ${ICON_SRC}
|
|
)
|
|
set_source_files_properties(${ICON_ICNS} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
|
add_executable(${PROJECT_NAME} MACOSX_BUNDLE ${PROFILER_FILES} ${COMMON_FILES} ${SERVER_FILES} ${ICON_ICNS})
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_LIST_DIR}/macos/Info.plist.in
|
|
MACOSX_BUNDLE_BUNDLE_NAME "Tracy Profiler"
|
|
MACOSX_BUNDLE_GUI_IDENTIFIER "pl.nereid.tracy"
|
|
MACOSX_BUNDLE_BUNDLE_VERSION ${TRACY_VERSION_STRING}
|
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${TRACY_VERSION_STRING}
|
|
MACOSX_BUNDLE_ICON_FILE icon.icns
|
|
MACOSX_BUNDLE_COPYRIGHT "Bartosz Taudul"
|
|
)
|
|
else()
|
|
add_executable(${PROJECT_NAME} ${PROFILER_FILES} ${COMMON_FILES} ${SERVER_FILES})
|
|
endif()
|
|
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
TracyServer
|
|
TracyImGui
|
|
Threads::Threads
|
|
nlohmann_json::nlohmann_json
|
|
md4c
|
|
)
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
${tidy_SOURCE_DIR}/include
|
|
)
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
${md4c_SOURCE_DIR}/src
|
|
)
|
|
|
|
if(NOT EMSCRIPTEN)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
TracyLibcurl
|
|
base64
|
|
tidy-static
|
|
TracyPugixml
|
|
usearch
|
|
)
|
|
endif()
|
|
|
|
add_git_ref(${PROJECT_NAME})
|
|
|
|
if(NOT EMSCRIPTEN)
|
|
if(NOT NO_FILESELECTOR)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE nfd::nfd)
|
|
else()
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE TRACY_NO_FILESELECTOR)
|
|
endif()
|
|
if(NOT USE_WAYLAND)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE TracyGlfw3)
|
|
endif()
|
|
endif()
|
|
|
|
if(EMSCRIPTEN)
|
|
target_compile_options(${PROJECT_NAME} PRIVATE -sDISABLE_EXCEPTION_CATCHING=0)
|
|
target_link_options(${PROJECT_NAME} PRIVATE
|
|
-pthread
|
|
-sASSERTIONS=0
|
|
-sINITIAL_MEMORY=384mb
|
|
-sALLOW_MEMORY_GROWTH=1
|
|
-sMAXIMUM_MEMORY=4gb
|
|
-sSTACK_SIZE=1048576
|
|
-sPTHREAD_POOL_SIZE=8
|
|
-sEXPORTED_FUNCTIONS=_main,_nativeOpenFile,_tracy_paste_clipboard
|
|
-sEXPORTED_RUNTIME_METHODS=ccall
|
|
-sENVIRONMENT=web,worker
|
|
-sDISABLE_EXCEPTION_CATCHING=0
|
|
"--pre-js;${CMAKE_CURRENT_LIST_DIR}/wasm/url_trace_pre.js"
|
|
)
|
|
|
|
file(DOWNLOAD https://share.nereid.pl/i/embed.tracy ${CMAKE_CURRENT_BINARY_DIR}/embed.tracy EXPECTED_MD5 f018919fcd34de2fb349be8be354048b)
|
|
file(COPY ${CMAKE_CURRENT_LIST_DIR}/wasm/index.html DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
file(COPY ${CMAKE_CURRENT_LIST_DIR}/wasm/httpd.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
file(COPY_FILE ${CMAKE_CURRENT_LIST_DIR}/../icon/icon.svg ${CMAKE_CURRENT_BINARY_DIR}/favicon.svg)
|
|
endif()
|
|
|
|
install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
|