# 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(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) option(IS_ADVANCED_ZONE_MANAGEMENT "启用Tracy管理器类" ON) # ============================================ # Tracy 配置 # ============================================ if(IS_TRACY_ENABLE) add_definitions(-DTRACY_ENABLE) message(STATUS "Tracy 性能分析: 启用") else() message(STATUS "Tracy 性能分析: 禁用") endif() if(IS_TRACY_ON_DEMAND) add_definitions(-DTRACY_ON_DEMAND) message(STATUS "Tracy 按需模式: 启用") endif() if(IS_TRACY_NO_EXIT) add_definitions(-DTRACY_NO_EXIT) endif() if(IS_TRACY_NO_BROADCAST) add_definitions(-DTRACY_NO_BROADCAST) endif() if(IS_TRACY_ONLY_LOCALHOST) add_definitions(-DTRACY_ONLY_LOCALHOST) endif() if(IS_ADVANCED_ZONE_MANAGEMENT) add_definitions(-DADVANCED_ZONE_MANAGEMENT) 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 $<$:/O2> # 最大优化 $<$:/Ob2> # 内联展开 ) else() # GCC/Clang 编译器选项 target_compile_options(UnityTracyPlugin PRIVATE -Wall -Wextra -Wno-unused-parameter -fPIC # 位置无关代码 -fvisibility=hidden # 隐藏符号 ) # Release 优化 target_compile_options(UnityTracyPlugin PRIVATE $<$:-O3> # 最大优化 $<$:-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 启用: ${IS_TRACY_ENABLE}") message(STATUS "Tracy 按需模式: ${IS_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()