This commit is contained in:
2025-11-26 14:35:58 +08:00
commit 43de86ee31
18 changed files with 3954 additions and 0 deletions

View File

@@ -0,0 +1,298 @@
# 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)
# ============================================
# 配置选项
# ============================================
option(TRACY_ENABLE "启用 Tracy 性能分析" ON)
option(TRACY_ON_DEMAND "Tracy 按需分析模式" ON)
option(TRACY_NO_EXIT "Tracy 不在退出时断开连接" OFF)
option(TRACY_NO_BROADCAST "Tracy 不广播发现消息" OFF)
option(TRACY_ONLY_LOCALHOST "Tracy 仅允许本地连接" OFF)
# ============================================
# Tracy 配置
# ============================================
if(TRACY_ENABLE)
add_definitions(-DTRACY_ENABLE)
message(STATUS "Tracy 性能分析: 启用")
else()
message(STATUS "Tracy 性能分析: 禁用")
endif()
if(TRACY_ON_DEMAND)
add_definitions(-DTRACY_ON_DEMAND)
message(STATUS "Tracy 按需模式: 启用")
endif()
if(TRACY_NO_EXIT)
add_definitions(-DTRACY_NO_EXIT)
endif()
if(TRACY_NO_BROADCAST)
add_definitions(-DTRACY_NO_BROADCAST)
endif()
if(TRACY_ONLY_LOCALHOST)
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}")
message(STATUS "Tracy 启用: ${TRACY_ENABLE}")
message(STATUS "Tracy 按需模式: ${TRACY_ON_DEMAND}")
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()