diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..fc00a5b3 --- /dev/null +++ b/.github/workflows/build.yml @@ -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 + 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 diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 00000000..38a6195c --- /dev/null +++ b/CMakePresets.json @@ -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 + } + ] +}