cmake_minimum_required(VERSION 3.15) project(ghost_macos) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # macOS deployment target set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum macOS version") # Universal Binary (Intel + Apple Silicon) set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures") include_directories(../) include_directories(../client) include_directories(../compress) # Source files set(SOURCES main.mm ../client/Buffer.cpp ../client/IOCPClient.cpp ../client/sign_shim_unix.cpp ScreenHandler.mm InputHandler.mm SystemManager.mm Permissions.mm H264Encoder.mm ) # Create executable add_executable(ghost ${SOURCES}) # Include directories target_include_directories(ghost PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) # Find and link macOS frameworks find_library(COCOA_FRAMEWORK Cocoa REQUIRED) find_library(COREGRAPHICS_FRAMEWORK CoreGraphics REQUIRED) find_library(IOKIT_FRAMEWORK IOKit REQUIRED) find_library(IOSURFACE_FRAMEWORK IOSurface REQUIRED) find_library(APPLICATIONSERVICES_FRAMEWORK ApplicationServices REQUIRED) find_library(SECURITY_FRAMEWORK Security REQUIRED) find_library(CARBON_FRAMEWORK Carbon REQUIRED) find_library(VIDEOTOOLBOX_FRAMEWORK VideoToolbox REQUIRED) find_library(COREMEDIA_FRAMEWORK CoreMedia REQUIRED) find_library(COREVIDEO_FRAMEWORK CoreVideo REQUIRED) find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED) find_library(ICONV_LIBRARY iconv REQUIRED) target_link_libraries(ghost PRIVATE ${COCOA_FRAMEWORK} ${COREGRAPHICS_FRAMEWORK} ${IOKIT_FRAMEWORK} ${IOSURFACE_FRAMEWORK} ${APPLICATIONSERVICES_FRAMEWORK} ${SECURITY_FRAMEWORK} ${CARBON_FRAMEWORK} ${VIDEOTOOLBOX_FRAMEWORK} ${COREMEDIA_FRAMEWORK} ${COREVIDEO_FRAMEWORK} ${ACCELERATE_FRAMEWORK} ${ICONV_LIBRARY} "${CMAKE_SOURCE_DIR}/lib/libzstd.a" # 私有签名库(提供 signMessage / verifyMessage,源码不开源) # 该库由 SimplePlugins 仓库本地构建后放置于 lib/,构建机需先准备好 # libsign.a 内部使用 macOS CommonCrypto(HMAC-SHA256),CCHmac 在 libSystem # 中已被 Cocoa/CoreFoundation 等链接自动引入,故此处无需额外 framework "${CMAKE_SOURCE_DIR}/lib/libsign.a" ) # Compiler flags target_compile_options(ghost PRIVATE -Wall -Wextra -fobjc-arc ) # Output directory set_target_properties(ghost PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )