chore: formatting #895
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CMake Build Matrix | |
on: | |
pull_request: | |
branches: | |
- develop | |
paths-ignore: | |
- '**/README.md' | |
- '**.example' | |
push: | |
branches: | |
- develop | |
paths-ignore: | |
- '**/README.md' | |
- '**.example' | |
env: | |
CMAKE_VERSION: 3.17.5 | |
NINJA_VERSION: 1.9.0 | |
# BUILD_TYPE: Release | |
# CCACHE_VERSION: 3.7.7 | |
jobs: | |
build: | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
max-parallel: 1 | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
name: "Ubuntu Latest GCC", | |
os: ubuntu-latest, | |
cc: "gcc", cxx: "g++" | |
} | |
# - { | |
# name: "macOS Latest Clang", | |
# os: macos-latest, | |
# cc: "clang", cxx: "clang++" | |
# } | |
# - { | |
# name: "Windows Latest MinGW", | |
# os: windows-latest, | |
# cc: "gcc", cxx: "g++" | |
# } | |
# TODO: "Windows Latest MSVC" is not working yet | |
# - { | |
# name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz", | |
# os: windows-latest, | |
# cc: "cl", cxx: "cl", | |
# environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat" | |
# } | |
steps: | |
- uses: actions/checkout@v1 | |
- name: Download Ninja and CMake | |
id: cmake_and_ninja | |
shell: cmake -P {0} | |
run: | | |
set(cmake_version $ENV{CMAKE_VERSION}) | |
set(ninja_version $ENV{NINJA_VERSION}) | |
message(STATUS "Using host CMake version: ${CMAKE_VERSION}") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(ninja_suffix "win.zip") | |
set(cmake_suffix "win64-x64.zip") | |
set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") | |
elseif ("${{ runner.os }}" STREQUAL "Linux") | |
set(ninja_suffix "linux.zip") | |
set(cmake_suffix "Linux-x86_64.tar.gz") | |
set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") | |
elseif ("${{ runner.os }}" STREQUAL "macOS") | |
set(ninja_suffix "mac.zip") | |
set(cmake_suffix "Darwin-x86_64.tar.gz") | |
set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") | |
endif() | |
set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") | |
file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) | |
set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") | |
file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) | |
# Save the path for other steps | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) | |
message("::set-output name=cmake_dir::${cmake_dir}") | |
if (NOT "${{ runner.os }}" STREQUAL "Windows") | |
execute_process( | |
COMMAND chmod +x ninja | |
COMMAND chmod +x ${cmake_dir}/cmake | |
) | |
endif() | |
# - name: Download ccache | |
# id: ccache | |
# shell: cmake -P {0} | |
# run: | | |
# set(ccache_url "https://github.com/cristianadam/ccache/releases/download/v$ENV{CCACHE_VERSION}/${{ runner.os }}.tar.xz") | |
# file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) | |
# execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ccache.tar.xz) | |
# | |
# - name: Prepare ccache timestamp | |
# id: ccache_cache_timestamp | |
# shell: cmake -P {0} | |
# run: | | |
# string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) | |
# message("::set-output name=timestamp::${current_date}") | |
# | |
# - name: Ccache cache files | |
# uses: actions/[email protected] | |
# with: | |
# path: .ccache | |
# key: ${{ matrix.config.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }} | |
# restore-keys: | | |
# ${{ matrix.config.name }}-ccache- | |
- name: Install OpenSSL | |
shell: cmake -P {0} | |
run: | | |
message(STATUS "Using host CMake version: ${cmake_version}") | |
if ("${{ runner.os }}" STREQUAL "macOS") | |
execute_process( | |
COMMAND brew reinstall [email protected] | |
) | |
elseif ("${{ runner.os }}" STREQUAL "Windows") | |
execute_process( | |
COMMAND vcpkg install openssl:x64-windows | |
) | |
endif() | |
- name: Install SWIG | |
shell: cmake -P {0} | |
run: | | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
# execute_process( | |
# COMMAND (New-Object System.Net.WebClient).DownloadFile("http://prdownloads.sourceforge.net/swig/swigwin-4.0.2.zip","swigwin-4.0.2.zip") | |
# ) | |
# execute_process( | |
# COMMAND Expand-Archive .\swigwin-4.0.2.zip . | |
# ) | |
# execute_process( | |
# COMMAND echo "$((Get-Item .).FullName)/swigwin-4.0.2" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
# ) | |
elseif ("${{ runner.os }}" STREQUAL "Linux") | |
execute_process( | |
COMMAND sudo apt-get install -y swig | |
) | |
elseif ("${{ runner.os }}" STREQUAL "macOS") | |
execute_process( | |
COMMAND brew install swig | |
) | |
endif() | |
- name: Install node-gyp | |
shell: cmake -P {0} | |
run: | | |
execute_process( | |
COMMAND npm install -g node-gyp | |
) | |
- name: Configure 1 | |
shell: cmake -P {0} | |
run: | | |
set(ENV{CC} ${{ matrix.config.cc }}) | |
set(ENV{CXX} ${{ matrix.config.cxx }}) | |
if ("${{ runner.os }}" STREQUAL "macOS") | |
set(ENV{OPENSSL_ROOT_DIR} "/usr/local/Cellar/openssl") | |
elseif ("${{ runner.os }}" STREQUAL "Windows") | |
set(ENV{OPENSSL_ROOT_DIR} "C:/vcpkg/installed/x64-windows-static") | |
# set(ENV{CMAKE_TOOLCHAIN_FILE} "C:/vcpkg/scripts/buildsystems/vcpkg.cmake") | |
endif() | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
execute_process( | |
COMMAND "${{ matrix.config.environment_script }}" && set | |
OUTPUT_FILE environment_script_output.txt | |
) | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
if ("$ENV{GITHUB_EVENT_NAME}" STREQUAL "push") | |
set(ENV{CMAKE_BUILD_TYPE} "Release") | |
set(ENV{DOTNET_BUILD_CONFIGURATION} "Release") | |
set(ENV{NODE_GYP_BUILD_MODE} "release") | |
else() | |
set(ENV{CMAKE_BUILD_TYPE} "Debug") | |
set(ENV{DOTNET_BUILD_CONFIGURATION} "Debug") | |
set(ENV{NODE_GYP_BUILD_MODE} "debug") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-DBUILD_TEST_BUILD=OFF | |
-DBUILD_TEST_UNIT=OFF | |
-S test | |
-B test/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-S example | |
-B example/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux") | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-DBUILD_PYTHON=ON | |
-DBUILD_JAVA=ON | |
-DBUILD_CSHARP=ON | |
# -DBUILD_GO=ON | |
# -DBUILD_JAVASCRIPT=ON | |
-DBUILD_TEST=ON | |
-S binding | |
-B binding/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-D DOTNET_BUILD_CONFIGURATION=$ENV{DOTNET_BUILD_CONFIGURATION} | |
-D NODE_GYP_BUILD_MODE=$ENV{NODE_GYP_BUILD_MODE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-S performance | |
-B performance/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-S app | |
-B app/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
- name: Build 1 | |
shell: cmake -P {0} | |
run: | | |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
# file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) | |
# set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") | |
# set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") | |
# set(ENV{CCACHE_COMPRESS} "true") | |
# set(ENV{CCACHE_COMPRESSLEVEL} "6") | |
# set(ENV{CCACHE_MAXSIZE} "400M") | |
# if ("${{ matrix.config.cxx }}" STREQUAL "cl") | |
# set(ENV{CCACHE_MAXSIZE} "600M") | |
# endif() | |
# | |
# execute_process(COMMAND ccache -p) | |
# execute_process(COMMAND ccache -z) | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build example/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND rm -rf example/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build performance/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND rm -rf performance/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build app/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND rm -rf app/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build test/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND rm -rf test/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
# execute_process(COMMAND ccache -s) | |
- name: Configure 2 | |
shell: cmake -P {0} | |
run: | | |
set(ENV{CC} ${{ matrix.config.cc }}) | |
set(ENV{CXX} ${{ matrix.config.cxx }}) | |
if ("${{ runner.os }}" STREQUAL "macOS") | |
set(ENV{OPENSSL_ROOT_DIR} "/usr/local/Cellar/openssl") | |
elseif ("${{ runner.os }}" STREQUAL "Windows") | |
set(ENV{OPENSSL_ROOT_DIR} "C:/vcpkg/installed/x64-windows-static") | |
# set(ENV{CMAKE_TOOLCHAIN_FILE} "C:/vcpkg/scripts/buildsystems/vcpkg.cmake") | |
endif() | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
execute_process( | |
COMMAND "${{ matrix.config.environment_script }}" && set | |
OUTPUT_FILE environment_script_output.txt | |
) | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
if ("$ENV{GITHUB_EVENT_NAME}" STREQUAL "push") | |
set(ENV{CMAKE_BUILD_TYPE} "Release") | |
set(ENV{DOTNET_BUILD_CONFIGURATION} "Release") | |
set(ENV{NODE_GYP_BUILD_MODE} "release") | |
else() | |
set(ENV{CMAKE_BUILD_TYPE} "Debug") | |
set(ENV{DOTNET_BUILD_CONFIGURATION} "Debug") | |
set(ENV{NODE_GYP_BUILD_MODE} "debug") | |
endif() | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | |
-DBUILD_TEST_BUILD=OFF | |
-DBUILD_TEST_UNIT=ON | |
-S test | |
-B test/build | |
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=ninja | |
# -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
# -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
- name: Build 2 | |
shell: cmake -P {0} | |
run: | | |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
# file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) | |
# set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") | |
# set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") | |
# set(ENV{CCACHE_COMPRESS} "true") | |
# set(ENV{CCACHE_COMPRESSLEVEL} "6") | |
# set(ENV{CCACHE_MAXSIZE} "400M") | |
# if ("${{ matrix.config.cxx }}" STREQUAL "cl") | |
# set(ENV{CCACHE_MAXSIZE} "600M") | |
# endif() | |
# | |
# execute_process(COMMAND ccache -p) | |
# execute_process(COMMAND ccache -z) | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build test/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
# execute_process(COMMAND ccache -s) | |
- name: Test | |
shell: cmake -P {0} | |
run: | | |
execute_process( | |
COMMAND ctest -VV | |
WORKING_DIRECTORY test/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
execute_process( | |
COMMAND rm -rf test/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
- name: Build non-C++ | |
shell: cmake -P {0} | |
run: | | |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux") | |
execute_process( | |
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build binding/build -j 2 | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
endif() | |
- name: Test non-C++ | |
shell: cmake -P {0} | |
run: | | |
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux") | |
execute_process( | |
COMMAND ctest -VV | |
WORKING_DIRECTORY binding/build | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
endif() |