cmake_minimum_required(VERSION 3.20) project(moshios CXX) # 直接编译 blinksh/mosh(ios 分支) 的 src/*.cc 为静态库,绕过 autotools。 # 特性宏由同目录手写 config.h 提供(-I 本目录,且优先于 src 树内任何 config.h)。 # 变量入参: # MOSH_SRC —— vendor/mosh/src 绝对路径 # PROTOBUF_SRC —— vendor/protobuf/src 绝对路径(提供 protobuf-lite 头) if(NOT DEFINED MOSH_SRC) message(FATAL_ERROR "MOSH_SRC 未设置") endif() if(NOT DEFINED PROTOBUF_SRC) message(FATAL_ERROR "PROTOBUF_SRC 未设置") endif() set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) # gnu++14(mosh 用到 GNU 扩展) # 依据 src/*/Makefile.am 的 BUILD_IOS_CONTROLLER 分支精确选取源文件。 # 关键:terminal 用 terminaldisplayinit_ios.cc(非 terminaldisplayinit.cc,后者需 ncurses); # frontend 仅取 moshiosbridge/iosclient/terminaloverlay(排除 mosh-client/server/mosh/stmclient)。 set(MOSH_SOURCES ${MOSH_SRC}/crypto/base64.cc ${MOSH_SRC}/crypto/crypto.cc ${MOSH_SRC}/crypto/ocb.cc ${MOSH_SRC}/network/compressor.cc ${MOSH_SRC}/network/network.cc ${MOSH_SRC}/network/networktransport.cc ${MOSH_SRC}/network/transportfragment.cc ${MOSH_SRC}/network/transportsender.cc ${MOSH_SRC}/statesync/completeterminal.cc ${MOSH_SRC}/statesync/user.cc ${MOSH_SRC}/terminal/parseraction.cc ${MOSH_SRC}/terminal/parser.cc ${MOSH_SRC}/terminal/parserstate.cc ${MOSH_SRC}/terminal/terminal.cc ${MOSH_SRC}/terminal/terminaldispatcher.cc ${MOSH_SRC}/terminal/terminaldisplay.cc ${MOSH_SRC}/terminal/terminaldisplayinit_ios.cc ${MOSH_SRC}/terminal/terminalframebuffer.cc ${MOSH_SRC}/terminal/terminalfunctions.cc ${MOSH_SRC}/terminal/terminaluserinput.cc ${MOSH_SRC}/util/locale_utils.cc ${MOSH_SRC}/util/pty_compat.cc ${MOSH_SRC}/util/select.cc ${MOSH_SRC}/util/swrite.cc ${MOSH_SRC}/util/timestamp.cc ${MOSH_SRC}/protobufs/hostinput.pb.cc ${MOSH_SRC}/protobufs/transportinstruction.pb.cc ${MOSH_SRC}/protobufs/userinput.pb.cc ${MOSH_SRC}/frontend/moshiosbridge.cc ${MOSH_SRC}/frontend/iosclient.cc ${MOSH_SRC}/frontend/terminaloverlay.cc ) add_library(moshios STATIC ${MOSH_SOURCES}) target_include_directories(moshios PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} # 手写 config.h(必须最先) ${MOSH_SRC} ${MOSH_SRC}/crypto ${MOSH_SRC}/network ${MOSH_SRC}/statesync ${MOSH_SRC}/terminal ${MOSH_SRC}/util ${MOSH_SRC}/protobufs ${MOSH_SRC}/frontend ${PROTOBUF_SRC} ) # 1.3.2 老代码在 Xcode 26/新 clang 下告警多;关掉噪声,绝不开 -Werror。 # 强制前置 :protobuf 3.21.12 的 stubs/port.h 用了 int8_t 却未自带 stdint 包含, # iOS SDK 头链比 host macOS 严格,会报 "unknown type name 'int8_t'"。全 TU 注入即修复。 target_compile_options(moshios PRIVATE "SHELL:-include cstdint" -Wno-deprecated-declarations -Wno-deprecated-register -Wno-register -Wno-unused-parameter -Wno-writable-strings -fno-strict-aliasing )