Files
tracy-for-unity/unity_examples/CMakeLists.txt
2025-11-27 16:46:51 +08:00

299 lines
8.4 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)
# ============================================
# 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()
# ============================================
# 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 启用: ${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()