From 609a9ba51c0423c804be0cc275a27a505945a758 Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Sat, 8 Jan 2022 22:43:03 +0200 Subject: [PATCH] LWJGL CI configuration --- .github/workflows/android.yml | 67 ------ .../check_clang_format_and_codespell.yml | 37 ---- .github/workflows/lwjgl.yml | 197 ++++++++++++++++++ .github/workflows/msvc-build-preset.yml | 64 ------ .github/workflows/windows-matrix.yml | 84 -------- src/CMakeLists.txt | 2 +- 6 files changed, 198 insertions(+), 253 deletions(-) delete mode 100644 .github/workflows/android.yml delete mode 100644 .github/workflows/check_clang_format_and_codespell.yml create mode 100644 .github/workflows/lwjgl.yml delete mode 100644 .github/workflows/msvc-build-preset.yml delete mode 100644 .github/workflows/windows-matrix.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml deleted file mode 100644 index 0311d03..0000000 --- a/.github/workflows/android.yml +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2021-2023, Collabora, Ltd. -# SPDX-License-Identifier: CC0-1.0 - -name: Android -on: - workflow_call: - inputs: - release: - description: "Is this a release to publish?" - type: boolean - default: false - snapshot: - description: "Is this a snapshot to publish?" - type: boolean - default: false - debug: - type: boolean - description: "Should we make a debug configured build?" - default: true - -jobs: - # Loader - loader: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Get modern CMake and Ninja - uses: "lukka/get-cmake@v3.30.1" - - # Do this before building aar since it affects the version - - name: Touch SNAPSHOT marker file - if: "!inputs.release" - run: "touch SNAPSHOT" - - - name: "Build AAR" - run: "./maintainer-scripts/build-aar.sh" - - - name: Upload bare AAR - uses: "actions/upload-artifact@v3" - with: - name: AAR and POM - path: openxr_loader_for_android* - - # Hello XR - build-helloxr: - runs-on: ubuntu-latest - steps: - - uses: "actions/checkout@v4" - - name: "Get modern CMake and Ninja" - uses: "lukka/get-cmake@v3.30.1" - - name: "set up JDK 11" - uses: "actions/setup-java@v4" - with: - java-version: "11" - distribution: "temurin" - - uses: "gradle/actions/setup-gradle@v4" - - # HelloXR OpenGLES version - - name: Build HelloXR OpenGLES for Android - run: "cd src/tests/hello_xr && ./gradlew assembleOpenGLES${{ inputs.release && 'Release' || 'Debug' }}" - - - name: Upload HelloXR OpenGLES (debug) for Android - if: "!inputs.release" - uses: "actions/upload-artifact@v3" - with: - name: HelloXR OpenGLES Android - path: "src/tests/hello_xr/build/outputs/apk/OpenGLES/debug/*.apk" diff --git a/.github/workflows/check_clang_format_and_codespell.yml b/.github/workflows/check_clang_format_and_codespell.yml deleted file mode 100644 index c40e5bf..0000000 --- a/.github/workflows/check_clang_format_and_codespell.yml +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) 2019-2024, The Khronos Group Inc. -# SPDX-License-Identifier: Apache-2.0 - -name: Check code formatting and spelling - -on: - workflow_call: - -jobs: - clang-format: - runs-on: ubuntu-latest - container: - image: khronosgroup/docker-images:openxr.20240805@sha256:05e900737234daf09d29a1c525a017ea8cc54a0d1f808569488e9ae6018053f2 - - steps: - - uses: actions/checkout@v4 - with: - lfs: true - - - run: ./runClangFormat.sh - name: Run clang-format - - - run: git diff --patch --exit-code > clang-format.patch - name: Save changes as diff - - # In case of failure (clang-format changes needed) do these two things - - run: echo "The following files need clang-formatting:"; sed -n -e "s/^diff.* b\///p" ${{ runner.temp }}/clang-format.patch - if: ${{ failure() }} - - name: Publish diff - if: ${{ failure() }} - uses: actions/upload-artifact@v3 - with: - path: ${{ runner.temp }}/clang-format.patch - name: clang-format-changes - - - name: Run Codespell script - run: ./checkCodespell diff --git a/.github/workflows/lwjgl.yml b/.github/workflows/lwjgl.yml new file mode 100644 index 0000000..a9255c9 --- /dev/null +++ b/.github/workflows/lwjgl.yml @@ -0,0 +1,197 @@ +name: LWJGL Build + +on: + workflow_dispatch: + push: + branches: + - main + +env: + AWS_DEFAULT_REGION: us-east-1 + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + S3_PARAMS: --cache-control "public,must-revalidate,proxy-revalidate,max-age=0" + OPENXR_PARAMS: -DDYNAMIC_LOADER=ON -DBUILD_WITH_STD_FILESYSTEM=OFF + +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + container: + image: centos:7 + strategy: + fail-fast: false + matrix: + ARCH: [x64] + include: + - ARCH: x64 + defaults: + run: + shell: bash + env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + steps: + - name: Upgrade git + run: | + sed -i \ + -e 's/^mirrorlist/#mirrorlist/' \ + -e 's/^#baseurl/baseurl/' \ + -e 's/mirror\.centos\.org/vault.centos.org/' \ + /etc/yum.repos.d/*.repo + yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm + yum -y install git + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Configure yum + run: | + yum -y install epel-release + yum -y update + - name: Install build dependencies + run: | + yum -y install centos-release-scl + sed -i \ + -e 's/^mirrorlist/#mirrorlist/' \ + -e 's/^#baseurl/baseurl/' \ + -e 's/^# baseurl/baseurl/' \ + -e 's/mirror\.centos\.org/vault.centos.org/' \ + /etc/yum.repos.d/CentOS-SCLo-scl*.repo + yum -y install devtoolset-11-gcc-c++ + yum -y install cmake3 awscli + - name: Install OpenXR-SDK dependencies + run: yum -y install libX11-devel libxcb-devel wayland-devel mesa-libGL-devel vulkan-devel + - name: Configure build + run: | + source scl_source enable devtoolset-11 || true + cmake3 -B build $OPENXR_PARAMS -DCMAKE_BUILD_TYPE=Release + - name: Build + run: | + source scl_source enable devtoolset-11 || true + cmake3 --build build --parallel + strip build/src/loader/libopenxr_loader.so + - name: Upload artifact + run: aws s3 cp build/src/loader/libopenxr_loader.so s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ ${{env.S3_PARAMS}} + - name: Upload git revision + run: | + git config --global --add safe.directory $PWD + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libopenxr_loader.so.git + aws s3 cp libopenxr_loader.so.git s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ ${{env.S3_PARAMS}} + + linux-cross: + name: Linux Cross + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + ARCH: [arm32, arm64, ppc64le, riscv64] + include: + - ARCH: arm32 + CROSS_ARCH: armhf + TRIPLET: arm-linux-gnueabihf + - ARCH: arm64 + CROSS_ARCH: arm64 + TRIPLET: aarch64-linux-gnu + - ARCH: ppc64le + CROSS_ARCH: ppc64el + TRIPLET: powerpc64le-linux-gnu + - ARCH: riscv64 + CROSS_ARCH: riscv64 + TRIPLET: riscv64-linux-gnu + env: + LWJGL_ARCH: ${{matrix.ARCH}} + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 3 + - name: Install dependencies + run: | + DEBIAN_FRONTEND=noninteractive sudo apt-get -yq update + DEBIAN_FRONTEND=noninteractive sudo apt-get -yq install awscli cmake gcc-${{matrix.TRIPLET}} g++-${{matrix.TRIPLET}} libc6-dev-${{matrix.CROSS_ARCH}}-cross + - name: Prepare cross-compilation for ${{matrix.CROSS_ARCH}} + run: | + sudo sed -i 's/deb mirror/deb [arch=amd64,i386] mirror/' /etc/apt/sources.list + sudo grep "mirror+file" /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list + sudo sed -i 's/amd64,i386/${{matrix.CROSS_ARCH}}/' /etc/apt/sources.list.d/ports.list + sudo sed -i 's#mirror+file:/etc/apt/apt-mirrors.txt#http://ports.ubuntu.com/ubuntu-ports/#' /etc/apt/sources.list.d/ports.list + sudo dpkg --add-architecture ${{matrix.CROSS_ARCH}} + sudo apt-get update || true + - name: Install cross-compilation dependencies + run: DEBIAN_FRONTEND=noninteractive sudo apt-get -yq --allow-unauthenticated --no-install-suggests --no-install-recommends install libgl1-mesa-dev:${{matrix.CROSS_ARCH}} libvulkan-dev:${{matrix.CROSS_ARCH}} libx11-xcb-dev:${{matrix.CROSS_ARCH}} libxcb-dri2-0-dev:${{matrix.CROSS_ARCH}} libxcb-glx0-dev:${{matrix.CROSS_ARCH}} libxcb-icccm4-dev:${{matrix.CROSS_ARCH}} libxcb-keysyms1-dev:${{matrix.CROSS_ARCH}} libxcb-randr0-dev:${{matrix.CROSS_ARCH}} libxrandr-dev:${{matrix.CROSS_ARCH}} libxxf86vm-dev:${{matrix.CROSS_ARCH}} mesa-common-dev:${{matrix.CROSS_ARCH}} libwayland-dev:${{matrix.CROSS_ARCH}} -o Dpkg::Options::="--force-overwrite" + - name: Configure build + run: PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/lib/${{matrix.TRIPLET}}/pkgconfig CC=${{matrix.TRIPLET}}-gcc CXX=${{matrix.TRIPLET}}-g++ cmake -B build $OPENXR_PARAMS -DCMAKE_BUILD_TYPE=Release + - name: Build + run: | + cmake --build build --parallel + ${{matrix.TRIPLET}}-strip build/src/loader/libopenxr_loader.so + - name: Upload artifact + run: aws s3 cp build/src/loader/libopenxr_loader.so s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ ${{env.S3_PARAMS}} + - name: Upload git revision + run: | + git config --global --add safe.directory $(pwd) + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libopenxr_loader.so.git + aws s3 cp libopenxr_loader.so.git s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ ${{env.S3_PARAMS}} + + freebsd-cross: + name: FreeBSD Cross + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 3 + - name: Build + uses: cross-platform-actions/action@v0.24.0 + with: + operating_system: freebsd + architecture: x86-64 + version: '13.2' + memory: 4G + shell: bash + environment_variables: OPENXR_PARAMS + run: | + sudo pkg install -y cmake libX11 libxcb wayland mesa-libs vulkan-headers + cmake -B build $OPENXR_PARAMS -DCMAKE_BUILD_TYPE=Release + cmake --build build + strip build/src/loader/libopenxr_loader.so + - name: Upload artifact # Symlinks are not copied out of the VM. These SOs are versioned. + run: aws s3 cp `ls build/src/loader/libopenxr_loader.so*` s3://lwjgl-build/nightly/freebsd/x64/libopenxr_loader.so ${{env.S3_PARAMS}} + - name: Upload git revision + run: | + git config --global --add safe.directory $PWD + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libopenxr_loader.so.git + aws s3 cp libopenxr_loader.so.git s3://lwjgl-build/nightly/freebsd/x64/ ${{env.S3_PARAMS}} + + windows: + name: Windows + runs-on: windows-2022 + strategy: + matrix: + ARCH: [x86, x64, arm64] + include: + - ARCH: x86 + PLATFORM: Win32 + - ARCH: x64 + PLATFORM: x64 + - ARCH: arm64 + PLATFORM: ARM64 + defaults: + run: + shell: cmd + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 3 + - name: Configure build + run: cmake -B build -G "Visual Studio 17 2022" -T ClangCL -A ${{matrix.PLATFORM}} %OPENXR_PARAMS% + - name: Build + run: cmake --build build --parallel --config Release --parallel + - name: Upload artifact + run: aws s3 cp build\src\loader\Release\openxr_loader.dll s3://lwjgl-build/nightly/windows/${{matrix.ARCH}}/openxr-loader.dll ${{env.S3_PARAMS}} + - name: Upload git revision + run: | + git log --first-parent --pretty=format:%%H HEAD~2..HEAD~1 > revision.git + aws s3 cp revision.git s3://lwjgl-build/nightly/windows/${{matrix.ARCH}}/openxr-loader.dll.git ${{env.S3_PARAMS}} diff --git a/.github/workflows/msvc-build-preset.yml b/.github/workflows/msvc-build-preset.yml deleted file mode 100644 index d967013..0000000 --- a/.github/workflows/msvc-build-preset.yml +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2021-2023, Collabora, Ltd. -# SPDX-License-Identifier: CC0-1.0 - -on: - workflow_call: - inputs: - preset: - description: "CMake build preset" - type: string - required: true - buildType: - description: "Build configuration" - type: string - required: true - default: RelWithDebInfo - artifactName: - description: "Artifact name to upload to." - type: string - required: false - subdir: - description: "Subdir of the workspace to upload as an artifact." - type: string - default: install - -jobs: - msvc-build: - runs-on: windows-latest - env: - VULKAN_SDK_VERSION: "1.1.114.0" - INSTALL_DIR: "${{ github.workspace }}/install" - steps: - - uses: actions/checkout@v4 - with: - lfs: true - - - name: Get modern CMake and Ninja - uses: lukka/get-cmake@v3.30.1 - - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v2 - - - name: Install Vulkan SDK - run: ./.github/scripts/install_vulkan.ps1 - if: "${{ !contains( inputs.preset, 'uwp') }}" - working-directory: "${{ github.workspace }}" - shell: pwsh - - - name: Generate build system - shell: pwsh - run: | - Copy-Item .github/scripts/CMakePresets.json . - cmake --fresh --preset ${{ inputs.preset }} -S . -B $env:RUNNER_TEMP - - name: Build - run: "cmake --build $env:RUNNER_TEMP --parallel --clean-first --config ${{ inputs.buildType }}" - - - name: Install - run: "cmake --build $env:RUNNER_TEMP --parallel --config ${{ inputs.buildType }} --target install" - - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - if: inputs.artifactName - with: - name: "${{ inputs.artifactName }}" - path: "${{ github.workspace }}/${{ inputs.subdir }}" diff --git a/.github/workflows/windows-matrix.yml b/.github/workflows/windows-matrix.yml deleted file mode 100644 index 3ed1b77..0000000 --- a/.github/workflows/windows-matrix.yml +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2021-2023, Collabora, Ltd. -# SPDX-License-Identifier: CC0-1.0 - -name: Windows builds -on: - workflow_call: - inputs: - organizeAndRelease: - description: "Should we organize and release our artifacts?" - type: boolean - default: false - workflow_dispatch: - -jobs: - # generate_matrix: - # runs-on: ubuntu-latest - # outputs: - # matrix: "${{ steps.set-matrix.outputs.matrix }}" - # steps: - # - uses: "actions/checkout@v4" - # - id: set-matrix - # run: "python3 .github/scripts/generate_windows_matrix_build.py matrix" - msvc-build: - # needs: generate_matrix - strategy: - fail-fast: true - # TODO: Fix matrix generation? Broke recently due to changes in github actions - # matrix: "${{fromJson(needs.generate_matrix.outputs.matrix)}}" - matrix: - preset: - - win32 - - x64 - - win32_uwp - - x64_uwp - - arm64_uwp - - arm_uwp - - uses: "./.github/workflows/msvc-build-preset.yml" - with: - preset: "${{ matrix.preset }}" - artifactName: "loader_${{ matrix.preset }}" - buildType: "RelWithDebInfo" - - organize-and-release-artifacts: - if: inputs.organizeAndRelease - needs: - - msvc-build - runs-on: ubuntu-latest - steps: - - uses: "actions/checkout@v4" - - - name: Retrieve artifacts - uses: "actions/download-artifact@v3" - with: - path: artifacts - - - name: Organize artifacts - run: 'python .github/scripts/organize_windows_artifacts.py "${{ github.workspace }}" "${{ github.workspace }}/openxr_loader"' - - - name: Upload combined artifact - uses: "actions/upload-artifact@v3" - with: - name: openxr_loader_windows - path: "${{ github.workspace }}/openxr_loader" - - # NuGet stuff now - - - name: Setup NuGet - uses: "NuGet/setup-nuget@a21f25cd3998bf370fde17e3f1b4c12c175172f9" - with: - nuget-version: "5.x" - - - name: Stage loader and headers for NuGet - shell: pwsh - run: '${{ github.workspace }}/.azure-pipelines/nuget/stage_nuget.ps1 "${{ github.workspace }}/openxr_loader" "${{ github.workspace }}/specification/Makefile" "${{ github.workspace }}/openxr_loader_staging"' - - - name: Pack NuGet package - run: 'nuget pack "${{ github.workspace }}/openxr_loader_staging/OpenXR.Loader.nuspec" -OutputDirectory "${{ github.workspace }}/nuget"' - - - name: Upload NuGet artifact - uses: "actions/upload-artifact@v3" - with: - name: NuGet - path: "${{ github.workspace }}/nuget" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 94674ce..31c6f17 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -180,7 +180,7 @@ cmake_dependent_option( if(WIN32) add_definitions(-DXR_OS_WINDOWS) add_definitions(-DNOMINMAX) -elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") add_definitions(-DXR_OS_LINUX) elseif(ANDROID) add_definitions(-DXR_OS_ANDROID)