From c1b9c8303dd63e47a40b6ec9df25d2e97538d98b Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 29 Jun 2026 20:55:07 +0200 Subject: [PATCH] Enable vcpkg manifest features based on CMake options --- CMakeLists.txt | 122 ++++++++++++++++++++++++++----------------------- vcpkg.json | 65 +++++++++++++++++--------- 2 files changed, 109 insertions(+), 78 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14a41fa..8a48459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,33 @@ cmake_minimum_required(VERSION 3.19) +option(WITH_TELEMETRY "Enable profiler integration" ON) +option(WITH_MEMORY_TRACKING "Enable tracking of memory allocations." ON) +option(BUILD_TESTING "Build and run tests. Enabled by default." ON) + +# Determine if/when to generate/build documentation. The rules are as follows: +# - If running locally - Build documentation is OFF by default +# - If running on a build agent (TeamCity) - Build documentation is ON by default +# - If -DBUILD_DOCUMENTATION=ON/OFF flag is explicitly set, use it. +set(BUILD_DOCUMENTATION_DEFAULT_FLAG OFF) +if(DEFINED ENV{TEAMCITY_VERSION}) + set(BUILD_DOCUMENTATION_DEFAULT_FLAG ON) +endif() +option(BUILD_DOCUMENTATION "Build Documentation" ${BUILD_DOCUMENTATION_DEFAULT_FLAG}) + +if(WITH_TELEMETRY) + list(APPEND VCPKG_MANIFEST_FEATURES "telemetry") +endif() +if(WITH_MEMORY_TRACKING) + list(APPEND VCPKG_MANIFEST_FEATURES "memory-tracking") +endif() +if(BUILD_TESTING) + list(APPEND VCPKG_MANIFEST_FEATURES "tests") +endif() +if(BUILD_DOCUMENTATION) + list(APPEND VCPKG_MANIFEST_FEATURES "docs") +endif() + project(CcpCore) set(CCP_TOOLSET ${CMAKE_GENERATOR_TOOLSET}) @@ -13,9 +40,6 @@ include(cmake/CcpDocsGenerator.cmake) include(cmake/CcpPackageConfigHelpers.cmake) include(cmake/CcpBuildConfigurations.cmake) -option(WITH_TELEMETRY "Enable profiler integration" ON) -option(WITH_MEMORY_TRACKING "Enable tracking of memory allocations." ON) - set(SRC_FILES CcpCore.cpp CcpAssert.cpp @@ -127,12 +151,9 @@ else() target_compile_definitions(CcpCore PUBLIC CCP_MEMORY_DEBUG=0) endif() -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - option(BUILD_TESTING "Build and run tests. Enabled by default." ON) +if(BUILD_TESTING) include(CTest) - if(BUILD_TESTING) - add_subdirectory(tests) - endif() + add_subdirectory(tests) endif() target_compile_definitions(CcpCore PRIVATE PLATFORM_TOOLSET=${CCP_TOOLSET}) @@ -152,56 +173,45 @@ target_include_directories(CcpCore ${CMAKE_CURRENT_BINARY_DIR} ) -# Provide an install target iff this is the top level project only -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - # Determine if/when to generate/build documentation. The rules are as follows: - # - If running locally - Build documentation is OFF by default - # - If running on a build agent (TeamCity) - Build documentation is ON by default - # - If -DBUILD_DOCUMENTATION=ON/OFF flag is explicitly set, use it. - set(BUILD_DOCUMENTATION_DEFAULT_FLAG OFF) - if(DEFINED ENV{TEAMCITY_VERSION}) - set(BUILD_DOCUMENTATION_DEFAULT_FLAG ON) - endif() - message(STATUS "Document generation settings: default=${BUILD_DOCUMENTATION_DEFAULT_FLAG}, option BUILD_DOCUMENTATION=${BUILD_DOCUMENTATION}") - option(BUILD_DOCUMENTATION "Build Documentation" ${BUILD_DOCUMENTATION_DEFAULT_FLAG}) - - if(BUILD_DOCUMENTATION) - find_package(Python3 COMPONENTS Interpreter REQUIRED) - include(cmake/CcpDocsGenerator.cmake) - - if(WIN32) - set(PYTHONPATH_ENV_SPHINX "$\;${CMAKE_SOURCE_DIR}/python") - elseif(APPLE) - set(PYTHONPATH_ENV_SPHINX "$:${CMAKE_SOURCE_DIR}/python") - endif() - - set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc/source) - set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/build) - - get_target_property(CORE_COMPILE_DEFINITIONS CcpCore COMPILE_DEFINITIONS) - list(TRANSFORM CORE_COMPILE_DEFINITIONS GENEX_STRIP) - list(APPEND CORE_COMPILE_DEFINITIONS - CARBON_CORE_API= - CARBON_CORE_DEPRECATED_EXPORT= - NOINLINE= - CCPLOG_PRINTF_FORMAT= - ) - list(JOIN CORE_COMPILE_DEFINITIONS " \\\n" CORE_COMPILE_DEFINITIONS) - - create_carbon_docs_sphinx_target( - PYTHON_EXE ${Python3_EXECUTABLE} - VENV_NAME docs_generation_venv - PYTHONPATH_ENV ${PYTHONPATH_ENV_SPHINX} - SPHINX_SOURCE ${SPHINX_SOURCE} - SPHINX_BUILD ${SPHINX_BUILD} - DOXYGEN_SRC_FILES ${SRC_FILES} - SPHINX_TARGET_NAME Sphinx - DOXYGEN_TARGET_NAME Doxygen - INSTALL_DESTINATION documentation/carbon-core - EXTRA_COMPILE_DEFINITIONS ${CORE_COMPILE_DEFINITIONS} - ) +if(BUILD_DOCUMENTATION) + find_package(Python3 COMPONENTS Interpreter REQUIRED) + include(cmake/CcpDocsGenerator.cmake) + + if(WIN32) + set(PYTHONPATH_ENV_SPHINX "$\;${CMAKE_SOURCE_DIR}/python") + elseif(APPLE) + set(PYTHONPATH_ENV_SPHINX "$:${CMAKE_SOURCE_DIR}/python") endif() + set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc/source) + set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/doc/build) + + get_target_property(CORE_COMPILE_DEFINITIONS CcpCore COMPILE_DEFINITIONS) + list(TRANSFORM CORE_COMPILE_DEFINITIONS GENEX_STRIP) + list(APPEND CORE_COMPILE_DEFINITIONS + CARBON_CORE_API= + CARBON_CORE_DEPRECATED_EXPORT= + NOINLINE= + CCPLOG_PRINTF_FORMAT= + ) + list(JOIN CORE_COMPILE_DEFINITIONS " \\\n" CORE_COMPILE_DEFINITIONS) + + create_carbon_docs_sphinx_target( + PYTHON_EXE ${Python3_EXECUTABLE} + VENV_NAME docs_generation_venv + PYTHONPATH_ENV ${PYTHONPATH_ENV_SPHINX} + SPHINX_SOURCE ${SPHINX_SOURCE} + SPHINX_BUILD ${SPHINX_BUILD} + DOXYGEN_SRC_FILES ${SRC_FILES} + SPHINX_TARGET_NAME Sphinx + DOXYGEN_TARGET_NAME Doxygen + INSTALL_DESTINATION documentation/carbon-core + EXTRA_COMPILE_DEFINITIONS ${CORE_COMPILE_DEFINITIONS} + ) +endif() + +# Provide an install target iff this is the top level project only +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) option(INSTALL_TO_MONOLITH "Install this package to a perforce branch vendor folder - provided for backwards compatability" OFF) if(INSTALL_TO_MONOLITH) diff --git a/vcpkg.json b/vcpkg.json index b128da3..f04e194 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,29 +1,50 @@ { - "dependencies": [ - { - "name": "tracy", - "version>=": "0.13.1#1", - "features": [ - "fibers", - "on-demand", - "no-callstack", - "manual-lifetime", - "delayed-init", - "no-crash-handler" + "dependencies": [], + "features": { + "docs": { + "description": "Generate documentation", + "dependencies": [ + { + "name": "python3", + "version>=": "3.12.9#1", + "host": true + } ] }, - { - "name": "gtest", - "version>=": "1.16.0" + "tests": { + "description": "Enable tests", + "dependencies": [ + { + "name": "gtest", + "version>=": "1.16.0" + } + ] }, - { - "name": "lz4", - "version>=": "1.9.4" + "telemetry": { + "description": "Enable telemetry", + "dependencies": [ + { + "name": "tracy", + "version>=": "0.13.1#1", + "features": [ + "fibers", + "on-demand", + "no-callstack", + "manual-lifetime", + "delayed-init", + "no-crash-handler" + ] + } + ] }, - { - "name": "python3", - "version>=": "3.12.9#1", - "host": true + "memory-tracking": { + "description": "Enable memory tracking", + "dependencies": [ + { + "name": "lz4", + "version>=": "1.9.4" + } + ] } - ] + } }