blob: 80dff03395e924116efc5c735b5384ac5b778fad (
plain) (
tree)
|
|
Build Boost
===========
[![Test](https://github.com/egor-tensin/build-boost/actions/workflows/test.yml/badge.svg)](https://github.com/egor-tensin/build-boost/actions/workflows/test.yml)
[![Boost.Python](https://github.com/egor-tensin/build-boost/actions/workflows/python.yml/badge.svg)](https://github.com/egor-tensin/build-boost/actions/workflows/python.yml)
This GitHub action downloads & builds Boost libraries in your workflow run.
* Downloads a distribution of the specified Boost version and unpacks it.
* Builds the required libraries using the specified toolset.
Use it in your workflow like this:
- name: Build Boost
id: boost
uses: egor-tensin/build-boost@v1
with:
version: 1.71.0
libraries: filesystem program_options system
platform: x64
configuration: Release
- name: Show paths
run: |
printf 'Boost has been unpacked to: %s\n' '${{ steps.boost.outputs.root }}'
printf 'Libraries can be found here: %s\n' '${{ steps.boost.outputs.librarydir }}'
shell: bash
* `x64` is the default value for the `platform` parameter and can be omitted.
Use `x86` if you want to build 32-bit binaries.
* `Release` is the default value for the `configuration` parameter and can be
omitted.
Use `Debug` if you want to build debug binaries.
* Set `static` to `1` if you want to build static libraries.
* Set `static-runtime` to `1` if you want to link to the static runtime.
API
---
| Input | Value | Default | Description
| -------------- | ------------ | ------- | -----------
| version | **required** | | Boost version to build, e.g. `1.71.0`.
| libraries | **required** | | Space-separated list of libraries to build, e.g. `filesystem program_options system`.
| toolset | auto | ✓ | Use GCC on Linux and MSVC on Windows.
| | msvc | | Use MSVC. Supports different versions \[1\].
| | vs | | Visual Studio; same as "msvc". Supports different versions \[2\].
| | gcc | | Use GCC.
| | mingw | | Use MinGW-w64.
| | clang | | Use Clang.
| platform | x64 | ✓ | Build 64-bit binaries.
| | x86 | | Build 32-bit binaries.
| configuration | Release | ✓ | Build Release binaries.
| | Debug | | Build Debug binaries.
| static | *any* | ✓ | Shared libraries.
| | 1 | | Static libraries.
| static-runtime | *any* | ✓ | Link to the shared runtime.
| | 1 | | Link to the static runtime.
| directory | *empty* | ✓ | Build in `${{ runner.workspace }}/boost`.
| | *any* | | Build in a custom directory.
1. Toolset "msvc" can have an optional version suffix: msvc140, msvc141,
msvc142, msvc143.
2. Toolset "vs" can have an optional version suffix: vs2015, vs2017, vs2019,
vs2022.
| Output | Example | CMake input | Description
| ---------- | -------------------------------------- | ---------------- | -----------
| root | D:\a\project\boost | BOOST_ROOT | Root Boost directory.
| librarydir | D:\a\project\boost\stage\x64\Debug\lib | BOOST_LIBRARYDIR | Directory that contains the built libraries.
Use the `librarydir` output to locate the built libraries.
You can pass it to CMake using the `BOOST_LIBRARYDIR` parameter:
> cmake -D "BOOST_ROOT=${{ steps.boost.outputs.root }}" \
-D "BOOST_LIBRARYDIR=${{ steps.boost.outputs.librarydir }}" \
...
Caching
-------
Cache the Boost distribution archive by using the `actions/cache` action.
For example, for Boost version 1.72.0:
- name: Cache Boost
uses: actions/cache@v2
with:
path: '${{ runner.workspace }}/boost_*.tar.gz'
key: 'boost-1.72.0'
- name: Build Boost
# This won't re-download the archive unnecessarily:
uses: egor-tensin/build-boost@v1
with:
version: 1.72.0
...
Boost.Python
------------
See an [example CMakeLists.txt file] for how to link to Boost.Python libraries
using CMake.
[example CMakeLists.txt file]: examples/python/CMakeLists.txt
Notes
-----
* This action uses my other project [cmake-common] to actually download and
build Boost.
* [cmake-common] sees *a lot* more testing than this action, while this action
delegates almost everything to it.
* You can use my other actions [setup-gcc], [setup-mingw], [setup-clang] to set
up different toolsets targetting both x86 and x64.
[cmake-common]: https://github.com/egor-tensin/cmake-common
[setup-gcc]: https://github.com/egor-tensin/setup-gcc
[setup-mingw]: https://github.com/egor-tensin/setup-mingw
[setup-clang]: https://github.com/egor-tensin/setup-clang
License
-------
Distributed under the MIT License.
See [LICENSE.txt] for details.
[LICENSE.txt]: LICENSE.txt
|