77 lines
2.9 KiB
CMake
77 lines
2.9 KiB
CMake
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
# SPDX-FileCopyrightText: 2025 ai-ad4 and the FreePDFEditor contributors
|
|
# src/ipc/CMakeLists.txt — the M1 IPC layer (§2.1, ADR-0004).
|
|
#
|
|
# Qt-free so it is unit-testable without a QApplication. Links QPDF (the
|
|
# document process reads PDFs from the handed fd), Cap'n Proto (the RPC
|
|
# transport), and libseccomp (the sandbox). The Qt adapter that marshals
|
|
# results back to the GUI thread lives in src/app.
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if(PkgConfig_FOUND)
|
|
pkg_check_modules(QPDF libqpdf IMPORTED_TARGET)
|
|
pkg_check_modules(SECCOMP libseccomp IMPORTED_TARGET)
|
|
pkg_check_modules(CAPNP capnp-rpc capnp IMPORTED_TARGET)
|
|
endif()
|
|
find_program(CAPNP_EXECUTABLE NAMES capnp capnpc)
|
|
|
|
set(_fpe_ipc_deps_ok ON)
|
|
if(NOT TARGET PkgConfig::QPDF)
|
|
message(STATUS "QPDF not found — src/ipc will not be built.")
|
|
set(_fpe_ipc_deps_ok OFF)
|
|
endif()
|
|
if(NOT TARGET PkgConfig::SECCOMP)
|
|
message(STATUS "libseccomp not found — src/ipc will not be built.")
|
|
set(_fpe_ipc_deps_ok OFF)
|
|
endif()
|
|
if(NOT TARGET PkgConfig::CAPNP OR NOT CAPNP_EXECUTABLE)
|
|
message(STATUS "Cap'n Proto or the capnp compiler not found — src/ipc will not be built.")
|
|
set(_fpe_ipc_deps_ok OFF)
|
|
endif()
|
|
|
|
if(_fpe_ipc_deps_ok)
|
|
# Generate the C++ from the IPC schema with the capnp compiler directly
|
|
# (the Debian CapnProto CMake config hard-requires libatomic via a check
|
|
# that fails on x86-64 where it isn't needed; pkg-config has no such
|
|
# check — see ~/memories/gitea-freepdfeditor.md).
|
|
set(_schema ${CMAKE_CURRENT_SOURCE_DIR}/ipc.capnp)
|
|
set(_gen_dir ${CMAKE_CURRENT_BINARY_DIR}/generated)
|
|
set(_gen_hdr ${_gen_dir}/ipc.capnp.h)
|
|
set(_gen_src ${_gen_dir}/ipc.capnp.c++)
|
|
file(MAKE_DIRECTORY ${_gen_dir})
|
|
add_custom_command(
|
|
OUTPUT ${_gen_hdr} ${_gen_src}
|
|
COMMAND ${CAPNP_EXECUTABLE} compile
|
|
--src-prefix=${CMAKE_CURRENT_SOURCE_DIR}
|
|
-I${CAPNP_INCLUDE_DIRS}
|
|
-oc++:${_gen_dir}
|
|
${_schema}
|
|
DEPENDS ${_schema}
|
|
COMMENT "Generating Cap'n Proto C++ for the M1 IPC schema"
|
|
VERBATIM)
|
|
|
|
add_library(freepdfeditor_ipc STATIC
|
|
FdPassing.cpp
|
|
FdPassing.h
|
|
Sandbox.cpp
|
|
Sandbox.h
|
|
DocumentProcessServer.cpp
|
|
DocumentProcessServer.h
|
|
DocumentProcessClient.cpp
|
|
DocumentProcessClient.h
|
|
ProcessLauncher.cpp
|
|
ProcessLauncher.h
|
|
${_gen_src}
|
|
)
|
|
target_include_directories(freepdfeditor_ipc PUBLIC
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${_gen_dir})
|
|
target_link_libraries(freepdfeditor_ipc PUBLIC
|
|
PkgConfig::QPDF
|
|
PkgConfig::SECCOMP
|
|
PkgConfig::CAPNP
|
|
Threads::Threads)
|
|
target_compile_features(freepdfeditor_ipc PUBLIC cxx_std_20)
|
|
freepdfeditor_apply_warnings(freepdfeditor_ipc)
|
|
freepdfeditor_apply_hardening(freepdfeditor_ipc)
|
|
endif() |