forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3562703
commit c68f234
Showing
1 changed file
with
307 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,307 @@ | ||
name: CMake Build Matrix | ||
|
||
on: [push, pull_request] | ||
|
||
env: | ||
CMAKE_VERSION: 3.16.4 | ||
NINJA_VERSION: 1.10.0 | ||
BUILD_TYPE: Release | ||
CCACHE_VERSION: 3.7.7 | ||
|
||
jobs: | ||
build: | ||
name: ${{ matrix.config.name }} | ||
runs-on: ${{ matrix.config.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
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" | ||
} | ||
- { | ||
name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz", | ||
os: windows-latest, | ||
cc: "gcc", cxx: "g++" | ||
} | ||
- { | ||
name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz", | ||
os: ubuntu-latest, | ||
cc: "gcc", cxx: "g++" | ||
} | ||
- { | ||
name: "macOS Latest Clang", artifact: "macOS.tar.xz", | ||
os: macos-latest, | ||
cc: "clang", cxx: "clang++" | ||
} | ||
|
||
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: Configure | ||
shell: cmake -P {0} | ||
run: | | ||
set(ENV{CC} ${{ matrix.config.cc }}) | ||
set(ENV{CXX} ${{ matrix.config.cxx }}) | ||
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}") | ||
execute_process( | ||
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake | ||
-S llvm | ||
-B build | ||
-D LLVM_ENABLE_RTTI=ON | ||
-D "LLVM_ENABLE_PROJECTS=clang;clang-tools-extra" | ||
-D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} | ||
-D LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON | ||
-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 | ||
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} "300M") | ||
if ("${{ matrix.config.cxx }}" STREQUAL "cl") | ||
set(ENV{CCACHE_MAXSIZE} "400M") | ||
endif() | ||
execute_process(COMMAND ccache -p) | ||
execute_process(COMMAND ccache -z) | ||
execute_process( | ||
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build build | ||
RESULT_VARIABLE result | ||
) | ||
if (NOT result EQUAL 0) | ||
message(FATAL_ERROR "Bad exit status") | ||
endif() | ||
execute_process(COMMAND ccache -s) | ||
- name: Run tests | ||
shell: cmake -P {0} | ||
run: | | ||
include(ProcessorCount) | ||
ProcessorCount(N) | ||
set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") | ||
execute_process( | ||
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/ctest -j ${N} | ||
WORKING_DIRECTORY build | ||
RESULT_VARIABLE result | ||
) | ||
if (NOT result EQUAL 0) | ||
message(FATAL_ERROR "Running tests failed!") | ||
endif() | ||
- name: Install Strip | ||
run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --install build --prefix instdir --strip | ||
|
||
|
||
- name: Pack | ||
working-directory: instdir | ||
run: ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake -E tar cJfv ../${{ matrix.config.artifact }} . | ||
|
||
|
||
- name: Upload | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
path: ./${{ matrix.config.artifact }} | ||
name: ${{ matrix.config.artifact }} | ||
|
||
release: | ||
if: contains(github.ref, 'tags/v') | ||
runs-on: ubuntu-latest | ||
needs: build | ||
|
||
steps: | ||
- name: Create Release | ||
id: create_release | ||
uses: actions/[email protected] | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ github.ref }} | ||
release_name: Release ${{ github.ref }} | ||
draft: false | ||
prerelease: false | ||
|
||
- name: Store Release url | ||
run: | | ||
echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url | ||
- uses: actions/upload-artifact@v1 | ||
with: | ||
path: ./upload_url | ||
name: upload_url | ||
|
||
publish: | ||
if: contains(github.ref, 'tags/v') | ||
name: ${{ matrix.config.name }} | ||
runs-on: ${{ matrix.config.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
- { | ||
name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
- { | ||
name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
- { | ||
name: "macOS Latest Clang", artifact: "macOS.tar.xz", | ||
os: ubuntu-latest | ||
} | ||
needs: release | ||
|
||
steps: | ||
- name: Download artifact | ||
uses: actions/download-artifact@v1 | ||
with: | ||
name: ${{ matrix.config.artifact }} | ||
path: ./ | ||
|
||
- name: Download URL | ||
uses: actions/download-artifact@v1 | ||
with: | ||
name: upload_url | ||
path: ./ | ||
- id: set_upload_url | ||
run: | | ||
upload_url=`cat ./upload_url` | ||
echo ::set-output name=upload_url::$upload_url | ||
- name: Upload to Release | ||
id: upload_to_release | ||
uses: actions/[email protected] | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.set_upload_url.outputs.upload_url }} | ||
asset_path: ./${{ matrix.config.artifact }} | ||
asset_name: ${{ matrix.config.artifact }} | ||
asset_content_type: application/x-gtar |