299 lines
8.4 KiB
CMake
299 lines
8.4 KiB
CMake
# 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()
|
||
|