Skip to content
Merged
Show file tree
Hide file tree
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
79 changes: 79 additions & 0 deletions .github/workflows/build.yml
Copy link
Contributor

@kjohnsen kjohnsen Feb 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice! The biggest question I have in my mind is what compilers are being used in the configure/build steps? One of the biggest headaches in getting the project to build right is that some compilers work and others don't for no apparent reason. Clang has worked most consistently across platforms, but not every version and not every machine we've tested...a mess. Assuming we will still have these problems, I think we will need to just choose a compiler, like Clang.

We may want to merge this now to get it working before adding more, but things we will want:

  • a static vs. dynamic option in the matrix
    • dynamic mostly to test install
    • static for goal of creating pre-compiled static binaries
  • config?
    • for static, easy-install binaries probably want both Release and RelWithDebInfo.
    • for dynamic probably just debug
  • deploying static binaries somewhere (probably GitHub releases?)

Then after getting the C++ build working:

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The project uses default compilers: GCC on Linux, Clang on macOS, and MSVC on Windows, which are working fine so far. It's possible to specify Clang as the compiler for all platforms, but I'm unsure if it's necessary since the compiler is automatically selected based on the platform.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great---if default compilers are working let's just run with those

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Build and Test ldsCtrlEst

on:
push:
branches:
- master
pull_request:
workflow_dispatch:

jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]

runs-on: ${{ matrix.os }}

steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
submodules: recursive

- name: Set up dependencies for macOS and Linux
if: runner.os != 'Windows'
run: |
if [ "${{ runner.os }}" == "macOS" ]; then
brew install cmake ninja
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this step could be covered by the get-cmake action, but it's not a big enough deal to change it now

elif [ "${{ runner.os }}" == "Linux" ]; then
sudo apt-get update
sudo apt-get install -y cmake build-essential
fi

- name: Set up dependencies for Windows
if: runner.os == 'Windows'
run: |
choco install cmake

- name: Run vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgJsonGlob: 'vcpkg.json'
runVcpkgInstall: true

- name: Cache build directory
uses: actions/cache@v3
with:
path: build
key: build-${{ matrix.os }}-${{ hashFiles('CMakeLists.txt') }}
restore-keys: |
build-${{ matrix.os }}-

- name: Configure and build for macOS/Linux
if: runner.os != 'Windows'
uses: lukka/run-cmake@v10
with:
cmakeListsTxtPath: CMakeLists.txt
configurePreset: 'linux-release'
buildPreset: 'linux-release'

- name: Configure and build for Windows
if: runner.os == 'Windows'
uses: lukka/run-cmake@v10
with:
cmakeListsTxtPath: CMakeLists.txt
configurePreset: 'windows-release'
buildPreset: 'windows-release'

- name: Install and Update PATH (Windows only)
if: runner.os == 'Windows'
run: |
cd build
cmake --install .
echo "${{github.workspace}}/install/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Run tests
run: |
cd build
ctest -C Release
42 changes: 42 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 18,
"patch": 0
},
"configurePresets": [
{
"name": "linux-release",
"hidden": false,
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install"
}
},
{
"name": "windows-release",
"hidden": false,
"generator": "Visual Studio 17 2022",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install"
}
}
],
"buildPresets": [
{
"name": "linux-release",
"configurePreset": "linux-release",
"hidden": false
},
{
"name": "windows-release",
"configurePreset": "windows-release",
"hidden": false
}
]
}
Loading