Files
xianyan/linux/CMakeLists.txt
Developer 27672343b8 520
2026-05-20 01:40:09 +08:00

142 lines
4.6 KiB
CMake

# ============================================================
# 闲言APP (WordsLeisure) — Linux CMakeLists.txt
# 创建时间: 2026-04-20
# 更新时间: 2026-05-18
# 作用: Linux平台构建配置
# 上次更新: 完善Linux平台构建依赖和桌面集成
# ============================================================
cmake_minimum_required(VERSION 3.13)
project(runner LANGUAGES CXX)
set(BINARY_NAME "xianyan")
set(APPLICATION_ID "apps.xy.xianyan")
set(APPLICATION_NAME "闲言")
set(APPLICATION_VERSION "5.2.0")
cmake_policy(SET CMP0063 NEW)
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
if(FLUTTER_TARGET_PLATFORM_SYSROOT)
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endif()
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Flutter build mode" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Profile" "Release")
endif()
function(APPLY_STANDARD_SETTINGS TARGET)
target_compile_features(${TARGET} PUBLIC cxx_std_14)
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
endfunction()
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
add_subdirectory(${FLUTTER_MANAGED_DIR})
# === System-level dependencies ===
find_package(PkgConfig REQUIRED)
# GTK3 — Flutter Linux核心GUI框架
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
# GStreamer — audioplayers_linux / record_linux 音频录制播放
pkg_check_modules(GSTREAMER IMPORTED_TARGET gstreamer-1.0)
pkg_check_modules(GSTREAMER_BASE IMPORTED_TARGET gstreamer-base-1.0)
# libmpv — 视频播放后备(如需media_kit)
pkg_check_modules(MPV IMPORTED_TARGET mpv)
# Bluetooth — flutter_blue_plus Linux BLE支持
pkg_check_modules(BLUEZ IMPORTED_TARGET bluez)
# ALSA — 音频底层驱动
pkg_check_modules(ALSA IMPORTED_TARGET alsa)
# libnotify — 系统通知(flutter_local_notifications)
pkg_check_modules(LIBNOTIFY IMPORTED_TARGET libnotify)
# libsecret — flutter_secure_storage Linux密钥存储
pkg_check_modules(LIBSECRET IMPORTED_TARGET libsecret)
# X11 — 屏幕信息/窗口管理辅助
pkg_check_modules(X11 IMPORTED_TARGET x11)
# DBus — 网络信息/电池/设备信息等系统服务
pkg_check_modules(DBUS_GLIB IMPORTED_TARGET dbus-glib-1)
add_subdirectory("runner")
add_dependencies(${BINARY_NAME} flutter_assemble)
set_target_properties(${BINARY_NAME}
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
)
include(flutter/generated_plugins.cmake)
# === Installation ===
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
endif()
install(CODE "
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
" COMPONENT Runtime)
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
COMPONENT Runtime)
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
install(FILES "${bundled_library}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endforeach(bundled_library)
set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
install(DIRECTORY "${NATIVE_ASSETS_DIR}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
install(CODE "
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
" COMPONENT Runtime)
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endif()
# === Desktop Integration ===
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/apps.xy.xianyan.desktop"
DESTINATION "${CMAKE_INSTALL_PREFIX}/"
COMPONENT Runtime)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/apps.xy.xianyan.appdata.xml"
DESTINATION "${CMAKE_INSTALL_PREFIX}/"
COMPONENT Runtime)