name: CI on: push: branches: [ master, dev, ci_testing ] pull_request: branches: [ master ] env: LLVM_RELEASE_VERSION: 14 jobs: build-msvc: runs-on: windows-latest strategy: # Don't abort runners if a single one fails fail-fast: false matrix: build_type: [ Release, Debug ] defaults: run: shell: cmd steps: - uses: actions/checkout@v3 - name: CMake run: | cmake -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} cmake --build build --config ${{ matrix.build_type }} - name: Compile and run some examples run: | cd resources ..\build\${{ matrix.build_type }}\c3c.exe compile-run examples\hello_world_many.c3 ..\build\${{ matrix.build_type }}\c3c.exe compile-run examples\fannkuch-redux.c3 ..\build\${{ matrix.build_type }}\c3c.exe compile-run examples\contextfree\boolerr.c3 - name: Build testproject run: | cd resources/testproject ..\..\build\${{ matrix.build_type }}\c3c.exe --debug-log run hello_world_win32 - name: Build testproject lib run: | cd resources/testproject ..\..\build\${{ matrix.build_type }}\c3c.exe --debug-log build hello_world_win32_lib - name: run compiler tests run: | cd test python3.exe src/tester.py ..\build\${{ matrix.build_type }}\c3c.exe test_suite/ - name: upload artifacts uses: actions/upload-artifact@v3 with: name: c3-windows-${{ matrix.build_type }} path: build\${{ matrix.build_type }}\c3c.exe build-msys2-mingw: runs-on: windows-latest strategy: # Don't abort runners if a single one fails fail-fast: false matrix: build_type: [Release, Debug] defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v3 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: git binutils mingw-w64-x86_64-ninja mingw-w64-x86_64-cmake mingw-w64-x86_64-toolchain mingw-w64-x86_64-python - shell: msys2 {0} run: | pacman --noconfirm -U https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-llvm-13.0.1-2-any.pkg.tar.zst pacman --noconfirm -U https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-lld-13.0.1-2-any.pkg.tar.zst - name: CMake run: | cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} cmake --build build - name: Compile and run some examples run: | cd resources ../build/c3c compile-run examples/hello_world_many.c3 ../build/c3c compile-run examples/fannkuch-redux.c3 ../build/c3c compile-run examples/contextfree/boolerr.c3 - name: Build testproject run: | cd resources/testproject ../../build/c3c run --debug-log - name: Build testproject lib run: | cd resources/testproject ../../build/c3c build hello_world_lib --debug-log - name: run compiler tests run: | cd test python3 src/tester.py ../build/c3c.exe test_suite/ build-msys2-clang: runs-on: windows-latest if: ${{ false }} strategy: # Don't abort runners if a single one fails fail-fast: false matrix: build_type: [Release, Debug] defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v3 - uses: msys2/setup-msys2@v2 with: msystem: CLANG64 update: false install: git binutils mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-toolchain mingw-w64-clang-x86_64-python - name: CMake run: | cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} cmake --build build - name: Compile and run some examples run: | cd resources ../build/c3c compile-run examples/hello_world_many.c3 ../build/c3c compile-run examples/fannkuch-redux.c3 ../build/c3c compile-run examples/contextfree/boolerr.c3 - name: Build testproject run: | cd resources/testproject ../../build/c3c run --debug-log - name: Build testproject lib run: | cd resources/testproject ../../build/c3c build hello_world_lib --debug-log - name: run compiler tests run: | cd test python3 src/tester.py ../build/c3c.exe test_suite/ build-linux: runs-on: ubuntu-latest strategy: # Don't abort runners if a single one fails fail-fast: false matrix: build_type: [Release, Debug] llvm_version: [13, 14, 15, 16] steps: - uses: actions/checkout@v3 - name: Install common deps run: | sudo apt-get install zlib1g zlib1g-dev python3 ninja-build - name: Install Clang ${{matrix.llvm_version}} run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - if [[ "${{matrix.llvm_version}}" < 16 ]]; then sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-${{matrix.llvm_version}} main" else sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal main" fi sudo apt-get update sudo apt-get install -y clang-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}}-dev lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev sudo apt-get install -y libmlir-${{matrix.llvm_version}} libmlir-${{matrix.llvm_version}}-dev mlir-${{matrix.llvm_version}}-tools if [[ "${{matrix.llvm_version}}" > 14 ]]; then sudo apt-get install -y bolt-${{matrix.llvm_version}} fi - name: CMake run: | cmake -B build \ -G Ninja \ -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ -DCMAKE_C_COMPILER=clang-${{matrix.llvm_version}} \ -DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm_version}} \ -DCMAKE_LINKER=lld-link-${{matrix.llvm_version}} \ -DCMAKE_OBJCOPY=llvm-objcopy-${{matrix.llvm_version}} \ -DCMAKE_STRIP=llvm-strip-${{matrix.llvm_version}} \ -DCMAKE_DLLTOOL=llvm-dlltool-${{matrix.llvm_version}} \ -DC3_LLVM_VERSION=${{matrix.llvm_version}} cmake --build build - name: Compile and run some examples run: | cd resources ../build/c3c compile-run examples/hello_world_many.c3 ../build/c3c compile-run examples/fannkuch-redux.c3 ../build/c3c compile-run examples/contextfree/boolerr.c3 - name: Build testproject run: | cd resources/testproject ../../build/c3c run --debug-log - name: Build testproject direct linker run: | cd resources/testproject ../../build/c3c run --debug-log --forcelinker - name: run compiler tests run: | cd test if [[ "${{matrix.llvm_version}}" < 15 ]]; then python3 src/tester.py ../build/c3c test_suite/ else python3 src/tester.py ../build/c3c test_suite2/ fi - name: bundle_output if: matrix.llvm_version == env.LLVM_RELEASE_VERSION run: | mkdir linux cp -r lib linux cp msvc_build_libraries.py linux cp build/c3c linux tar czf c3-linux-${{matrix.build_type}}.tar.gz linux - name: upload artifacts if: matrix.llvm_version == env.LLVM_RELEASE_VERSION uses: actions/upload-artifact@v3 with: name: c3-linux-${{matrix.build_type}} path: c3-linux-${{matrix.build_type}}.tar.gz build-mac: runs-on: macos-latest strategy: # Don't abort runners if a single one fails fail-fast: false matrix: build_type: [Release, Debug] llvm_version: [13, 14, 15] steps: - uses: actions/checkout@v3 - name: Download LLVM run: | brew update && brew install llvm@${{ matrix.llvm_version }} botan ninja echo "/usr/local/opt/llvm@${{ matrix.llvm_version }}/bin" >> $GITHUB_PATH TMP_PATH=$(xcrun --show-sdk-path)/user/include echo "CPATH=$TMP_PATH" >> $GITHUB_ENV - name: CMake run: | cmake -B build -G Ninja -DC3_LLVM_VERSION=${{matrix.llvm_version}} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} cmake --build build - name: Compile and run some examples run: | cd resources ../build/c3c compile-run examples/hello_world_many.c3 ../build/c3c compile-run examples/fannkuch-redux.c3 ../build/c3c compile-run examples/contextfree/boolerr.c3 - name: Build testproject run: | cd resources/testproject ../../build/c3c run --debug-log - name: Build testproject direct linker run: | cd resources/testproject ../../build/c3c run --debug-log --forcelinker - name: Build testproject lib run: | cd resources/testproject ../../build/c3c build hello_world_lib --debug-log - name: run compiler tests run: | cd test if [[ "${{matrix.llvm_version}}" < 15 ]]; then python3 src/tester.py ../build/c3c test_suite/ else python3 src/tester.py ../build/c3c test_suite2/ fi - name: bundle_output if: matrix.llvm_version == env.LLVM_RELEASE_VERSION run: | mkdir macos cp -r lib macos cp msvc_build_libraries.py macos cp build/c3c macos zip -r c3-macos-${{matrix.build_type}}.zip macos - name: upload artifacts if: matrix.llvm_version == env.LLVM_RELEASE_VERSION uses: actions/upload-artifact@v3 with: name: c3-macos-${{matrix.build_type}} path: c3-macos-${{matrix.build_type}}.zip release: runs-on: ubuntu-latest needs: [build-msvc, build-linux, build-mac] if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v3 - name: delete tag continue-on-error: true uses: actions/github-script@v6 with: script: | github.rest.git.deleteRef({ owner: context.repo.owner, repo: context.repo.repo, ref: 'tags/latest', sha: context.sha }) - name: create tag uses: actions/github-script@v6 with: script: | github.rest.git.createRef({ owner: context.repo.owner, repo: context.repo.repo, ref: 'refs/tags/latest', sha: context.sha }) - uses: actions/download-artifact@v3 - run: cp -r lib c3-windows-Release - run: cp -r lib c3-windows-Debug - run: cp msvc_build_libraries.py c3-windows-Release - run: cp msvc_build_libraries.py c3-windows-Debug - run: cp install_win_reqs.bat c3-windows-Release - run: cp install_win_reqs.bat c3-windows-Debug - run: zip -r c3-windows-Release.zip c3-windows-Release - run: zip -r c3-windows-Debug.zip c3-windows-Debug - id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: latest release_name: latest draft: false prerelease: true - name: upload windows uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-windows-Release.zip asset_name: c3-windows.zip asset_content_type: application/zip - name: upload windows debug uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-windows-Debug.zip asset_name: c3-windows-debug.zip asset_content_type: application/zip - name: upload linux uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-linux-Release/c3-linux-Release.tar.gz asset_name: c3-linux.tar.gz asset_content_type: application/gzip - name: upload linux debug uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-linux-Debug/c3-linux-Debug.tar.gz asset_name: c3-linux-debug.tar.gz asset_content_type: application/gzip - name: upload macos uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-macos-Release/c3-macos-Release.zip asset_name: c3-macos.zip asset_content_type: application/zip - name: upload macos debug uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: c3-macos-Debug/c3-macos-Debug.zip asset_name: c3-macos-debug.zip asset_content_type: application/zip