2025-11-26 14:35:58 +08:00
|
|
|
|
# Unity Tracy Plugin - CMakeLists.txt
|
|
|
|
|
|
# 用于编译 Tracy Unity Native Plugin
|
|
|
|
|
|
|
|
|
|
|
|
cmake_minimum_required(VERSION 3.15)
|
|
|
|
|
|
project(UnityTracyPlugin VERSION 1.0.0)
|
|
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 配置选项
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
option(IS_TRACY_ENABLE "启用 Tracy 性能分析" ON)
|
|
|
|
|
|
option(IS_TRACY_ON_DEMAND "Tracy 按需分析模式" ON)
|
|
|
|
|
|
option(IS_TRACY_NO_EXIT "Tracy 不在退出时断开连接" OFF)
|
|
|
|
|
|
option(IS_TRACY_NO_BROADCAST "Tracy 不广播发现消息" OFF)
|
|
|
|
|
|
option(IS_TRACY_ONLY_LOCALHOST "Tracy 仅允许本地连接" OFF)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# Tracy 配置
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
if(IS_TRACY_ENABLE)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
add_definitions(-DTRACY_ENABLE)
|
|
|
|
|
|
message(STATUS "Tracy 性能分析: 启用")
|
|
|
|
|
|
else()
|
|
|
|
|
|
message(STATUS "Tracy 性能分析: 禁用")
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
if(IS_TRACY_ON_DEMAND)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
add_definitions(-DTRACY_ON_DEMAND)
|
|
|
|
|
|
message(STATUS "Tracy 按需模式: 启用")
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
if(IS_TRACY_NO_EXIT)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
add_definitions(-DTRACY_NO_EXIT)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
if(IS_TRACY_NO_BROADCAST)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
add_definitions(-DTRACY_NO_BROADCAST)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
2025-11-27 10:15:03 +08:00
|
|
|
|
if(IS_TRACY_ONLY_LOCALHOST)
|
2025-11-26 14:35:58 +08:00
|
|
|
|
add_definitions(-DTRACY_ONLY_LOCALHOST)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# Tracy 路径配置
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
# 设置 Tracy 根目录(根据实际情况修改)
|
|
|
|
|
|
set(TRACY_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/tracy" CACHE PATH "Tracy 根目录路径")
|
|
|
|
|
|
|
|
|
|
|
|
if(NOT EXISTS "${TRACY_ROOT}")
|
|
|
|
|
|
message(FATAL_ERROR "找不到 Tracy 目录: ${TRACY_ROOT}\n请设置正确的 TRACY_ROOT 路径")
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
message(STATUS "Tracy 根目录: ${TRACY_ROOT}")
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 源文件
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
set(TRACY_SOURCES
|
|
|
|
|
|
"${TRACY_ROOT}/public/TracyClient.cpp"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
set(PLUGIN_SOURCES
|
|
|
|
|
|
"SimplifiedPlugin.cpp"
|
|
|
|
|
|
${TRACY_SOURCES}
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 包含目录
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
include_directories(
|
|
|
|
|
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
|
|
|
|
|
"${TRACY_ROOT}/public"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 创建动态库
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
add_library(UnityTracyPlugin SHARED ${PLUGIN_SOURCES})
|
|
|
|
|
|
|
|
|
|
|
|
# 设置输出名称
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
OUTPUT_NAME "UnityTracyPlugin"
|
|
|
|
|
|
PREFIX "" # 移除 lib 前缀(Linux/macOS)
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 平台特定配置
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
|
|
# Windows 配置
|
|
|
|
|
|
message(STATUS "配置 Windows 平台")
|
|
|
|
|
|
|
|
|
|
|
|
# 链接必要的 Windows 库
|
|
|
|
|
|
target_link_libraries(UnityTracyPlugin
|
|
|
|
|
|
ws2_32 # Winsock
|
|
|
|
|
|
dbghelp # Debug Help Library
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 输出到 Windows 平台目录
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Unity/Plugins/x86_64"
|
|
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Unity/Plugins/x86_64"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Windows 导出符号
|
|
|
|
|
|
target_compile_definitions(UnityTracyPlugin PRIVATE
|
|
|
|
|
|
WIN32_LEAN_AND_MEAN
|
|
|
|
|
|
NOMINMAX
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
elseif(APPLE)
|
|
|
|
|
|
# macOS/iOS 配置
|
|
|
|
|
|
message(STATUS "配置 Apple 平台")
|
|
|
|
|
|
|
|
|
|
|
|
# 链接 Apple 框架
|
|
|
|
|
|
target_link_libraries(UnityTracyPlugin
|
|
|
|
|
|
"-framework Foundation"
|
|
|
|
|
|
"-framework CoreFoundation"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# macOS 特定设置
|
|
|
|
|
|
if(NOT IOS)
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
MACOSX_RPATH TRUE
|
|
|
|
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
|
|
|
|
INSTALL_NAME_DIR "@rpath"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 输出到 macOS 平台目录
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Unity/Plugins/macOS"
|
|
|
|
|
|
)
|
|
|
|
|
|
else()
|
|
|
|
|
|
# iOS 配置 - 静态库
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
FRAMEWORK FALSE
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 输出到 iOS 平台目录
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Unity/Plugins/iOS"
|
|
|
|
|
|
)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
elseif(UNIX)
|
|
|
|
|
|
# Linux/Android 配置
|
|
|
|
|
|
message(STATUS "配置 Linux 平台")
|
|
|
|
|
|
|
|
|
|
|
|
# 链接必要的 Linux 库
|
|
|
|
|
|
target_link_libraries(UnityTracyPlugin
|
|
|
|
|
|
pthread # POSIX threads
|
|
|
|
|
|
dl # Dynamic linking
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 符号可见性
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
CXX_VISIBILITY_PRESET hidden
|
|
|
|
|
|
VISIBILITY_INLINES_HIDDEN YES
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 输出到 Linux 平台目录
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Unity/Plugins/Linux/x86_64"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 编译选项
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
if(MSVC)
|
|
|
|
|
|
# Visual Studio 编译器选项
|
|
|
|
|
|
target_compile_options(UnityTracyPlugin PRIVATE
|
|
|
|
|
|
/W4 # 警告级别 4
|
|
|
|
|
|
/WX- # 警告不视为错误
|
|
|
|
|
|
/permissive- # 标准一致性模式
|
|
|
|
|
|
/MP # 多处理器编译
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Release 优化
|
|
|
|
|
|
target_compile_options(UnityTracyPlugin PRIVATE
|
|
|
|
|
|
$<$<CONFIG:Release>:/O2> # 最大优化
|
|
|
|
|
|
$<$<CONFIG:Release>:/Ob2> # 内联展开
|
|
|
|
|
|
)
|
|
|
|
|
|
else()
|
|
|
|
|
|
# GCC/Clang 编译器选项
|
|
|
|
|
|
target_compile_options(UnityTracyPlugin PRIVATE
|
|
|
|
|
|
-Wall
|
|
|
|
|
|
-Wextra
|
|
|
|
|
|
-Wno-unused-parameter
|
|
|
|
|
|
-fPIC # 位置无关代码
|
|
|
|
|
|
-fvisibility=hidden # 隐藏符号
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Release 优化
|
|
|
|
|
|
target_compile_options(UnityTracyPlugin PRIVATE
|
|
|
|
|
|
$<$<CONFIG:Release>:-O3> # 最大优化
|
|
|
|
|
|
$<$<CONFIG:Release>:-DNDEBUG> # 禁用断言
|
|
|
|
|
|
)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# Android NDK 配置(如果使用 Android)
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
if(ANDROID)
|
|
|
|
|
|
message(STATUS "配置 Android 平台")
|
|
|
|
|
|
message(STATUS "Android ABI: ${ANDROID_ABI}")
|
|
|
|
|
|
|
|
|
|
|
|
# 链接 Android 库
|
|
|
|
|
|
target_link_libraries(UnityTracyPlugin
|
|
|
|
|
|
log # Android 日志
|
|
|
|
|
|
android # Android API
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 输出到 Android 平台目录
|
|
|
|
|
|
set_target_properties(UnityTracyPlugin PROPERTIES
|
|
|
|
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Unity/Plugins/Android/${ANDROID_ABI}"
|
|
|
|
|
|
)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 安装配置
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
install(TARGETS UnityTracyPlugin
|
|
|
|
|
|
RUNTIME DESTINATION bin
|
|
|
|
|
|
LIBRARY DESTINATION lib
|
|
|
|
|
|
ARCHIVE DESTINATION lib
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 构建信息
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
message(STATUS "========================================")
|
|
|
|
|
|
message(STATUS "Unity Tracy Plugin 配置完成")
|
|
|
|
|
|
message(STATUS "========================================")
|
|
|
|
|
|
message(STATUS "项目版本: ${PROJECT_VERSION}")
|
|
|
|
|
|
message(STATUS "C++ 标准: ${CMAKE_CXX_STANDARD}")
|
|
|
|
|
|
message(STATUS "构建类型: ${CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
message(STATUS "编译器: ${CMAKE_CXX_COMPILER_ID}")
|
2025-11-27 10:15:03 +08:00
|
|
|
|
message(STATUS "Tracy 启用: ${IS_TRACY_ENABLE}")
|
|
|
|
|
|
message(STATUS "Tracy 按需模式: ${IS_TRACY_ON_DEMAND}")
|
2025-11-26 14:35:58 +08:00
|
|
|
|
message(STATUS "========================================")
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 自定义构建目标
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
# 清理目标
|
|
|
|
|
|
add_custom_target(clean-all
|
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/Unity"
|
|
|
|
|
|
COMMENT "清理所有输出文件"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# 复制到 Unity 项目(需要设置 UNITY_PROJECT_PATH)
|
|
|
|
|
|
if(DEFINED ENV{UNITY_PROJECT_PATH})
|
|
|
|
|
|
set(UNITY_PROJECT_PATH $ENV{UNITY_PROJECT_PATH})
|
|
|
|
|
|
message(STATUS "Unity 项目路径: ${UNITY_PROJECT_PATH}")
|
|
|
|
|
|
|
|
|
|
|
|
add_custom_command(TARGET UnityTracyPlugin POST_BUILD
|
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
|
|
|
|
"${CMAKE_BINARY_DIR}/Unity/Plugins"
|
|
|
|
|
|
"${UNITY_PROJECT_PATH}/Assets/Plugins"
|
|
|
|
|
|
COMMENT "复制 Plugin 到 Unity 项目"
|
|
|
|
|
|
)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
# 测试(可选)
|
|
|
|
|
|
# ============================================
|
|
|
|
|
|
|
|
|
|
|
|
option(BUILD_TESTS "构建测试程序" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
if(BUILD_TESTS)
|
|
|
|
|
|
enable_testing()
|
|
|
|
|
|
|
|
|
|
|
|
add_executable(PluginTest
|
|
|
|
|
|
test/plugin_test.cpp
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
target_link_libraries(PluginTest UnityTracyPlugin)
|
|
|
|
|
|
|
|
|
|
|
|
add_test(NAME PluginBasicTest COMMAND PluginTest)
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|