From 097c75094951cffec66b9a1e857627c3dce3296e Mon Sep 17 00:00:00 2001 From: sgouache <63242745+sgouache@users.noreply.github.com> Date: Wed, 17 Apr 2024 08:42:16 +0200 Subject: [PATCH] Initial commit --- .../workflows/hosted-ninja-vcpkg_submod.yml | 67 +++++++++++ .github/workflows/hosted-pure-workflow.yml | 111 ++++++++++++++++++ .../hosted-ninja-vcpkg_submod.properties.json | 6 + .gitignore | 37 ++++++ .gitmodules | 3 + CMakeLists.txt | 21 ++++ CMakePresets.json | 66 +++++++++++ LICENSE | 21 ++++ README.md | 42 +++++++ img/vscode_cmakepresets_selection.png | Bin 0 -> 51309 bytes src/main.cpp | 12 ++ src/test.cpp | 12 ++ vcpkg | 1 + vcpkg.json | 9 ++ 14 files changed, 408 insertions(+) create mode 100644 .github/workflows/hosted-ninja-vcpkg_submod.yml create mode 100644 .github/workflows/hosted-pure-workflow.yml create mode 100644 .github/workflows/properties/hosted-ninja-vcpkg_submod.properties.json create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 CMakePresets.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 img/vscode_cmakepresets_selection.png create mode 100644 src/main.cpp create mode 100644 src/test.cpp create mode 160000 vcpkg create mode 100644 vcpkg.json diff --git a/.github/workflows/hosted-ninja-vcpkg_submod.yml b/.github/workflows/hosted-ninja-vcpkg_submod.yml new file mode 100644 index 0000000..0d6373b --- /dev/null +++ b/.github/workflows/hosted-ninja-vcpkg_submod.yml @@ -0,0 +1,67 @@ +# Copyright (c) 2021-2022-2023-2024 Luca Cappa +# Released under the term specified in file LICENSE.txt +# SPDX short identifier: MIT +# +# The peculiarity of this workflow is that assumes vcpkg stored as a submodule of this repository. +# The workflow runs on x64 and ARM platforms. +# Workflow steps: +# - Setup vcpkg and cache it on the GitHub Action cloud based cache. +# - Runs CMake with CMakePreset.json using a presest configuration +# that leverages the vcpkg's toolchain file. This will automatically run vcpkg +# to install dependencies described by the vcpkg.json manifest file. +# This stage also runs vcpkg with Binary Caching leveraging GitHub Action cache to +# store the built packages artifacts, hence it will be a no-op if those are restored +# from cache (e.g., already previously built). +# - Finally builds the sources with Ninja, and tests as well. +name: hosted-ninja-vcpkg_submod-autocache +on: + push: + pull_request: + branches: + - v11 + - main + workflow_dispatch: + schedule: + - cron: '0 1 * * *' + +jobs: + job: + name: ${{ matrix.os }}-${{ github.workflow }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + #env: + # + # [OPTIONAL] Define the vcpkg's triplet + # you want to enforce, otherwise the default one + # for the hosting system will be automatically + # choosen (x64 is the default on all platforms, + # e.g. x64-osx). + # VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }} + + steps: + - uses: actions/checkout@v4 + with: + submodules: true + + - uses: lukka/get-cmake@latest + + - name: Restore from cache and setup vcpkg executable and data files. + uses: lukka/run-vcpkg@v11 + with: + vcpkgJsonGlob: 'vcpkg.json' + + # Note: if the preset misses the "configuration", it is possible to explicitly select the + # configuration with the additional `--config` flag, e.g.: + # buildPreset: 'ninja-vcpkg' + # buildPresetAdditionalArgs: "[`--config`, `Release`]" + # testPreset: 'ninja-vcpkg' + # testPresetAdditionalArgs: "[`--config`, `Release`]" + - name: Run CMake+vcpkg+Ninja+CTest to build packages and generate/build/test the code. + uses: lukka/run-cmake@v10 + with: + configurePreset: 'ninja-multi-vcpkg' + buildPreset: 'ninja-vcpkg-release' + testPreset: 'test-release' diff --git a/.github/workflows/hosted-pure-workflow.yml b/.github/workflows/hosted-pure-workflow.yml new file mode 100644 index 0000000..f551e3e --- /dev/null +++ b/.github/workflows/hosted-pure-workflow.yml @@ -0,0 +1,111 @@ +# Copyright (c) 2021-2022-2023-2024 Luca Cappa +# Released under the term specified in file LICENSE.txt +# SPDX short identifier: MIT + +# A "pure" GitHub workflow using CMake, Ninja and vcpkg to build a C/C++ codebase. +# It leverages both CMakePresets.json and vcpkg.json. +# It is called "pure workflow" because it is an example which minimizes the usage of +# custom GitHub Actions, but leverages directly the tools that could be easily run on +# your development machines (i.e. CMake, vcpkg, Ninja) to ensure a perfectly identical +# and reproducible local build (on your development machine) and a remote build on +# build agents. +name: hosted-pure-workflow +on: + push: + pull_request: + branches: + - v11 + - main + workflow_dispatch: + schedule: + - cron: '0 1 * * *' + +jobs: + job: + name: ${{ matrix.os }}-${{ github.workflow }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + include: + - os: windows-latest + triplet: x64-windows + - os: ubuntu-latest + triplet: x64-linux + - os: macos-latest + triplet: x64-osx + env: + # Indicates the location of the vcpkg as a Git submodule of the project repository. + # Not using "VCPKG_ROOT" because a variable with the same name is defined in the VS's + # Developer Command Prompt environment in VS 2022 17.6, which would override this one + # if it had the same name. + _VCPKG_: ${{ github.workspace }}/vcpkg + # Tells vcpkg where binary packages are stored. + VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg/bincache + # Let's use GitHub Action cache as storage for the vcpkg Binary Caching feature. + VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite' + + steps: + # Set env vars needed for vcpkg to leverage the GitHub Action cache as a storage + # for Binary Caching. + - uses: actions/github-script@v7 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + + - uses: actions/checkout@v4 + with: + submodules: true + - name: "Create directory '${{ env.VCPKG_DEFAULT_BINARY_CACHE }}'" + run: mkdir -p $VCPKG_DEFAULT_BINARY_CACHE + shell: bash + + # Setup the build machine with the most recent versions of CMake and Ninja. Both are cached if not already: on subsequent runs both will be quickly restored from GitHub cache service. + - uses: lukka/get-cmake@latest + + # Restore vcpkg from the GitHub Action cache service. Note that packages are restored by vcpkg's binary caching + # when it is being run afterwards by CMake. + - name: Restore vcpkg + uses: actions/cache@v4 + with: + # The first path is the location of vcpkg: it contains the vcpkg executable and data files, as long as the + # built package archives (aka binary cache) which are located by VCPKG_DEFAULT_BINARY_CACHE env var. + # The other paths starting with '!' are exclusions: they contain termporary files generated during the build of the installed packages. + path: | + ${{ env._VCPKG_ }} + !${{ env._VCPKG_ }}/buildtrees + !${{ env._VCPKG_ }}/packages + !${{ env._VCPKG_ }}/downloads + !${{ env._VCPKG_ }}/installed + # The key is composed in a way that it gets properly invalidated whenever a different version of vcpkg is being used. + key: | + ${{ hashFiles( '.git/modules/vcpkg/HEAD' )}} + + # On Windows runners, let's ensure to have the Developer Command Prompt environment setup correctly. + # As used here the Developer Command Prompt created is targeting x64 and using the default the Windows SDK. + - uses: ilammy/msvc-dev-cmd@v1 + + # Run CMake to generate Ninja project files, using the vcpkg's toolchain file to resolve and install + # the dependencies as specified in vcpkg.json. Note that the vcpkg's toolchain is specified + # in the CMakePresets.json file. + # This step also runs vcpkg with Binary Caching leveraging GitHub Action cache to + # store the built packages artifacts. + - name: Restore from cache the dependencies and generate project files + run: | + cmake --preset ninja-multi-vcpkg + + # Build (Release configuration only) the whole project with Ninja (which is spawn by CMake). + # + # Note: if the preset misses the "configuration", it is possible to explicitly select the + # configuration with the `--config` flag, e.g.: + # run: cmake --build --preset ninja-vcpkg --config Release + - name: Build (Release configuration) + run: | + cmake --build --preset ninja-vcpkg-release + + # Test the whole project with CTest, again Release configuration only. + - name: Test (Release configuration) + run: | + ctest --preset test-release diff --git a/.github/workflows/properties/hosted-ninja-vcpkg_submod.properties.json b/.github/workflows/properties/hosted-ninja-vcpkg_submod.properties.json new file mode 100644 index 0000000..0c494ba --- /dev/null +++ b/.github/workflows/properties/hosted-ninja-vcpkg_submod.properties.json @@ -0,0 +1,6 @@ +{ + "name": "C++ template project with CMake, vcpkg, Ninja and with GitHub workflows", + "description": "Build C++ code with CMake, Ninja and vcpkg.", + "iconName": "cmake", + "categories": ["CMake", "cpp", "cplusplus", "vcpkg", "Ninja"] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e810c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +/vcpkg +/builds +.DS_Store +/build \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a0a57f3 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vcpkg"] + path = vcpkg + url = https://github.com/microsoft/vcpkg.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1e3c544 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,21 @@ +# CMakeLists.txt +cmake_minimum_required(VERSION 3.0) +project(cpp_template) + +# Find dependencies provided by vcpkg (via vcpkg.cmake) +find_package(unofficial-sqlite3 CONFIG REQUIRED) +find_package(fmt CONFIG REQUIRED) + +# main target +add_executable(main) +target_sources(main PRIVATE src/main.cpp) +target_link_libraries(main PRIVATE unofficial::sqlite3::sqlite3 fmt::fmt) +set_property(TARGET main PROPERTY CXX_STANDARD 20) + +# tests target +add_executable(tests) +target_sources(tests PRIVATE src/test.cpp) +target_link_libraries(tests PRIVATE unofficial::sqlite3::sqlite3 fmt::fmt) +set_property(TARGET tests PROPERTY CXX_STANDARD 20) +enable_testing() +add_test(tests tests) \ No newline at end of file diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..e971b40 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://cmake.org/cmake/help/latest/_downloads/3e2d73bff478d88a7de0de736ba5e361/schema.json", + "version": 8, + "cmakeMinimumRequired": { + "major": 3, + "minor": 21, + "patch": 0 + }, + "configurePresets": [ + { + "name": "ninja-multi-vcpkg", + "displayName": "Ninja Multi-Config", + "description": "Configure with vcpkg toolchain and generate Ninja project files for all configurations", + "binaryDir": "${sourceDir}/builds/${presetName}", + "generator": "Ninja Multi-Config", + "toolchainFile": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake" + } + ], + "buildPresets": [ + { + "name": "ninja-vcpkg-debug", + "configurePreset": "ninja-multi-vcpkg", + "displayName": "Build (Debug)", + "description": "Build with Ninja/vcpkg (Debug)", + "configuration": "Debug" + }, + { + "name": "ninja-vcpkg-release", + "configurePreset": "ninja-multi-vcpkg", + "displayName": "Build (Release)", + "description": "Build with Ninja/vcpkg (Release)", + "configuration": "Release" + }, + { + "name": "ninja-vcpkg", + "configurePreset": "ninja-multi-vcpkg", + "displayName": "Build", + "description": "Build with Ninja/vcpkg" + } + ], + "testPresets": [ + { + "name": "test-ninja-vcpkg", + "configurePreset": "ninja-multi-vcpkg", + "hidden": true + }, + { + "name": "test-debug", + "description": "Test (Debug)", + "displayName": "Test (Debug)", + "configuration": "Debug", + "inherits": [ + "test-ninja-vcpkg" + ] + }, + { + "name": "test-release", + "description": "Test (Release)", + "displayName": "Test (Release)", + "configuration": "Release", + "inherits": [ + "test-ninja-vcpkg" + ] + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a3bcd2a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021,2022,2023 Luca Cappa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8f61680 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +[![hosted-ninja-vcpkg_submod-autocache](https://github.com/lukka/CppCMakeVcpkgTemplate/actions/workflows/hosted-ninja-vcpkg_submod.yml/badge.svg)](https://github.com/lukka/CppCMakeVcpkgTemplate/actions/workflows/hosted-ninja-vcpkg_submod.yml) +[![hosted-pure-workflow](https://github.com/lukka/CppCMakeVcpkgTemplate/actions/workflows/hosted-pure-workflow.yml/badge.svg)](https://github.com/lukka/CppCMakeVcpkgTemplate/actions/workflows/hosted-pure-workflow.yml) + +# A C++ project template based on CMake and vcpkg + +## Content +This repository contains a `C++` based project template that leverages [vcpkg](https://github.com/microsoft/vcpkg) and [CMake](https://www.cmake.org)'s [CMakePresets.json](https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html) to build and test `C++` source code. + +Supports `Linux`/`macOS`/`Windows` on `x64` and `arm64` platforms. + +`vcpkg` is driven to use its [binary caching](https://learn.microsoft.com/en-us/vcpkg/users/binarycaching) feature storing the content in the GitHub Action cache, hence speeding up workflows by reusing previously built packages. + +## Key features: + - `CMakePresets.json` allows to run the same build either _locally on your IDE_ and on _GitHub runners_. + - `vcpkg` greatly helps in pulling and building the needed dependencies (e.g. libraries) which are cached for reuse on GitHub Action cache. + +## GitHub Action workflows + +The repository provides also two GitHub workflows to build the project on [GitHub runners](https://github.com/actions/runner). Both builds and tests the project using `vcpkg` and `CMake`, the only key difference is their implementation: + + - [hosted-pure-workflow.yml](.github/workflows/hosted-pure-workflow.yml): it is a __pure__ workflow which does not use unneeded GitHub Actions that cannot run locally on your development machine. On the other hand it is directly using the `CMake`, `Ninja`, `vcpkg` and the `C++ build` tools. +- [hosted-ninja-vcpkg_submod.yml](.github/workflows/hosted-ninja-vcpkg_submod.yml): it is a concise workflow based on the custom GitHub Actions [get-cmake](https://github.com/lukka/get-cmake), [run-vcpkg](https://github.com/lukka/run-vcpkg) and [run-cmake](https://github.com/lukka/run-cmake) which simplify and shorten the workflow verbosity while adding some goodies like vcpkg binary caching stored on GH's cache and inline error annotations. + +## Rationale + +The main idea of this `C++` project template is to show how to obtain a _perfectly reproducible_ software development process that can be run anywhere without any difference and no surprises, either locally using your preferred tools/IDE, either remotely on build agents typically used for continuous integration. + +## Integrated Development Environment (IDE) Support + +The major `C++` IDEs should already support `CMakePresets.json` and require no particular configuration. + +For example [Visual Studio Code](https://code.visualstudio.com/) with the [CMake Tools extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) let you to open the root folder of this repository, and select in the status bar the CMake preset (e.g. `ninja-multi-vcpkg`), as show in the following image: + +![CMake's preset selection in the status bar of Visual Studio Code](./img/vscode_cmakepresets_selection.png) + +
+ +# License + +All the content in this repository is licensed under the [MIT License](LICENSE.txt). + +Copyright © 2021-2022-2023 Luca Cappa diff --git a/img/vscode_cmakepresets_selection.png b/img/vscode_cmakepresets_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee0cb78ef9619dd5309befb2ad834c85ba6cc22 GIT binary patch literal 51309 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 +#include +#include + +// main function! +int main() +{ + fmt::print("Hello, world!\n"); + printf("%s\n", sqlite3_libversion()); + return 0; +} \ No newline at end of file diff --git a/src/test.cpp b/src/test.cpp new file mode 100644 index 0000000..0982216 --- /dev/null +++ b/src/test.cpp @@ -0,0 +1,12 @@ +// test.cpp +#include +#include +#include + +// main function! +int main() +{ + fmt::print("test!\n"); + printf("%s\n", sqlite3_libversion()); + return 0; +} \ No newline at end of file diff --git a/vcpkg b/vcpkg new file mode 160000 index 0000000..8eb5735 --- /dev/null +++ b/vcpkg @@ -0,0 +1 @@ +Subproject commit 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50 diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..5aab79d --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,9 @@ +{ + "name": "main", + "version-string": "latest", + "dependencies": [ + "fmt", + "boost-config", + "sqlite3" + ] +} \ No newline at end of file