Skip to content

Feature/add workflow presets #68

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .clang-format
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
---
BasedOnStyle: LLVM
Language: Json
IndentWidth: 4
UseTab: Never
---
Language: Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false
@@ -69,7 +76,6 @@ IndentWrappedFunctionNames: true
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
Language: Cpp
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
16 changes: 12 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.21)
cmake_minimum_required(VERSION 3.21...4.1)

# This template attempts to be "fetch_content"-able
# so that it works well with tools like CPM or other
@@ -38,7 +38,7 @@ myproject_local_options()
set(CMAKE_CXX_VISIBILITY_PRESET hidden)

set(GIT_SHA
"Unknown"
"0508115-dirty"
CACHE STRING "SHA this build was generated from")
string(
SUBSTRING "${GIT_SHA}"
@@ -92,7 +92,15 @@ if(MSVC)
endif()

# set the startup project for the "play" button in MSVC
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT intro)
if(TARGET intro)
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT intro)
set(VS_STARTUP_PROJECT intro)
endif()

if(ENABLE_DOXYGEN)
include(cmake/Doxygen.cmake)
myproject_enable_doxygen("")
endif()

if(CMAKE_SKIP_INSTALL_RULES)
return()
@@ -104,7 +112,7 @@ include(cmake/PackageProject.cmake)
# we know we want to ship
myproject_package_project(
TARGETS
intro
${VS_STARTUP_PROJECT}
myproject_options
myproject_warnings
# FIXME: this does not work! CK
199 changes: 171 additions & 28 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"version": 3,
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"minor": 25,
"patch": 0
},
"configurePresets": [
@@ -12,11 +12,24 @@
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}"
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_PREFIX_PATH": {
"type": "path",
"value": "${sourceDir}/out/install/${presetName}"
},
"CMAKE_CXX_EXTENSIONS": false,
"CMAKE_CXX_STANDARD": "23",
"CMAKE_CXX_STANDARD_REQUIRED": true,
"CMAKE_EXPORT_COMPILE_COMMANDS": true,
"CMAKE_MESSAGE_LOG_LEVEL": "TRACE",
"CMAKE_SKIP_TEST_ALL_DEPENDENCY": false
}
},
{
"name": "conf-windows-common",
"description": "Windows settings for MSBuild toolchain that apply to msvc and clang",
"description":
"Windows settings for MSBuild toolchain that apply to msvc and clang",
"hidden": true,
"inherits": "conf-common",
"condition": {
@@ -50,6 +63,9 @@
"Darwin"
]
},
"cacheVariables": {
"CMAKE_UNITY_BUILD": true
},
"vendor": {
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
@@ -59,7 +75,8 @@
{
"name": "windows-msvc-debug-developer-mode",
"displayName": "msvc Debug (Developer Mode)",
"description": "Target Windows with the msvc compiler, debug build type",
"description":
"Target Windows with the msvc compiler, debug build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
@@ -71,7 +88,8 @@
{
"name": "windows-msvc-release-developer-mode",
"displayName": "msvc Release (Developer Mode)",
"description": "Target Windows with the msvc compiler, release build type",
"description":
"Target Windows with the msvc compiler, release build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
@@ -83,7 +101,8 @@
{
"name": "windows-msvc-debug-user-mode",
"displayName": "msvc Debug (User Mode)",
"description": "Target Windows with the msvc compiler, debug build type",
"description":
"Target Windows with the msvc compiler, debug build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
@@ -95,7 +114,8 @@
{
"name": "windows-msvc-release-user-mode",
"displayName": "msvc Release (User Mode)",
"description": "Target Windows with the msvc compiler, release build type",
"description":
"Target Windows with the msvc compiler, release build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl",
@@ -107,7 +127,8 @@
{
"name": "windows-clang-debug",
"displayName": "clang Debug",
"description": "Target Windows with the clang compiler, debug build type",
"description":
"Target Windows with the clang compiler, debug build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang-cl",
@@ -123,7 +144,8 @@
{
"name": "windows-clang-release",
"displayName": "clang Release",
"description": "Target Windows with the clang compiler, release build type",
"description":
"Target Windows with the clang compiler, release build type",
"inherits": "conf-windows-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang-cl",
@@ -137,20 +159,24 @@
}
},
{
"name": "unixlike-gcc-debug",
"name": "gcc-debug",
"displayName": "gcc Debug",
"description": "Target Unix-like OS with the gcc compiler, debug build type",
"description":
"Target Unix-like OS with the gcc compiler, debug build type",
"inherits": "conf-unixlike-common",
"cacheVariables": {
"myproject_ENABLE_COVERAGE": false,
"CMAKE_SKIP_INSTALL_RULES": true,
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "unixlike-gcc-release",
"name": "gcc-release",
"displayName": "gcc Release",
"description": "Target Unix-like OS with the gcc compiler, release build type",
"description":
"Target Unix-like OS with the gcc compiler, release build type",
"inherits": "conf-unixlike-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "gcc",
@@ -159,20 +185,24 @@
}
},
{
"name": "unixlike-clang-debug",
"name": "clang-debug",
"displayName": "clang Debug",
"description": "Target Unix-like OS with the clang compiler, debug build type",
"description":
"Target Unix-like OS with the clang compiler, debug build type",
"inherits": "conf-unixlike-common",
"cacheVariables": {
"myproject_ENABLE_COVERAGE": false,
"CMAKE_SKIP_INSTALL_RULES": true,
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "unixlike-clang-release",
"name": "clang-release",
"displayName": "clang Release",
"description": "Target Unix-like OS with the clang compiler, release build type",
"description":
"Target Unix-like OS with the clang compiler, release build type",
"inherits": "conf-unixlike-common",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
@@ -181,10 +211,69 @@
}
}
],
"buildPresets": [
{
"name": "build-common",
"description": "Build CMake settings that apply to all configurations",
"hidden": true,
"jobs": 4
},
{
"name": "build-windows-msvc-debug-developer-mode",
"inherits": "build-common",
"configurePreset": "windows-msvc-debug-developer-mode"
},
{
"name": "build-windows-msvc-release-developer-mode",
"inherits": "build-common",
"configurePreset": "windows-msvc-release-developer-mode"
},
{
"name": "build-windows-clang-debug",
"inherits": "build-common",
"configurePreset": "windows-clang-debug"
},
{
"name": "build-windows-clang-release",
"inherits": "build-common",
"configurePreset": "windows-clang-release"
},
{
"name": "clang-release",
"configurePreset": "clang-release"
},
{
"name": "clang-install",
"configurePreset": "clang-release",
"targets": [
"install"
]
},
{
"name": "clang-debug",
"configurePreset": "clang-debug"
},
{
"name": "gcc-release",
"configurePreset": "gcc-release"
},
{
"name": "gcc-install",
"configurePreset": "gcc-release",
"targets": [
"install"
]
},
{
"name": "gcc-debug",
"configurePreset": "gcc-debug"
}
],
"testPresets": [
{
"name": "test-common",
"description": "Test CMake settings that apply to all configurations",
"description":
"Test CMake settings that apply to all configurations",
"hidden": true,
"output": {
"outputOnFailure": true
@@ -223,32 +312,86 @@
"configurePreset": "windows-clang-release"
},
{
"name": "test-unixlike-gcc-debug",
"name": "gcc-debug",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "test-common",
"configurePreset": "unixlike-gcc-debug"
"configurePreset": "gcc-debug"
},
{
"name": "test-unixlike-gcc-release",
"name": "gcc-release",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "test-common",
"configurePreset": "unixlike-gcc-release"
"configurePreset": "gcc-release"
},
{
"name": "test-unixlike-clang-debug",
"name": "clang-debug",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "test-common",
"configurePreset": "unixlike-clang-debug"
"configurePreset": "clang-debug"
},
{
"name": "test-unixlike-clang-release",
"name": "clang-release",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "test-common",
"configurePreset": "unixlike-clang-release"
"configurePreset": "clang-release"
}
],
"packagePresets": [
{
"name": "clang-release",
"configurePreset": "clang-release",
"generators": [
"TGZ"
]
},
{
"name": "gcc-release",
"configurePreset": "gcc-release",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"description": "Developer workflow without installation",
"name": "clang-debug",
"steps": [
{
"type": "configure",
"name": "clang-debug"
},
{
"type": "build",
"name": "clang-debug"
},
{
"type": "test",
"name": "clang-debug"
}
]
},
{
"description": "Release workflow without test",
"name": "clang-release",
"steps": [
{
"name": "clang-release",
"type": "configure"
},
{
"name": "clang-release",
"type": "build"
},
{
"name": "clang-release",
"type": "package"
}
]
}
]
}
}
178 changes: 178 additions & 0 deletions CMakeUserPresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 26,
"patch": 0
},
"configurePresets": [
{
"name": "default-config",
"hidden": true,
"generator": "Ninja",
"cacheVariables": {
"CMAKE_HOST_SYSTEM_PROCESSOR": "$penv{PROCESSOR_ARCHITECTURE}"
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "1"
}
},
{
"name": "common-config",
"description": "Settings for all toolchains",
"hidden": true,
"inherits": ["conf-unixlike-common", "default-config"],
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"myproject_BUILD_FTXUI": false,
"ENABLE_DOXYGEN": false,
"ENABLE_CPPCHECK": false,
"ENABLE_CLANG_TIDY": false
},
"environment": {
"CPM_USE_LOCAL_PACKAGES": "0"
},
"vendor": {
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
},
{
"name": "debug",
"displayName": "Debug",
"description": "Debug build type",
"inherits": "common-config",
"cacheVariables": {
"CMAKE_SKIP_INSTALL_RULES": true,
"CMAKE_BUILD_TYPE": "Debug",
"myproject_ENABLE_COVERAGE": true
}
},
{
"name": "release",
"displayName": "Release",
"description": "Release build type",
"inherits": "common-config",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"ENABLE_DOXYGEN": true
}
}
],
"testPresets": [
{
"name": "common-test",
"description":
"Test CMake settings that apply to all configurations",
"hidden": true,
"output": {
"outputOnFailure": true
},
"execution": {
"noTestsAction": "error",
"stopOnFailure": true
}
},
{
"name": "debug",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "common-test",
"configuration": "Debug",
"configurePreset": "debug"
},
{
"name": "release",
"displayName": "Strict",
"description": "Enable output and stop on failure",
"inherits": "common-test",
"configuration": "Release",
"configurePreset": "release"
}
],
"buildPresets": [
{
"name": "release",
"configurePreset": "release"
},
{
"name": "install",
"configurePreset": "release",
"targets": [
"install"
]
},
{
"name": "doxygen-docs",
"configurePreset": "release",
"targets": [
"doxygen-docs"
]
},
{
"name": "debug",
"configurePreset": "debug"
}
],
"packagePresets": [
{
"name": "release",
"configurePreset": "release",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"description": "Developer workflow without installation",
"name": "debug",
"steps": [
{
"type": "configure",
"name": "debug"
},
{
"type": "build",
"name": "debug"
},
{
"type": "test",
"name": "debug"
}
]
},
{
"description": "Release workflow without test",
"name": "release",
"steps": [
{
"name": "release",
"type": "configure"
},
{
"name": "release",
"type": "build"
},
{
"name": "release",
"type": "test"
},
{
"name": "install",
"type": "build"
},
{
"name": "doxygen-docs",
"type": "build"
},
{
"name": "release",
"type": "package"
}
]
}
]
}
16 changes: 9 additions & 7 deletions Dependencies.cmake
Original file line number Diff line number Diff line change
@@ -9,15 +9,15 @@ function(myproject_setup_dependencies)
# already been provided to us by a parent project

