freepdfeditor/CMakeLists.txt

76 lines
3.1 KiB
CMake

# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2025 ai-ad4 and the FreePDFEditor contributors
cmake_minimum_required(VERSION 3.28)
project(FreePDFEditor
VERSION 0.1.0.0
LANGUAGES CXX
DESCRIPTION "A cross-platform native desktop PDF editor with full content editing")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# --- Toolchain requirements -------------------------------------------------
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF) # we use CMake 3.28+ but no C++20 modules yet
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
# --- Output layout ----------------------------------------------------------
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
# Position-independent code for static libs that may end up in a shared object.
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Version string used by the UI process for the About box and --version.
set(FREEPDFEDITOR_VERSION_STRING
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
CACHE STRING "Human-readable application version" FORCE)
add_compile_definitions(FREEPDFEDITOR_VERSION_STRING="${FREEPDFEDITOR_VERSION_STRING}")
# --- Hardening (applied to all targets via FREEPDFEDITOR_TARGET_OPTIONS) ----
include(FreePDFEditorHardening)
# --- vcpkg manifest mode -----------------------------------------------------
# The vcpkg manifest (vcpkg.json) and the pinned baseline (vcpkg-configuration.json)
# drive all third-party dependencies. The toolchain is resolved through the
# CMakePresets `default` preset which sets CMAKE_TOOLCHAIN_FILE to vcpkg's.
find_package(Threads REQUIRED)
# --- Options ----------------------------------------------------------------
option(FREEPDFEDITOR_BUILD_TESTS "Build the unit and gate tests" ON)
option(FREEPDFEDITOR_BUILD_SPIKES "Build the M0 feasibility spike harnesses" ON)
option(FREEPDFEDITOR_ENABLE_LTO "Enable link-time optimization on Release builds" OFF)
option(FREEPDFEDITOR_TREAT_WARNINGS_AS_ERRORS "Treat compiler warnings as errors on CI" OFF)
if(FREEPDFEDITOR_ENABLE_LTO)
include(CheckIPOSupported)
check_ipo_supported(RESULT lpo_supported OUTPUT lpo_error)
if(lpo_supported)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
else()
message(WARNING "LTO requested but not supported: ${lpo_error}")
endif()
endif()
# --- Source tree ------------------------------------------------------------
add_subdirectory(src)
if(FREEPDFEDITOR_BUILD_SPIKES)
add_subdirectory(spike)
endif()
if(FREEPDFEDITOR_BUILD_TESTS)
enable_testing()
add_subdirectory(test)
endif()
# --- CPack packaging (skeleton) ---------------------------------------------
include(FreePDFEditorPackaging)
message(STATUS "FreePDFEditor ${PROJECT_VERSION} — ${CMAKE_BUILD_TYPE} — ${CMAKE_SYSTEM_NAME}")