if(NOT TARGET fmtlib::fmtlib)
cpmaddpackage("gh:fmtlib/fmt#11.1.4")
cpmaddpackage("gh:fmtlib/fmt#11.2.0")
endif()

if(NOT TARGET spdlog::spdlog)
cpmaddpackage(
NAME
spdlog
VERSION
1.15.2
1.15.3
GITHUB_REPOSITORY
"gabime/spdlog"
OPTIONS
@@ -28,12 +28,14 @@ function(myproject_setup_dependencies)
cpmaddpackage("gh:catchorg/Catch2@3.8.1")
endif()

if(NOT TARGET CLI11::CLI11)
cpmaddpackage("gh:CLIUtils/CLI11@2.5.0")
endif()
if(myproject_BUILD_FTXUI)
if(NOT TARGET CLI11::CLI11)
cpmaddpackage("gh:CLIUtils/CLI11@2.5.0")
endif()

if(NOT TARGET ftxui::screen)
cpmaddpackage("gh:ArthurSonzogni/FTXUI@6.0.2")
if(NOT TARGET ftxui::screen)
cpmaddpackage("gh:ArthurSonzogni/FTXUI@6.1.9")
endif()
endif()

if(NOT TARGET tools::tools)
11 changes: 6 additions & 5 deletions ProjectOptions.cmake
Original file line number Diff line number Diff line change
@@ -89,9 +89,9 @@ macro(myproject_setup_options)
option(myproject_ENABLE_SANITIZER_UNDEFINED "Enable undefined sanitizer" ${SUPPORTS_UBSAN})
option(myproject_ENABLE_SANITIZER_THREAD "Enable thread sanitizer" OFF)
option(myproject_ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" OFF)
option(myproject_ENABLE_UNITY_BUILD "Enable unity builds" OFF)
option(myproject_ENABLE_CLANG_TIDY "Enable clang-tidy" ON)
option(myproject_ENABLE_CPPCHECK "Enable cpp-check analysis" ON)
option(myproject_ENABLE_UNITY_BUILD "Enable unity builds" ON)
option(myproject_ENABLE_CLANG_TIDY "Enable clang-tidy" OFF)
option(myproject_ENABLE_CPPCHECK "Enable cpp-check analysis" OFF)
option(myproject_ENABLE_PCH "Enable precompiled headers" OFF)
option(myproject_ENABLE_CACHE "Enable ccache" ON)
endif()
@@ -122,6 +122,7 @@ macro(myproject_setup_options)
endif()

option(myproject_BUILD_FUZZ_TESTS "Enable fuzz testing executable" ${DEFAULT_FUZZER})
option(myproject_BUILD_FTXUI "Build FTXUI sample too" ON)

endmacro()

@@ -135,7 +136,7 @@ macro(myproject_global_options)

if(myproject_ENABLE_HARDENING AND myproject_ENABLE_GLOBAL_HARDENING)
include(cmake/Hardening.cmake)
if(NOT SUPPORTS_UBSAN
if(NOT SUPPORTS_UBSAN
OR myproject_ENABLE_SANITIZER_UNDEFINED
OR myproject_ENABLE_SANITIZER_ADDRESS
OR myproject_ENABLE_SANITIZER_THREAD
@@ -221,7 +222,7 @@ macro(myproject_local_options)

if(myproject_ENABLE_HARDENING AND NOT myproject_ENABLE_GLOBAL_HARDENING)
include(cmake/Hardening.cmake)
if(NOT SUPPORTS_UBSAN
if(NOT SUPPORTS_UBSAN
OR myproject_ENABLE_SANITIZER_UNDEFINED
OR myproject_ENABLE_SANITIZER_ADDRESS
OR myproject_ENABLE_SANITIZER_THREAD
4 changes: 2 additions & 2 deletions cmake/CPM.cmake
Original file line number Diff line number Diff line change
@@ -2,8 +2,8 @@
#
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors

set(CPM_DOWNLOAD_VERSION 0.40.8)
set(CPM_HASH_SUM "78ba32abdf798bc616bab7c73aac32a17bbd7b06ad9e26a6add69de8f3ae4791")
set(CPM_DOWNLOAD_VERSION 0.42.0)
set(CPM_HASH_SUM "2020b4fc42dba44817983e06342e682ecfc3d2f484a581f11cc5731fbe4dce8a")

if(CPM_SOURCE_CACHE)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
2 changes: 1 addition & 1 deletion cmake/Doxygen.cmake
Original file line number Diff line number Diff line change
@@ -49,6 +49,6 @@ function(myproject_enable_doxygen DOXYGEN_THEME)

# add doxygen-docs target
message(STATUS "Adding `doxygen-docs` target that builds the documentation.")
doxygen_add_docs(doxygen-docs ALL ${PROJECT_SOURCE_DIR}
doxygen_add_docs(doxygen-docs EXCLUDE_FROM_ALL ${PROJECT_SOURCE_DIR}
COMMENT "Generating documentation - entry file: ${CMAKE_CURRENT_BINARY_DIR}/html/index.html")
endfunction()
5 changes: 4 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
add_subdirectory(sample_library)
add_subdirectory(ftxui_sample)

if(myproject_BUILD_FTXUI)
add_subdirectory(ftxui_sample)
endif()
26 changes: 16 additions & 10 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.15...3.23)
cmake_minimum_required(VERSION 3.21...4.1)

project(CmakeConfigPackageTests LANGUAGES CXX)

@@ -17,17 +17,23 @@ endif()

# ---- Dependencies ----

include(${Catch2_SOURCE_DIR}/extras/Catch.cmake)
if(Catch2_DIR)
include(${Catch2_DIR}/Catch.cmake)
else()
include(${Catch2_SOURCE_DIR}/extras/Catch.cmake)
endif()

# Provide a simple smoke test to make sure that the CLI works and can display a --help message
add_test(NAME cli.has_help COMMAND intro --help)

# Provide a test to verify that the version being reported from the application
# matches the version given to CMake. This will be important once you package
# your program. Real world shows that this is the kind of simple mistake that is easy
# to make, but also easy to test for.
add_test(NAME cli.version_matches COMMAND intro --version)
set_tests_properties(cli.version_matches PROPERTIES PASS_REGULAR_EXPRESSION "${PROJECT_VERSION}")
if(TARGET intro)
add_test(NAME cli.has_help COMMAND intro --help)

# Provide a test to verify that the version being reported from the application
# matches the version given to CMake. This will be important once you package
# your program. Real world shows that this is the kind of simple mistake that is easy
# to make, but also easy to test for.
add_test(NAME cli.version_matches COMMAND intro --version)
set_tests_properties(cli.version_matches PROPERTIES PASS_REGULAR_EXPRESSION "${PROJECT_VERSION}")
endif()

add_executable(tests tests.cpp)
target_link_libraries(