diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index eb90492f38..0000000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: MDL Benchmark - -on: - push: - branches: [master] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - pull_request: - branches: [master] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: [Windows, self-hosted] - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - name: Common setup - uses: ./.github/actions/common-setup - with: - os: windows - compiler: cl - platform: x86_64 - config: release - build-llvm: true - - name: Build Slang - run: | - cmake --preset default --fresh -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM -DCMAKE_COMPILE_WARNING_AS_ERROR=false - cmake --workflow --preset release - - uses: actions/checkout@v3 - with: - repository: 'shader-slang/MDL-SDK' - path: 'external/MDL-SDK' - - name: Run benchmark - run: | - cd tools/benchmark - cp ../../external/MDL-SDK/examples/mdl_sdk/dxr/content/slangified/*.slang . - pip install prettytable argparse - python compile.py --samples 1 --target dxil diff --git a/.github/workflows/check-formatting.yml b/.github/workflows/check-formatting.yml new file mode 100644 index 0000000000..99b8ff84ef --- /dev/null +++ b/.github/workflows/check-formatting.yml @@ -0,0 +1,14 @@ +name: Check Formatting + +on: + push: + branches: [master] + pull_request: + branches: [master] +jobs: + check-formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip3 install gersemi + - run: ./extras/formatting.sh --check-only diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 3c32db8c68..0000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,180 +0,0 @@ -name: CI - -on: - push: - branches: [master] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - pull_request: - branches: [master] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true -jobs: - build: - strategy: - matrix: - os: [linux, macos, windows] - config: [debug, release] - compiler: [gcc, clang, cl] - platform: [x86_64, aarch64, wasm] - exclude: - # Default to x64, but aarch64 on osx - - { os: linux, platform: aarch64 } - - { os: windows, platform: aarch64 } - - { os: macos, platform: x86_64 } - - { os: linux, config: debug, platform: wasm } - - { os: windows, platform: wasm } - - { os: macos, platform: wasm } - # Unused compiler configs - - { os: linux, compiler: clang } - - { os: linux, compiler: cl } - - { os: windows, compiler: gcc } - - { os: windows, compiler: clang } - - { os: macos, compiler: gcc } - - { os: macos, compiler: cl } - include: - - { os: linux, runs-on: ubuntu-20.04 } - - { os: macos, runs-on: macos-latest } - - { os: windows, runs-on: windows-latest } - # Warnings are treated as errors by default. - # But we may want to disable it temporarily. - - { os: linux, warnings-as-errors: true } - - { os: macos, warnings-as-errors: true } - - { os: windows, warnings-as-errors: true } - # Set a test category depending on the config, smoke by default, - # quick or full conditionally otherwise - - test-category: smoke - - { os: windows, test-category: quick } - - { config: release, test-category: full } - # default not full gpu tests - - full-gpu-tests: false - # The runners don't have a GPU by default except for the self-hosted ones - - has-gpu: false - # Self-hosted aarch64 build - - os: linux - config: release - compiler: gcc - platform: aarch64 - test-category: smoke - full-gpu-tests: false - runs-on: [self-hosted, Linux, ARM64] - has-gpu: true - # Self-hosted full gpu build - - os: windows - config: release - compiler: cl - platform: x86_64 - test-category: full - full-gpu-tests: true - runs-on: [Windows, self-hosted] - has-gpu: true - fail-fast: false - runs-on: ${{ matrix.runs-on }} - - defaults: - run: - shell: bash - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: ${{ matrix.platform != 'wasm' }} - - name: Build Slang - run: | - if [[ "${{ matrix.platform }}" = "wasm" ]]; then - git clone https://github.com/emscripten-core/emsdk.git - pushd emsdk - ./emsdk install latest - ./emsdk activate latest - source ./emsdk_env.sh - popd - cmake --workflow --preset generators --fresh - mkdir generators - cmake --install build --prefix generators --component generators - emcmake cmake -DSLANG_GENERATORS_PATH=generators/bin --preset emscripten -G "Ninja" -DSLANG_SLANG_LLVM_FLAVOR=DISABLE - cmake --build --preset emscripten --target slang - [ -f "build.em/Release/lib/libslang.a" ] - [ -f "build.em/Release/lib/libcompiler-core.a" ] - [ -f "build.em/Release/lib/libcore.a" ] - else - if [[ "${{ matrix.os }}" =~ "windows" && "${{ matrix.config }}" != "release" ]]; then - # Doing a debug build will try to link against a release built llvm, this - # is a problem on Windows, so make slang-llvm in release build and use - # that as though it's a fetched binary via these presets. - cmake --workflow --preset slang-llvm - # Configure, pointing to our just-generated slang-llvm archive - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=FETCH_BINARY \ - "-DSLANG_SLANG_LLVM_BINARY_URL=$(pwd)/build/dist-release/slang-llvm.zip" \ - "-DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}}" - cmake --workflow --preset "${{matrix.config}}" - else - # Otherwise, use the system llvm we have just build or got from the - # cache in the setup phase - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} - cmake --workflow --preset "${{matrix.config}}" - fi - fi - - name: Test Slang - if: ${{ matrix.platform != 'wasm' }} - run: | - export SLANG_RUN_SPIRV_VALIDATION=1 - export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 - if [[ "${{matrix.full-gpu-tests}}" == "true" ]]; then - "$bin_dir/slang-test" \ - -use-test-server \ - -server-count 8 \ - -category ${{ matrix.test-category }} \ - -api all-cpu - elif [[ "${{matrix.has-gpu}}" == "true" ]]; then - "$bin_dir/slang-test" \ - -use-test-server \ - -category ${{ matrix.test-category }} \ - -api all-dx12 \ - -expected-failure-list tests/expected-failure-github.txt - else - "$bin_dir/slang-test" \ - -use-test-server \ - -category ${{ matrix.test-category }} \ - -api all-dx12 \ - -expected-failure-list tests/expected-failure-github.txt \ - -expected-failure-list tests/expected-failure-record-replay-tests.txt - fi - - name: Test Slang via glsl - if: ${{ matrix.full-gpu-tests && matrix.platform != 'wasm' }} - run: | - export SLANG_RUN_SPIRV_VALIDATION=1 - export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 - "$bin_dir/slang-test" \ - -use-test-server \ - -server-count 8 \ - -category ${{ matrix.test-category }} \ - -emit-spirv-via-glsl \ - -api vk \ - -expected-failure-list tests/expected-failure.txt - - uses: actions/upload-artifact@v3 - if: ${{ ! matrix.full-gpu-tests }} - with: - name: slang-build-${{matrix.os}}-${{matrix.platform}}-${{matrix.compiler}}-${{matrix.config}} - # The install directory used in the packaging step - path: build/dist-${{matrix.config}}/**/ZIP/slang/* diff --git a/.github/workflows/compile-regression-test.yml b/.github/workflows/compile-regression-test.yml deleted file mode 100644 index f1809ea719..0000000000 --- a/.github/workflows/compile-regression-test.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Compile Regression-Test - -on: - push: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - pull_request: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true -jobs: - build: - timeout-minutes: 100 - continue-on-error: true - strategy: - fail-fast: false - matrix: - os: [windows] - config: [release] - compiler: [cl] - platform: [x86_64] - include: - # Self-hosted falcor tests - - warnings-as-errors: true - test-category: full - full-gpu-tests: false - runs-on: [Windows, self-hosted, regression-test] - runs-on: ${{ matrix.runs-on }} - defaults: - run: - shell: bash - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: true - - name: Build Slang - run: | - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} \ - -DSLANG_ENABLE_CUDA=1 - cmake --workflow --preset "${{matrix.config}}" - - name: Run compile and validation test - run: | - cp -r /c/slang_compile_test_suite_a . - cd slang_compile_test_suite_a - export SLANGC_PATH="$bin_dir/slangc.exe" - bash ./compile_all_slang.sh diff --git a/.github/workflows/dockerfiles/ubuntu-18.04-x64/Dockerfile b/.github/workflows/dockerfiles/ubuntu-18.04-x64/Dockerfile deleted file mode 100644 index bbdfe10843..0000000000 --- a/.github/workflows/dockerfiles/ubuntu-18.04-x64/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM ubuntu:18.04 -RUN apt update -RUN apt install -y software-properties-common wget git build-essential zip libx11-dev zlib1g-dev -RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y -RUN apt update -RUN apt install -y gcc-9 g++-9 -RUN update-alternatives \ - --install /usr/bin/gcc gcc /usr/bin/gcc-9 100 \ - --slave /usr/bin/g++ g++ /usr/bin/g++-9 \ - --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-9 \ - --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-9 \ - --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-9 \ - --slave /usr/bin/gcov gcov /usr/bin/gcov-9 \ - --slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-9 \ - --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-9 diff --git a/.github/workflows/ensure-pr-label.yml b/.github/workflows/ensure-pr-label.yml deleted file mode 100644 index 8db5b6057d..0000000000 --- a/.github/workflows/ensure-pr-label.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Verify PR Labels -on: - pull_request: - types: [opened, labeled, unlabeled, synchronize] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -jobs: - label: - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - steps: - - uses: mheap/github-action-required-labels@v5 - with: - mode: exactly - count: 1 - labels: | - pr: non-breaking - pr: breaking change \ No newline at end of file diff --git a/.github/workflows/falcor-compiler-perf-test.yml b/.github/workflows/falcor-compiler-perf-test.yml deleted file mode 100644 index d329642d9a..0000000000 --- a/.github/workflows/falcor-compiler-perf-test.yml +++ /dev/null @@ -1,102 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Falcor Compiler Perf-Test - -on: - push: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - pull_request: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true -jobs: - build: - timeout-minutes: 100 - continue-on-error: true - strategy: - fail-fast: false - matrix: - os: [windows] - config: [release] - compiler: [cl] - platform: [x86_64] - include: - # Self-hosted falcor tests - - warnings-as-errors: true - test-category: full - full-gpu-tests: false - runs-on: [Windows, self-hosted, perf] - runs-on: ${{ matrix.runs-on }} - defaults: - run: - shell: bash - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: true - - - name: Build Slang - run: | - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} \ - -DSLANG_ENABLE_CUDA=1 - cmake --workflow --preset "${{matrix.config}}" - - - uses: robinraju/release-downloader@v1.9 - id: download - with: - # The source repository path. - # Expected format {owner}/{repo} - # Default: ${{ github.repository }} - repository: "shader-slang/falcor-compile-perf-test" - - # A flag to set the download target as latest release - # The default value is 'false' - latest: true - - # The name of the file to download. - # Use this field only to specify filenames other than tarball or zipball, if any. - # Supports wildcard pattern (eg: '*', '*.deb', '*.zip' etc..) - fileName: "falcor_perf_test-*-win-64.zip" - - # Download the attached zipball (*.zip) - zipBall: true - - # Relative path under $GITHUB_WORKSPACE to place the downloaded file(s) - # It will create the target directory automatically if not present - # eg: out-file-path: "my-downloads" => It will create directory $GITHUB_WORKSPACE/my-downloads - out-file-path: "./falcor-perf-test" - - # Somehow there is a bug in this flag, the executable extracted is not runnable. We have to - # extract ourselves. - extract: false - - - name: run falcor-compiler-perf-test - shell: pwsh - run: | - $filename = '${{ fromJson(steps.download.outputs.downloaded_files)[0] }}' - Expand-Archive $filename -DestinationPath .\falcor-perf-test - $env:PATH += ";.\build\${{matrix.config}}\bin"; - .\falcor-perf-test\bin\Release\falcor_perftest.exe diff --git a/.github/workflows/falcor-test.yml b/.github/workflows/falcor-test.yml deleted file mode 100644 index bb5faeddc6..0000000000 --- a/.github/workflows/falcor-test.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Falcor Tests - -on: - push: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - pull_request: - branches: [ master ] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true -jobs: - build: - timeout-minutes: 100 - continue-on-error: true - strategy: - fail-fast: false - matrix: - os: [windows] - config: [release] - compiler: [cl] - platform: [x86_64] - include: - # Self-hosted falcor tests - - warnings-as-errors: true - test-category: full - full-gpu-tests: false - runs-on: [Windows, self-hosted, falcor] - runs-on: ${{ matrix.runs-on }} - defaults: - run: - shell: bash - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: true - - name: setup-falcor - shell: pwsh - run: | - mkdir FalcorBin - cd FalcorBin - Copy-Item -Path 'C:\Falcor\build\windows-vs2022\bin' -Destination '.\build\windows-vs2022\bin' -Recurse -Exclude ("*.pdb") - Copy-Item -Path 'C:\Falcor\tests' -Destination '.\' -Recurse - Copy-Item -Path 'C:\Falcor\tools' -Destination '.\' -Recurse - Copy-Item -Path 'C:\Falcor\media' -Destination '.\' -Recurse - Copy-Item -Path 'C:\Falcor\media_internal' -Destination '.\' -Recurse - Copy-Item -Path 'C:\Falcor\scripts' -Destination '.\' -Recurse - cd ..\ - - name: Build Slang - run: | - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} \ - -DSLANG_ENABLE_CUDA=1 \ - -DSLANG_ENABLE_EXAMPLES=0 \ - -DSLANG_ENABLE_GFX=0 \ - -DSLANG_ENABLE_TESTS=0 - cmake --workflow --preset "${{matrix.config}}" - - name: Copy Slang to Falcor - run: | - cp --verbose --recursive --target-directory ./FalcorBin/build/windows-vs2022/bin/Release build/Release/bin/* - - name: falcor-unit-test - shell: pwsh - run: | - $ErrorActionPreference = "SilentlyContinue" - cd .\FalcorBin\tests - python ./testing/run_unit_tests.py --config windows-vs2022-Release -t "-slow" - cd ../../ - - name: falcor-image-test - shell: pwsh - run: | - $ErrorActionPreference = "SilentlyContinue" - cd .\FalcorBin\tests - python ./testing/run_image_tests.py --config windows-vs2022-Release --run-only - cd ../../ diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000000..309fcbff26 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,53 @@ +name: Format +on: + repository_dispatch: + types: [format-command] + workflow_dispatch: +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.SLANGBOT_PAT }} + repository: ${{ github.event.client_payload.pull_request.head.repo.full_name }} + ref: ${{ github.event.client_payload.pull_request.head.ref }} + + - run: pip3 install gersemi + + - name: install clang-format + run: | + tmpdir=$(mktemp -d) + curl -L -H "Authorization: token ${{ secrets.SLANGBOT_PAT }}" \ + -o "$tmpdir/clang-format" \ + https://github.com/shader-slang/slang-binaries/raw/4e88845ec51641b4c92e68027e359090bdb219e0/clang-format/x86_64-linux/bin/clang-format + chmod +x "$tmpdir/clang-format" + echo "$tmpdir" >> $GITHUB_PATH + + - run: ./extras/formatting.sh + + - run: | + git config gpg.format ssh + git config user.signingkey ~/.ssh/examplekey.pub + + - name: Configure Git commit signing + run: | + echo "${{ secrets.SLANGBOT_SIGNING_KEY }}" > "${{runner.temp}}"/signing_key + chmod 600 "${{runner.temp}}"/signing_key + git config commit.gpgsign true + git config gpg.format ssh + git config user.signingkey "${{runner.temp}}"/signing_key + + - uses: EndBug/add-and-commit@v9 + with: + fetch: false + message: "format code" + push: true + + - name: Add reaction + uses: peter-evans/create-or-update-comment@v4 + with: + token: ${{ secrets.SLANGBOT_PAT }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + reactions: hooray diff --git a/.github/workflows/push-benchmark-results.yml b/.github/workflows/push-benchmark-results.yml deleted file mode 100644 index 6eab768167..0000000000 --- a/.github/workflows/push-benchmark-results.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Push MDL Benchmark Results - -on: - push: - branches: [master] - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - runs-on: [Windows, benchmark, self-hosted] - steps: - - uses: actions/checkout@v3 - with: - submodules: 'true' - fetch-depth: '0' - - name: Common setup - uses: ./.github/actions/common-setup - with: - os: windows - compiler: cl - platform: x86_64 - config: release - build-llvm: true - - name: Build Slang - run: | - cmake --preset default --fresh -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM -DCMAKE_COMPILE_WARNING_AS_ERROR=false - cmake --workflow --preset release - - uses: actions/checkout@v3 - with: - repository: 'shader-slang/MDL-SDK' - path: 'external/MDL-SDK' - - name: Run benchmark - run: | - cd tools/benchmark - cp ../../external/MDL-SDK/examples/mdl_sdk/dxr/content/slangified/*.slang . - pip install prettytable argparse - python compile.py --samples 16 --target dxil - - uses: actions/checkout@v3 - with: - repository: 'shader-slang/slang-material-modules-benchmark' - path: 'external/slang-material-modules-benchmark' - token: ${{ secrets.SLANG_MDL_BENCHMARK_RESULTS_PAT }} - - name: Push results - run: | - cp tools/benchmark/benchmarks.json external\slang-material-modules-benchmark - echo $(Invoke-Expression "git log -1 --pretty=%s") > external\slang-material-modules-benchmark\commit - echo $(Invoke-Expression "git log -1 --pretty=%H") > external\slang-material-modules-benchmark\commit-hash - echo $(Invoke-Expression "git log -1 --pretty=%s") > external\slang-material-modules-benchmark\current - echo $(Invoke-Expression "git log -1 --pretty=%H") >> external\slang-material-modules-benchmark\current - cd external\slang-material-modules-benchmark - ls - git add benchmarks.json current - git commit -m "$(cat commit)" -m "https://github.com/shader-slang/slang/commit/$(cat commit-hash)" - git log - git push diff --git a/.github/workflows/release-linux-glibc-2-17.yml b/.github/workflows/release-linux-glibc-2-17.yml deleted file mode 100644 index d147f38e1a..0000000000 --- a/.github/workflows/release-linux-glibc-2-17.yml +++ /dev/null @@ -1,61 +0,0 @@ -on: - push: - tags: - - 'v*' - -name: centos7-gcc9 Release -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - # build the binary in docker image - - name: Run the build process with Docker - uses: addnab/docker-run-action@v3 - with: - image: slangdeveloper/centos7-gcc9:cmake - options: -v ${{ github.workspace }}:/home/app -v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt - run: | - export PATH=$PATH:/cmake-3.30.0-linux-x86_64/bin/ - - source /opt/rh/devtoolset-9/enable - - cd /home/app - git config --global --add safe.directory /home/app - cmake --preset default --fresh -DSLANG_SLANG_LLVM_FLAVOR=DISABLE -DSLANG_EMBED_STDLIB=1 - cmake --build --preset release - cpack --preset release -G ZIP - cpack --preset release -G TGZ - - - name: Package Slang - id: package - run: | - triggering_ref=${{ github.ref_name }} - version=${triggering_ref#v} - base=$(pwd)/slang-${version}-linux-x86_64-glibc-2.17 - - sudo mv "$(pwd)/build/dist-release/slang.zip" "${base}.zip" - echo "SLANG_BINARY_ARCHIVE_ZIP=${base}.zip" >> "$GITHUB_OUTPUT" - - sudo mv "$(pwd)/build/dist-release/slang.tar.gz" "${base}.tar.gz" - echo "SLANG_BINARY_ARCHIVE_TAR=${base}.tar.gz" >> "$GITHUB_OUTPUT" - - - name: File check - run: | - find "build/dist-release" -print0 ! -iname '*.md' ! -iname '*.h' -type f | xargs -0 file - - - name: UploadBinary - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/v') - with: - draft: contains(github.ref, 'draft') - prerelease: contains(github.ref, 'draft') - files: | - ${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_ZIP }} - ${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_TAR }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 6681837b9c..0000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,214 +0,0 @@ -name: Release - -on: - push: - # Also run on pushes to the main branch so that we can keep the llvm and sccache - # caches filled in a scope available to everyone - branches: - - master - paths-ignore: - - 'docs/**' - - 'LICENCE' - - 'CONTRIBUTION.md' - - 'README.md' - tags: - - 'v*' - -jobs: - release: - strategy: - matrix: - os: [linux, macos, windows] - config: [release] - platform: [x86_64, aarch64] - test-category: [smoke] - include: - - {os: linux, runs-on: ubuntu-20.04, compiler: gcc} - - {os: windows, runs-on: windows-latest, compiler: cl} - - {os: macos, runs-on: macos-latest, compiler: clang} - - - {build-slang-llvm: false} - - {os: linux, platform: x86_64, build-slang-llvm: true} - - {os: windows, platform: x86_64, build-slang-llvm: true} - - {os: macos, platform: aarch64, build-slang-llvm: true} - fail-fast: false - runs-on: ${{ matrix.runs-on }} - container: ${{ matrix.image || '' }} - - defaults: - run: - shell: bash - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - fetch-depth: '0' - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: ${{matrix.build-slang-llvm}} - - - name: Build slang generators - run: | - cmake --workflow --preset generators --fresh - mkdir build-platform-generators - cmake --install build --config Release --component generators --prefix build-platform-generators - - - name: Change dev tools to host arch (windows) - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{matrix.platform == 'aarch64' && 'amd64_arm64' || 'amd64'}} - sdk: "10.0.19041.0" - - - name: Change dev tools to host arch (linux and macos) - run: | - if [[ "${{matrix.os}}" == linux* && "${{matrix.platform}}" == "aarch64" && "$(uname -m)" != "aarch64" ]]; then - export CC=aarch64-linux-gnu-gcc - export CXX=aarch64-linux-gnu-g++ - fi - CMAKE_OSX_ARCHITECTURES="${{matrix.platform}}" - CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES//aarch64/arm64} - - echo "CC=$CC" >> "$GITHUB_ENV" - echo "CXX=$CXX" >> "$GITHUB_ENV" - echo "CMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES" >> "$GITHUB_ENV" - - - name: Build Slang - run: | - if [[ "${{ matrix.os }}" == "windows" && "${{ matrix.config }}" != "release" ]]; then - echo "Please see ci.yml for the steps to make debug builds work on Windows" >&2 - exit 1 - fi - - cmake --preset default --fresh \ - -DSLANG_GENERATORS_PATH=build-platform-generators/bin \ - -DSLANG_ENABLE_EXAMPLES=OFF \ - -DSLANG_EMBED_STDLIB=ON \ - "-DSLANG_SLANG_LLVM_FLAVOR=$( - [[ "${{matrix.build-slang-llvm}}" = "true" ]] && echo "USE_SYSTEM_LLVM" || echo "DISABLE")" - - cmake --build --preset "${{matrix.config}}" - - - name: Sign and notarize binaries - if: matrix.os == 'macos' && startsWith(github.ref, 'refs/tags/v') - id: notarize - env: - BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} - P12_PASSWORD: ${{ secrets.P12_PASSWORD }} - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - IDENTITY_ID: d6ada82a113e4204aaad914e1013e9548ffd30d0 - AC_PASSWORD: ${{secrets.APPLE_ID_PASSWORD}} - AC_PROVIDER: ${{secrets.APPLE_ID_PPOVIDER}} - AC_USERNAME: ${{secrets.APPLE_ID_USERNAME}} - run: | - brew install Bearer/tap/gon - security find-identity -v - brew install coreutils - - # create variables - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - # import certificate and provisioning profile from secrets - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output "$CERTIFICATE_PATH" - - # create temporary keychain - security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" - security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - - # import certificate to keychain - security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" - security list-keychain -d user -s "$KEYCHAIN_PATH" - - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "${KEYCHAIN_PASSWORD}" "$KEYCHAIN_PATH" - - binaries=( - "${lib_dir}/libslang.dylib" - "${lib_dir}/libslang-rt.dylib" - "${lib_dir}/libslang-glslang.dylib" - "${lib_dir}/libslang-llvm.dylib" - "${lib_dir}/libgfx.dylib" - "${bin_dir}/slangd" - "${bin_dir}/slangc" - ) - for b in "${binaries[@]}"; do - if [[ -f "$b" ]]; then - echo "Signing binary '$b'..." - /usr/bin/codesign --force --options runtime -s "${IDENTITY_ID}" "$b" -v - 7z a "slang-macos-dist.zip" "$b" - fi - done - - timeout 1000 gon ./extras/macos-notarize.json - cp slang-macos-dist.zip "slang-macos-dist-${{matrix.platform}}.zip" - echo "SLANG_NOTARIZED_DIST=slang-macos-dist-${{matrix.platform}}.zip" >> "$GITHUB_OUTPUT" - - - name: Package Slang - id: package - run: | - # For the release, also generate a tar.gz file - cpack --preset "$config" -G ZIP - cpack --preset "$config" -G TGZ - triggering_ref=${{ github.ref_name }} - base=slang-${triggering_ref#v}-${{matrix.os}}-${{matrix.platform}} - mv "$(pwd)/build/dist-${config}/slang.zip" "${base}.zip" - echo "SLANG_BINARY_ARCHIVE_ZIP=${base}.zip" >> "$GITHUB_OUTPUT" - mv "$(pwd)/build/dist-${config}/slang.tar.gz" "${base}.tar.gz" - echo "SLANG_BINARY_ARCHIVE_TAR=${base}.tar.gz" >> "$GITHUB_OUTPUT" - - # For some reason, the binaries packed by cpack for macos is modified - # by cpack and considered damanged by macos. For now we workaround this - # by repacking all the binaries into the release package. - if [[ "${{ matrix.os }}" == "macos" ]]; then - mkdir ./ttmp - unzip "${base}.zip" -d ./ttmp - - /bin/cp -rf build/Release/bin/* ./ttmp/bin/ - /bin/cp -rf build/Release/lib/* ./ttmp/lib/ - rm ${base}.zip - rm ${base}.tar.gz - cd ./ttmp - 7z a ../${base}.zip . - tar -czvf ../${base}.tar.gz . - cd ../ - fi - - name: File check - run: | - find "build/dist-$config" -print0 ! -iname '*.md' ! -iname '*.h' -type f | xargs -0 file - - - name: UploadBinary - uses: softprops/action-gh-release@v1 - if: startsWith(github.ref, 'refs/tags/v') - with: - draft: contains(github.ref, 'draft') - prerelease: contains(github.ref, 'draft') - files: | - ${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_ZIP }} - ${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_TAR }} - ${{ steps.notarize.outputs.SLANG_NOTARIZED_DIST }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Checkout stdlib reference - if: matrix.os == 'windows' && matrix.platform == 'x86_64' - uses: actions/checkout@v3 - with: - repository: shader-slang/stdlib-reference - path: docs/stdlib-reference/ - token: ${{ secrets.UPDATE_STDLIB_REFERENCE_PAT }} - - name: Update stdlib reference - if: matrix.os == 'windows' && matrix.platform == 'x86_64' - shell: powershell - run: | - cd docs/ - ls - & ".\build_reference.ps1" - env: - GITHUB_TOKEN: ${{ secrets.UPDATE_STDLIB_REFERENCE_PAT }} - diff --git a/.github/workflows/slash-command-dispatch.yml b/.github/workflows/slash-command-dispatch.yml new file mode 100644 index 0000000000..fc357f89ea --- /dev/null +++ b/.github/workflows/slash-command-dispatch.yml @@ -0,0 +1,32 @@ +name: Slash Command Dispatch +on: + issue_comment: + types: [created] +jobs: + slashCommandDispatch: + runs-on: ubuntu-latest + steps: + + - name: Slash Command Dispatch + id: scd + uses: peter-evans/slash-command-dispatch@v4 + with: + token: ${{ secrets.SLANGBOT_PAT }} + reaction-token: ${{ secrets.SLANGBOT_PAT }} + config: > + [ + { + "command": "format", + "permission": "none", + "issue_type": "pull-request" + } + ] + + - name: Edit comment with error message + if: steps.scd.outputs.error-message + uses: peter-evans/create-or-update-comment@v4 + with: + token: ${{ secrets.SLANGBOT_PAT }} + comment-id: ${{ github.event.comment.id }} + body: | + > ${{ steps.scd.outputs.error-message }} diff --git a/.github/workflows/vk-gl-cts-nightly.yml b/.github/workflows/vk-gl-cts-nightly.yml deleted file mode 100644 index 3697e17ab5..0000000000 --- a/.github/workflows/vk-gl-cts-nightly.yml +++ /dev/null @@ -1,112 +0,0 @@ -name: VK-GL-CTS Nightly - -on: - schedule: - - cron: '00 07 * * *' -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true -env: - DISABLE_CTS_SLANG: 0 - ACTIONS_RUNNER_DEBUG: true - ACTIONS_STEP_DEBUG: true -jobs: - build: - strategy: - matrix: - include: - # Self-hosted falcor tests - - os: windows - compiler: cl - platform: x86_64 - config: release - warnings-as-errors: true - test-category: full - full-gpu-tests: false - runs-on: [Windows, self-hosted] - runs-on: ${{ matrix.runs-on }} - timeout-minutes: 180 - defaults: - run: - shell: bash - steps: - - uses: actions/checkout@v4 - with: - submodules: 'true' - fetch-depth: '0' - - name: Setup - uses: ./.github/actions/common-setup - with: - os: ${{matrix.os}} - compiler: ${{matrix.compiler}} - platform: ${{matrix.platform}} - config: ${{matrix.config}} - build-llvm: true - - name: Build Slang - run: | - cmake --preset default --fresh \ - -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ - -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} \ - -DSLANG_ENABLE_CUDA=1 \ - -DSLANG_ENABLE_EXAMPLES=0 \ - -DSLANG_ENABLE_GFX=1 \ - -DSLANG_ENABLE_TESTS=1 - cmake --workflow --preset "${{matrix.config}}" - - uses: robinraju/release-downloader@v1.7 - with: - latest: true - repository: "shader-slang/VK-GL-CTS" - fileName: "VK-GL-CTS_WithSlang-0.0.3-win64.zip" - - uses: actions/checkout@v4 - with: - repository: "shader-slang/VK-GL-CTS" - sparse-checkout: | - test-lists/slang-passing-tests.txt - test-lists/slang-waiver-tests.xml - path: test-lists - sparse-checkout-cone-mode: false - - name: vkcts setup - shell: pwsh - run: | - Expand-Archive VK-GL-CTS_WithSlang-0.0.3-win64.zip - - copy ${{ github.workspace }}\build\Release\bin\slang.dll ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang.dll - copy ${{ github.workspace }}\build\Release\bin\slang-glslang.dll ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang-glslang.dll - copy ${{ github.workspace }}\build\Release\bin\test-server.exe ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\test-server.exe - - copy ${{ github.workspace }}\test-lists\test-lists\slang-passing-tests.txt ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang-passing-tests.txt - copy ${{ github.workspace }}\test-lists\test-lists\slang-waiver-tests.xml ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang-waiver-tests.xml - - - name: vkcts run - shell: pwsh - working-directory: ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64 - run: | - .\deqp-vk.exe --deqp-archive-dir=${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64 --deqp-caselist-file=${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang-passing-tests.txt --deqp-waiver-file=${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64\slang-waiver-tests.xml - - - name: Dump TestResults.qpa if failed - shell: pwsh - if: ${{ !success() }} - working-directory: ${{ github.workspace }}\VK-GL-CTS_WithSlang-0.0.3-win64\VK-GL-CTS_WithSlang-0.0.3-win64 - run: Get-Content TestResults.qpa -Tail 1000 - - name: success notification - id: slack-notify-success - if: ${{ success() }} - uses: slackapi/slack-github-action@v1.26.0 - with: - payload: | - { - "CTS-Nightly": ":green-check-mark: CTS nightly status: ${{ job.status }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - - name: failure notification - id: slack-notify-failure - if : ${{ !success() }} - uses: slackapi/slack-github-action@v1.26.0 - with: - payload: | - { - "CTS-Nightly": ":alert: :alert: :alert: :alert: :alert: :alert:\nCTS nightly status: ${{ job.status }}: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 94d0147e6f..9fab6679e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,13 @@ cmake_minimum_required(VERSION 3.22) # from git describe list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") include(GitVersion) -get_git_version(SLANG_VERSION_NUMERIC SLANG_VERSION_FULL "${CMAKE_CURRENT_LIST_DIR}") +get_git_version( + SLANG_VERSION_NUMERIC + SLANG_VERSION_FULL + "${CMAKE_CURRENT_LIST_DIR}" +) + +message(WARNING "This is a badly formatted change") # # Our project @@ -83,7 +89,11 @@ auto_option( Aftermath "Enable Aftermath in GFX, and add aftermath crash example to project" ) -advanced_option(SLANG_ENABLE_DX_ON_VK "Use dxvk and vkd3d-proton for DirectX support" OFF) +advanced_option( + SLANG_ENABLE_DX_ON_VK + "Use dxvk and vkd3d-proton for DirectX support" + OFF +) advanced_option(SLANG_ENABLE_SLANG_RHI "Use slang-rhi as dependency" ON) option(SLANG_EMBED_STDLIB_SOURCE "Embed stdlib source in the binary" ON) @@ -98,31 +108,62 @@ option(SLANG_ENABLE_GFX "Enable gfx targets" ON) option(SLANG_ENABLE_SLANGD "Enable language server target" ON) option(SLANG_ENABLE_SLANGC "Enable standalone compiler target" ON) option(SLANG_ENABLE_SLANGRT "Enable runtime target" ON) -option(SLANG_ENABLE_SLANG_GLSLANG "Enable glslang dependency and slang-glslang wrapper target" ON) -option(SLANG_ENABLE_TESTS "Enable test targets, some tests may require SLANG_ENABLE_GFX, SLANG_ENABLE_SLANGD or SLANG_ENABLE_SLANGRT" ON) -option(SLANG_ENABLE_EXAMPLES "Enable example targets, requires SLANG_ENABLE_GFX" ON) +option( + SLANG_ENABLE_SLANG_GLSLANG + "Enable glslang dependency and slang-glslang wrapper target" + ON +) +option( + SLANG_ENABLE_TESTS + "Enable test targets, some tests may require SLANG_ENABLE_GFX, SLANG_ENABLE_SLANGD or SLANG_ENABLE_SLANGRT" + ON +) +option( + SLANG_ENABLE_EXAMPLES + "Enable example targets, requires SLANG_ENABLE_GFX" + ON +) option(SLANG_ENABLE_REPLAYER "Enable slang-replay tool" ON) -option(SLANG_GITHUB_TOKEN "Use a given token value for accessing Github REST API" "") +option( + SLANG_GITHUB_TOKEN + "Use a given token value for accessing Github REST API" + "" +) advanced_option(SLANG_USE_SYSTEM_MINIZ "Build using system Miniz library" OFF) advanced_option(SLANG_USE_SYSTEM_LZ4 "Build using system LZ4 library" OFF) -advanced_option(SLANG_USE_SYSTEM_VULKAN_HEADERS "Build using system Vulkan headers" OFF) -advanced_option(SLANG_USE_SYSTEM_SPIRV_HEADERS "Build using system SPIR-V headers" OFF) -advanced_option(SLANG_USE_SYSTEM_UNORDERED_DENSE "Build using system unordered dense" OFF) +advanced_option( + SLANG_USE_SYSTEM_VULKAN_HEADERS + "Build using system Vulkan headers" + OFF +) +advanced_option( + SLANG_USE_SYSTEM_SPIRV_HEADERS + "Build using system SPIR-V headers" + OFF +) +advanced_option( + SLANG_USE_SYSTEM_UNORDERED_DENSE + "Build using system unordered dense" + OFF +) -option(SLANG_SPIRV_HEADERS_INCLUDE_DIR "Provide a specific path for the SPIR-V headers and grammar files") +option( + SLANG_SPIRV_HEADERS_INCLUDE_DIR + "Provide a specific path for the SPIR-V headers and grammar files" +) mark_as_advanced(SLANG_SPIRV_HEADERS_INCLUDE_DIR) -if (${SLANG_USE_SYSTEM_LZ4}) +if(${SLANG_USE_SYSTEM_LZ4}) add_compile_definitions(SLANG_USE_SYSTEM_LZ4_HEADER) endif() -if (${SLANG_USE_SYSTEM_SPIRV_HEADERS}) +if(${SLANG_USE_SYSTEM_SPIRV_HEADERS}) add_compile_definitions(SLANG_USE_SYSTEM_SPIRV_HEADER) endif() -if (${SLANG_USE_SYSTEM_UNORDERED_DENSE}) +if(${SLANG_USE_SYSTEM_UNORDERED_DENSE}) add_compile_definitions(SLANG_USE_SYSTEM_UNORDERED_DENSE_HEADER) endif() @@ -166,9 +207,15 @@ if(SLANG_SLANG_LLVM_FLAVOR MATCHES FETCH_BINARY) get_best_slang_binary_release_url("${SLANG_GITHUB_TOKEN}" url) if(NOT DEFINED url) if(SLANG_SLANG_LLVM_FLAVOR STREQUAL FETCH_BINARY_IF_POSSIBLE) - message(WARNING "Unable to find a prebuilt binary for slang-llvm, Slang will be built without LLVM support. Please consider setting SLANG_SLANG_LLVM_BINARY_URL manually") + message( + WARNING + "Unable to find a prebuilt binary for slang-llvm, Slang will be built without LLVM support. Please consider setting SLANG_SLANG_LLVM_BINARY_URL manually" + ) else() - message(FATAL_ERROR "Unable to find binary release for slang-llvm, please set a different SLANG_SLANG_LLVM_FLAVOR or set SLANG_SLANG_LLVM_BINARY_URL manually") + message( + FATAL_ERROR + "Unable to find binary release for slang-llvm, please set a different SLANG_SLANG_LLVM_FLAVOR or set SLANG_SLANG_LLVM_BINARY_URL manually" + ) endif() endif() endif() @@ -180,21 +227,23 @@ if(SLANG_SLANG_LLVM_FLAVOR MATCHES FETCH_BINARY) endif() set(webgpu_dawn_release_tag "webgpu_dawn-0") -if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND - CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") - set( - SLANG_WEBGPU_DAWN_BINARY_URL - "https://github.com/shader-slang/dawn/releases/download/${webgpu_dawn_release_tag}/webgpu_dawn-windows-x64.zip" - ) +if( + CMAKE_SYSTEM_NAME MATCHES "Windows" + AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64" +) + set(SLANG_WEBGPU_DAWN_BINARY_URL + "https://github.com/shader-slang/dawn/releases/download/${webgpu_dawn_release_tag}/webgpu_dawn-windows-x64.zip" + ) endif() set(slang_tint_release_tag "slang-tint-0") -if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND - CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") - set( - SLANG_SLANG_TINT_BINARY_URL - "https://github.com/shader-slang/dawn/releases/download/${slang_tint_release_tag}/slang-tint-windows-x64.zip" - ) +if( + CMAKE_SYSTEM_NAME MATCHES "Windows" + AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64" +) + set(SLANG_SLANG_TINT_BINARY_URL + "https://github.com/shader-slang/dawn/releases/download/${slang_tint_release_tag}/slang-tint-windows-x64.zip" + ) endif() # @@ -230,7 +279,7 @@ endif() find_package(Threads REQUIRED) -if (${SLANG_USE_SYSTEM_UNORDERED_DENSE}) +if(${SLANG_USE_SYSTEM_UNORDERED_DENSE}) find_package(unordered_dense CONFIG QUIET) endif() @@ -273,20 +322,13 @@ add_subdirectory(examples) set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) set(CPACK_STRIP_FILES FALSE) -install(FILES - "${slang_SOURCE_DIR}/README.md" - "${slang_SOURCE_DIR}/LICENSE" - DESTINATION . - COMPONENT metadata - EXCLUDE_FROM_ALL -) -install(DIRECTORY - "${slang_SOURCE_DIR}/docs/" - DESTINATION share/doc/slang -) -install(DIRECTORY - "${slang_SOURCE_DIR}/include" - DESTINATION . +install( + FILES "${slang_SOURCE_DIR}/README.md" "${slang_SOURCE_DIR}/LICENSE" + DESTINATION . + COMPONENT metadata + EXCLUDE_FROM_ALL ) +install(DIRECTORY "${slang_SOURCE_DIR}/docs/" DESTINATION share/doc/slang) +install(DIRECTORY "${slang_SOURCE_DIR}/include" DESTINATION .) include(CPack) diff --git a/cmake/FetchedSharedLibrary.cmake b/cmake/FetchedSharedLibrary.cmake index 3c7f24be58..fa0bd9f5e4 100644 --- a/cmake/FetchedSharedLibrary.cmake +++ b/cmake/FetchedSharedLibrary.cmake @@ -9,23 +9,24 @@ function(download_and_extract archive_name url) set(archive_path ${url}) else() message(STATUS "Fetching ${archive_name} from ${url}") - file(DOWNLOAD ${url} ${archive_path} - # SHOW_PROGRESS - STATUS status + file( + DOWNLOAD ${url} ${archive_path} + # SHOW_PROGRESS + STATUS status ) list(GET status 0 status_code) list(GET status 1 status_string) if(NOT status_code EQUAL 0) - message(WARNING "Failed to download ${archive_name} from ${url}: ${status_string}") + message( + WARNING + "Failed to download ${archive_name} from ${url}: ${status_string}" + ) return() endif() endif() - file(ARCHIVE_EXTRACT - INPUT ${archive_path} - DESTINATION ${extract_dir} - ) + file(ARCHIVE_EXTRACT INPUT ${archive_path} DESTINATION ${extract_dir}) set(${archive_name}_SOURCE_DIR ${extract_dir} PARENT_SCOPE) message(STATUS "${archive_name} downloaded and extracted to ${extract_dir}") @@ -51,10 +52,7 @@ function(copy_fetched_shared_library library_name url) ) macro(from_glob dir) # A little helper function - file( - GLOB_RECURSE source_object - "${dir}/${shared_library_filename}" - ) + file(GLOB_RECURSE source_object "${dir}/${shared_library_filename}") list(LENGTH source_object nmatches) if(nmatches EQUAL 0) message( @@ -88,7 +86,10 @@ function(copy_fetched_shared_library library_name url) elseif(ARG_IGNORE_FAILURE) return() else() - message(SEND_ERROR "Unable to download and extract ${library_name} from ${url}") + message( + SEND_ERROR + "Unable to download and extract ${library_name} from ${url}" + ) return() endif() endif() diff --git a/cmake/GitHubRelease.cmake b/cmake/GitHubRelease.cmake index 0590933d2a..adcb9a5634 100644 --- a/cmake/GitHubRelease.cmake +++ b/cmake/GitHubRelease.cmake @@ -14,24 +14,45 @@ function(check_assets_for_file json_content filename found_var) set(${found_var} "${found}" PARENT_SCOPE) endfunction() -function(get_latest owner repo os arch github_token out_var) - set(json_output_file "${CMAKE_CURRENT_BINARY_DIR}/${owner}_${repo}_release_info.json") - set(latest_release_url "https://api.github.com/repos/${owner}/${repo}/releases/latest") +function( + get_latest + owner + repo + os + arch + github_token + out_var +) + set(json_output_file + "${CMAKE_CURRENT_BINARY_DIR}/${owner}_${repo}_release_info.json" + ) + set(latest_release_url + "https://api.github.com/repos/${owner}/${repo}/releases/latest" + ) set(download_args "${latest_release_url}" "${json_output_file}" - STATUS download_statuses + STATUS + download_statuses ) if(github_token) - list(APPEND download_args HTTPHEADER "Authorization: token ${github_token}") + list( + APPEND + download_args + HTTPHEADER + "Authorization: token ${github_token}" + ) endif() file(DOWNLOAD ${download_args}) list(GET download_statuses 0 status_code) if(NOT status_code EQUAL 0) - message(WARNING "Failed to download latest release info from ${latest_release_url}") + message( + WARNING + "Failed to download latest release info from ${latest_release_url}" + ) return() endif() @@ -42,33 +63,62 @@ function(get_latest owner repo os arch github_token out_var) # Check if the expected ZIP file is in the latest release set(desired_zip "${repo}-${latest_version}-${os}-${arch}.zip") - message(VERBOSE "searching for the prebuilt slang-llvm library in ${latest_release_url}") - check_assets_for_file("${latest_json_content}" "${desired_zip}" file_found_latest) + message( + VERBOSE + "searching for the prebuilt slang-llvm library in ${latest_release_url}" + ) + check_assets_for_file( + "${latest_json_content}" + "${desired_zip}" + file_found_latest + ) if(file_found_latest) # If we got it, we found a good version set(${out_var} "${latest_version}" PARENT_SCOPE) else() - message(WARNING "No release binary for ${os}-${arch} exists for the latest version: ${latest_version}") + message( + WARNING + "No release binary for ${os}-${arch} exists for the latest version: ${latest_version}" + ) endif() endfunction() -function(check_release_and_get_latest owner repo version os arch github_token out_var) +function( + check_release_and_get_latest + owner + repo + version + os + arch + github_token + out_var +) # Construct the URL for the specified version's release API endpoint - set(version_url "https://api.github.com/repos/${owner}/${repo}/releases/tags/v${version}") + set(version_url + "https://api.github.com/repos/${owner}/${repo}/releases/tags/v${version}" + ) - set(json_output_file "${CMAKE_CURRENT_BINARY_DIR}/${owner}_${repo}_release_info.json") + set(json_output_file + "${CMAKE_CURRENT_BINARY_DIR}/${owner}_${repo}_release_info.json" + ) # Prepare download arguments set(download_args "${version_url}" "${json_output_file}" - STATUS download_statuses + STATUS + download_statuses ) if(github_token) # Add authorization header if token is provided - list(APPEND download_args HTTPHEADER "Authorization: token ${github_token}") + list( + APPEND + download_args + HTTPHEADER + "Authorization: token ${github_token}" + ) endif() # Perform the download @@ -81,18 +131,28 @@ function(check_release_and_get_latest owner repo version os arch github_token ou # Check if the specified version contains the expected ZIP file set(desired_zip "${repo}-${version}-${os}-${arch}.zip") - message(VERBOSE "searching for the prebuilt slang-llvm library in ${version_url}") + message( + VERBOSE + "searching for the prebuilt slang-llvm library in ${version_url}" + ) check_assets_for_file("${json_content}" "${desired_zip}" file_found) if(file_found) set(${out_var} "${version}" PARENT_SCOPE) return() endif() - message(WARNING "Failed to find ${desired_zip} in release assets for ${version} from ${version_url}\nFalling back to latest version if it differs") + message( + WARNING + "Failed to find ${desired_zip} in release assets for ${version} from ${version_url}\nFalling back to latest version if it differs" + ) else() - set(w "Failed to download release info for version ${version} from ${version_url}\nFalling back to latest version if it differs") + set(w + "Failed to download release info for version ${version} from ${version_url}\nFalling back to latest version if it differs" + ) if(status_code EQUAL 22) - set(w "${w}\nIf you think this is failing because of GitHub API rate limiting, Github allows a higher limit if you use a token. Try the cmake option -DSLANG_GITHUB_TOKEN=your_token_here") + set(w + "${w}\nIf you think this is failing because of GitHub API rate limiting, Github allows a higher limit if you use a token. Try the cmake option -DSLANG_GITHUB_TOKEN=your_token_here" + ) endif() message(WARNING ${w}) @@ -112,7 +172,10 @@ function(get_best_slang_binary_release_url github_token out_var) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64") set(arch "aarch64") else() - message(WARNING "Unsupported architecture for slang binary releases: ${CMAKE_SYSTEM_PROCESSOR}") + message( + WARNING + "Unsupported architecture for slang binary releases: ${CMAKE_SYSTEM_PROCESSOR}" + ) return() endif() @@ -123,7 +186,10 @@ function(get_best_slang_binary_release_url github_token out_var) elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(os "linux") else() - message(WARNING "Unsupported operating system for slang binary releases: ${CMAKE_SYSTEM_NAME}") + message( + WARNING + "Unsupported operating system for slang binary releases: ${CMAKE_SYSTEM_NAME}" + ) return() endif() @@ -135,17 +201,43 @@ function(get_best_slang_binary_release_url github_token out_var) # fallback to the latest release if(${SLANG_VERSION_NUMERIC} VERSION_LESS "2024.1.27") if(${SLANG_VERSION_NUMERIC} VERSION_EQUAL "0.0.0") - message(VERBOSE "The detected version of slang is ${SLANG_VERSION_NUMERIC}, fetching libslang-llvm from the latest release") + message( + VERBOSE + "The detected version of slang is ${SLANG_VERSION_NUMERIC}, fetching libslang-llvm from the latest release" + ) else() - message(WARNING "The detected version of slang ${SLANG_VERSION_NUMERIC} is very old (probably you haven't fetched tags recently?), libslang-llvm will be fetched from the latest release rather than the one matching ${SLANG_VERSION_NUMERIC}") + message( + WARNING + "The detected version of slang ${SLANG_VERSION_NUMERIC} is very old (probably you haven't fetched tags recently?), libslang-llvm will be fetched from the latest release rather than the one matching ${SLANG_VERSION_NUMERIC}" + ) endif() - get_latest(${owner} ${repo} ${os} ${arch} "${github_token}" release_version) + get_latest( + ${owner} + ${repo} + ${os} + ${arch} + "${github_token}" + release_version + ) else() - check_release_and_get_latest(${owner} ${repo} ${SLANG_VERSION_NUMERIC} ${os} ${arch} "${github_token}" release_version) + check_release_and_get_latest( + ${owner} + ${repo} + ${SLANG_VERSION_NUMERIC} + ${os} + ${arch} + "${github_token}" + release_version + ) endif() if(DEFINED release_version) - message(VERBOSE "Found a version of libslang-llvm.so in ${release_version}") - set(${out_var} "https://github.com/${owner}/${repo}/releases/download/v${release_version}/slang-${release_version}-${os}-${arch}.zip" PARENT_SCOPE) + message( + VERBOSE + "Found a version of libslang-llvm.so in ${release_version}" + ) + set(${out_var} + "https://github.com/${owner}/${repo}/releases/download/v${release_version}/slang-${release_version}-${os}-${arch}.zip" + PARENT_SCOPE + ) endif() endfunction() - diff --git a/cmake/Glob.cmake b/cmake/Glob.cmake index 831a074961..7adf355f12 100644 --- a/cmake/Glob.cmake +++ b/cmake/Glob.cmake @@ -22,9 +22,9 @@ function(slang_glob_sources var dir) "*.natstepfilter" "*.natjmc" ) - if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") list(APPEND patterns "*.mm") - endif() + endif() list(TRANSFORM patterns PREPEND "${dir}/") file(GLOB_RECURSE files CONFIGURE_DEPENDS ${patterns}) diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake index a9afdb3cb0..e0b7d6241c 100644 --- a/cmake/LLVM.cmake +++ b/cmake/LLVM.cmake @@ -41,12 +41,22 @@ endfunction() function(fetch_or_build_slang_llvm) if(SLANG_SLANG_LLVM_FLAVOR STREQUAL "FETCH_BINARY") - install_fetched_shared_library("slang-llvm" "${SLANG_SLANG_LLVM_BINARY_URL}") + install_fetched_shared_library( + "slang-llvm" + "${SLANG_SLANG_LLVM_BINARY_URL}" + ) elseif(SLANG_SLANG_LLVM_FLAVOR STREQUAL "FETCH_BINARY_IF_POSSIBLE") if(SLANG_SLANG_LLVM_BINARY_URL) - install_fetched_shared_library("slang-llvm" "${SLANG_SLANG_LLVM_BINARY_URL}" IGNORE_FAILURE) + install_fetched_shared_library( + "slang-llvm" + "${SLANG_SLANG_LLVM_BINARY_URL}" + IGNORE_FAILURE + ) if(NOT TARGET slang-llvm) - message(WARNING "Unable to fetch slang-llvm prebuilt binary, configuring without LLVM support") + message( + WARNING + "Unable to fetch slang-llvm prebuilt binary, configuring without LLVM support" + ) endif() endif() elseif(SLANG_SLANG_LLVM_FLAVOR STREQUAL "USE_SYSTEM_LLVM") @@ -77,7 +87,11 @@ function(fetch_or_build_slang_llvm) ) # If we don't include this, then the symbols in the LLVM linked here may # conflict with those of other LLVMs linked at runtime, for instance in mesa. - add_supported_cxx_linker_flags(slang-llvm PRIVATE "-Wl,--exclude-libs,ALL") + add_supported_cxx_linker_flags( + slang-llvm + PRIVATE + "-Wl,--exclude-libs,ALL" + ) # The LLVM headers need a warning disabling, which somehow slips through \external if(MSVC) @@ -94,22 +108,37 @@ function(fetch_or_build_slang_llvm) if(CMAKE_SYSTEM_NAME MATCHES "Windows") # DX Agility SDK requires the D3D12*.DLL files to be placed under a sub-directory, "D3D12". # https://devblogs.microsoft.com/directx/gettingstarted-dx12agility/#d3d12sdkpath-should-not-be-the-same-directory-as-the-application-exe - file(GLOB prebuilt_binaries "${slang_SOURCE_DIR}/external/slang-binaries/bin/windows-x64/*") - file(GLOB prebuilt_d3d12_binaries "${slang_SOURCE_DIR}/external/slang-binaries/bin/windows-x64/[dD]3[dD]12*") + file( + GLOB prebuilt_binaries + "${slang_SOURCE_DIR}/external/slang-binaries/bin/windows-x64/*" + ) + file( + GLOB prebuilt_d3d12_binaries + "${slang_SOURCE_DIR}/external/slang-binaries/bin/windows-x64/[dD]3[dD]12*" + ) list(REMOVE_ITEM prebuilt_binaries ${prebuilt_d3d12_binaries}) add_custom_target( - copy-prebuilt-binaries ALL - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/$/${runtime_subdir} - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${prebuilt_binaries} + copy-prebuilt-binaries + ALL + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${CMAKE_BINARY_DIR}/$/${runtime_subdir} + COMMAND + ${CMAKE_COMMAND} -E copy_if_different ${prebuilt_binaries} ${CMAKE_BINARY_DIR}/$/${runtime_subdir} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/$/${runtime_subdir}/D3D12 - COMMAND ${CMAKE_COMMAND} -E copy_if_different + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${CMAKE_BINARY_DIR}/$/${runtime_subdir}/D3D12 + COMMAND + ${CMAKE_COMMAND} -E copy_if_different ${prebuilt_d3d12_binaries} ${CMAKE_BINARY_DIR}/$/${runtime_subdir}/D3D12 VERBATIM ) - set_target_properties(copy-prebuilt-binaries PROPERTIES FOLDER external) + set_target_properties( + copy-prebuilt-binaries + PROPERTIES FOLDER external + ) endif() endif() endfunction() diff --git a/cmake/SlangTarget.cmake b/cmake/SlangTarget.cmake index bf1abe3a98..4a3b757046 100644 --- a/cmake/SlangTarget.cmake +++ b/cmake/SlangTarget.cmake @@ -232,7 +232,10 @@ function(slang_add_target dir type) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") foreach(link_framework ${ARG_LINK_WITH_FRAMEWORK}) - target_link_libraries(${target} PRIVATE "-framework ${link_framework}") + target_link_libraries( + ${target} + PRIVATE "-framework ${link_framework}" + ) endforeach() endif() @@ -294,7 +297,10 @@ function(slang_add_target dir type) PUBLIC "${ARG_EXPORT_MACRO_PREFIX}_STATIC" ) else() - message(WARNING "unhandled case in slang_add_target while setting export macro") + message( + WARNING + "unhandled case in slang_add_target while setting export macro" + ) endif() endif() @@ -394,18 +400,10 @@ function(slang_add_target dir type) install( TARGETS ${target} EXPORT SlangTargets - ARCHIVE - DESTINATION ${archive_subdir} - ${ARGN} - LIBRARY - DESTINATION ${library_subdir} - ${ARGN} - RUNTIME - DESTINATION ${runtime_subdir} - ${ARGN} - PUBLIC_HEADER - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ${ARGN} + ARCHIVE DESTINATION ${archive_subdir} ${ARGN} + LIBRARY DESTINATION ${library_subdir} ${ARGN} + RUNTIME DESTINATION ${runtime_subdir} ${ARGN} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ${ARGN} ) endmacro() if(ARG_INSTALL) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 4f861c7596..9a27f7bcc5 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -11,7 +11,10 @@ endif() if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25") set(system SYSTEM) else() - message(STATUS "CMake 3.25 is required to suppress warnings originating in headers in external/ but you are using ${CMAKE_VERSION}, be prepared for some warnings") + message( + STATUS + "CMake 3.25 is required to suppress warnings originating in headers in external/ but you are using ${CMAKE_VERSION}, be prepared for some warnings" + ) set(system) endif() @@ -24,12 +27,12 @@ if(NOT SLANG_ENABLE_EXTERNAL_COMPILER_WARNINGS) endif() endif() -if (NOT ${SLANG_USE_SYSTEM_UNORDERED_DENSE}) +if(NOT ${SLANG_USE_SYSTEM_UNORDERED_DENSE}) add_subdirectory(unordered_dense EXCLUDE_FROM_ALL ${system}) endif() # Miniz -if (NOT ${SLANG_USE_SYSTEM_MINIZ}) +if(NOT ${SLANG_USE_SYSTEM_MINIZ}) add_subdirectory(miniz EXCLUDE_FROM_ALL ${system}) set_property(TARGET miniz PROPERTY POSITION_INDEPENDENT_CODE ON) # Work around https://github.com/richgel999/miniz/pull/292 @@ -41,28 +44,31 @@ if (NOT ${SLANG_USE_SYSTEM_MINIZ}) endif() # LZ4 -if (NOT ${SLANG_USE_SYSTEM_LZ4}) +if(NOT ${SLANG_USE_SYSTEM_LZ4}) set(LZ4_BUNDLED_MODE ON) add_subdirectory(lz4/build/cmake EXCLUDE_FROM_ALL ${system}) if(MSVC) - target_compile_options( - lz4_static - PRIVATE /wd5045 /wd4820 /wd4711 /wd6385 /wd6262 - ) + target_compile_options( + lz4_static + PRIVATE /wd5045 /wd4820 /wd4711 /wd6385 /wd6262 + ) endif() endif() # Vulkan headers -if (NOT ${SLANG_USE_SYSTEM_VULKAN_HEADERS}) +if(NOT ${SLANG_USE_SYSTEM_VULKAN_HEADERS}) add_subdirectory(vulkan EXCLUDE_FROM_ALL ${system}) endif() # metal-cpp headers add_library(metal-cpp INTERFACE) -target_include_directories(metal-cpp INTERFACE "${CMAKE_CURRENT_LIST_DIR}/metal-cpp") +target_include_directories( + metal-cpp + INTERFACE "${CMAKE_CURRENT_LIST_DIR}/metal-cpp" +) # SPIRV-Headers -if (NOT ${SLANG_USE_SYSTEM_SPIRV_HEADERS}) +if(NOT ${SLANG_USE_SYSTEM_SPIRV_HEADERS}) add_subdirectory(spirv-headers EXCLUDE_FROM_ALL ${system}) endif() diff --git a/extras/formatting.sh b/extras/formatting.sh new file mode 100755 index 0000000000..dc3bbc7ca5 --- /dev/null +++ b/extras/formatting.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +cd "$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel)" || exit 1 + +check_only=0 + +while [[ "$#" -gt 0 ]]; do + case $1 in + -h | --help) help=1 ;; + --check-only) check_only=1 ;; + esac + shift +done + +if [ "$help" ]; then + me=$(basename "$0") + cat </dev/null; then + echo "This script needs $name, but it isn't in \$PATH" + missing_bin=1 + return + fi + + version=$("$name" --version | grep -oP "$name(?:\s+version)?\s+\K\d+\.\d+\.?\d*") + if ! printf '%s\n%s\n' "$required" "$version" | sort -V -C; then + echo "$name version $version is too old. Version $required or newer is required." + missing_bin=1 + fi +} + +require_bin "git" "1.8" +require_bin "gersemi" "0.16.2" + +if [ "${missing_bin:-}" = "1" ]; then + exit 1 +fi + +if [ "$missing_bin" ]; then + exit 1 +fi + +exit_code=0 + +cmake_formatting() { + readarray -t files < <(git ls-files '*.cmake' 'CMakeLists.txt' '**/CMakeLists.txt') + + common_args=( + # turn on warning when this is fixed https://github.com/BlankSpruce/gersemi/issues/39 + --no-warn-about-unknown-commands + --definitions "${files[@]}" + ) + + if [ "$check_only" -eq 1 ]; then + gersemi "${common_args[@]}" --diff --color "${files[@]}" + gersemi "${common_args[@]}" --check "${files[@]}" || exit_code=1 + else + gersemi "${common_args[@]}" --in-place "${files[@]}" + fi +} + +cmake_formatting + +exit $exit_code diff --git a/prelude/CMakeLists.txt b/prelude/CMakeLists.txt index b9a763f035..67dc89d993 100644 --- a/prelude/CMakeLists.txt +++ b/prelude/CMakeLists.txt @@ -24,7 +24,9 @@ slang_add_target( EXPLICIT_SOURCE ${prelude_source} EXCLUDE_FROM_ALL TARGET_NAME prelude - INCLUDE_DIRECTORIES_PUBLIC ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/../include + INCLUDE_DIRECTORIES_PUBLIC + ${CMAKE_CURRENT_LIST_DIR} + ${CMAKE_CURRENT_LIST_DIR}/../include LINK_WITH_PRIVATE unordered_dense::unordered_dense PUBLIC_HEADERS ${CMAKE_CURRENT_LIST_DIR}/slang*.h # It's an object library, so the install step only installs the headers diff --git a/source/core/CMakeLists.txt b/source/core/CMakeLists.txt index 15da2abfb1..8228d00670 100644 --- a/source/core/CMakeLists.txt +++ b/source/core/CMakeLists.txt @@ -3,8 +3,9 @@ slang_add_target( STATIC EXCLUDE_FROM_ALL USE_EXTRA_WARNINGS - LINK_WITH_PRIVATE - miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS} + LINK_WITH_PRIVATE miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS} LINK_WITH_PUBLIC unordered_dense::unordered_dense - INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/source ${slang_SOURCE_DIR}/include + INCLUDE_DIRECTORIES_PUBLIC + ${slang_SOURCE_DIR}/source + ${slang_SOURCE_DIR}/include ) diff --git a/source/slang-glslang/CMakeLists.txt b/source/slang-glslang/CMakeLists.txt index 37bb93ca08..d28177ccc9 100644 --- a/source/slang-glslang/CMakeLists.txt +++ b/source/slang-glslang/CMakeLists.txt @@ -12,5 +12,9 @@ if(SLANG_ENABLE_SLANG_GLSLANG) ) # Our only interface is through what we define in source/slang-glslang, in the # interests of hygiene, hide anything else we link in. - add_supported_cxx_linker_flags(slang-glslang PRIVATE "-Wl,--exclude-libs,ALL") + add_supported_cxx_linker_flags( + slang-glslang + PRIVATE + "-Wl,--exclude-libs,ALL" + ) endif() diff --git a/source/slang-rt/CMakeLists.txt b/source/slang-rt/CMakeLists.txt index fc37237cd7..2dc56355e0 100644 --- a/source/slang-rt/CMakeLists.txt +++ b/source/slang-rt/CMakeLists.txt @@ -5,8 +5,7 @@ if(SLANG_ENABLE_SLANGRT) # This compiles 'core' again with the SLANG_RT_DYNAMIC_EXPORT macro defined EXTRA_SOURCE_DIRS ${slang_SOURCE_DIR}/source/core USE_EXTRA_WARNINGS - LINK_WITH_PRIVATE - miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS} + LINK_WITH_PRIVATE miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS} LINK_WITH_PUBLIC unordered_dense::unordered_dense EXPORT_MACRO_PREFIX SLANG_RT INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/include diff --git a/source/slang-stdlib/CMakeLists.txt b/source/slang-stdlib/CMakeLists.txt index a6d646cf30..309c1ae19c 100644 --- a/source/slang-stdlib/CMakeLists.txt +++ b/source/slang-stdlib/CMakeLists.txt @@ -29,26 +29,28 @@ set(stdlib_common_args . OBJECT EXCLUDE_FROM_ALL - EXPORT_MACRO_PREFIX SLANG - EXPORT_TYPE_AS ${SLANG_LIB_TYPE} - FOLDER generated - LINK_WITH_PRIVATE core + EXPORT_MACRO_PREFIX + SLANG + EXPORT_TYPE_AS + ${SLANG_LIB_TYPE} + FOLDER + generated + LINK_WITH_PRIVATE + core USE_EXTRA_WARNINGS - EXPLICIT_SOURCE ./slang-embedded-stdlib.cpp + EXPLICIT_SOURCE + ./slang-embedded-stdlib.cpp ) slang_add_target( ${stdlib_common_args} TARGET_NAME slang-embedded-stdlib - EXPLICIT_SOURCE ${stdlib_generated_header} + EXPLICIT_SOURCE ${stdlib_generated_header} EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_STDLIB INCLUDE_DIRECTORIES_PRIVATE ${stdlib_generated_header_dir} ) -slang_add_target( - ${stdlib_common_args} - TARGET_NAME slang-no-embedded-stdlib -) +slang_add_target(${stdlib_common_args} TARGET_NAME slang-no-embedded-stdlib) # # Compiling the meta.slang files @@ -87,7 +89,10 @@ add_custom_command( VERBATIM ) -add_custom_target(generate-stdlib-headers DEPENDS ${stdlib_meta_generated_headers}) +add_custom_target( + generate-stdlib-headers + DEPENDS ${stdlib_meta_generated_headers} +) set_target_properties(generate-stdlib-headers PROPERTIES FOLDER generated) # @@ -99,22 +104,28 @@ set(stdlib_source_common_args OBJECT EXCLUDE_FROM_ALL USE_EXTRA_WARNINGS - LINK_WITH_PRIVATE - core - slang-capability-defs - slang-reflect-headers - SPIRV-Headers - INCLUDE_DIRECTORIES_PRIVATE ../slang - FOLDER generated - EXPLICIT_SOURCE - ./slang-embedded-stdlib-source.cpp - ${stdlib_meta_generated_headers} - REQUIRES generate-stdlib-headers - EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_EMBED_STDLIB_SOURCE - INCLUDE_DIRECTORIES_PRIVATE - ${stdlib_meta_output_dir} - EXPORT_MACRO_PREFIX SLANG - EXPORT_TYPE_AS ${SLANG_LIB_TYPE} + LINK_WITH_PRIVATE + core + slang-capability-defs + slang-reflect-headers + SPIRV-Headers + INCLUDE_DIRECTORIES_PRIVATE + ../slang + FOLDER + generated + EXPLICIT_SOURCE + ./slang-embedded-stdlib-source.cpp + ${stdlib_meta_generated_headers} + REQUIRES + generate-stdlib-headers + EXTRA_COMPILE_DEFINITIONS_PRIVATE + SLANG_EMBED_STDLIB_SOURCE + INCLUDE_DIRECTORIES_PRIVATE + ${stdlib_meta_output_dir} + EXPORT_MACRO_PREFIX + SLANG + EXPORT_TYPE_AS + ${SLANG_LIB_TYPE} ) slang_add_target( diff --git a/source/slang-wasm/CMakeLists.txt b/source/slang-wasm/CMakeLists.txt index d821415e74..0b11bd92ea 100644 --- a/source/slang-wasm/CMakeLists.txt +++ b/source/slang-wasm/CMakeLists.txt @@ -3,7 +3,7 @@ # # This is an executable target because emcmake produces .a files without bindings if you just create a static library # https://stackoverflow.com/questions/63622009/static-library-built-with-cmake-as-a-with-emscripten-instead-of-wasm-js -if (EMSCRIPTEN) +if(EMSCRIPTEN) slang_add_target( . EXECUTABLE diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt index 8e3be2069c..6564dbb997 100644 --- a/source/slang/CMakeLists.txt +++ b/source/slang/CMakeLists.txt @@ -1,4 +1,3 @@ - # # generate capability files # @@ -20,7 +19,8 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E make_directory ${SLANG_CAPABILITY_OUTPUT_DIR} COMMAND slang-capability-generator ${SLANG_CAPABILITY_SOURCE} --target-directory - ${SLANG_CAPABILITY_OUTPUT_DIR} --doc "${slang_SOURCE_DIR}/docs/user-guide/a3-02-reference-capability-atoms.md" + ${SLANG_CAPABILITY_OUTPUT_DIR} --doc + "${slang_SOURCE_DIR}/docs/user-guide/a3-02-reference-capability-atoms.md" DEPENDS ${SLANG_CAPABILITY_SOURCE} slang-capability-generator WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} VERBATIM @@ -105,8 +105,10 @@ target_include_directories( # generated lookup tables # -if (NOT SLANG_USE_SYSTEM_SPIRV_HEADERS) - set(SLANG_SPIRV_HEADERS_INCLUDE_DIR "${slang_SOURCE_DIR}/external/spirv-headers/include") +if(NOT SLANG_USE_SYSTEM_SPIRV_HEADERS) + set(SLANG_SPIRV_HEADERS_INCLUDE_DIR + "${slang_SOURCE_DIR}/external/spirv-headers/include" + ) endif() set(SLANG_LOOKUP_GENERATOR_INPUT_JSON @@ -146,8 +148,7 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E make_directory ${SLANG_LOOKUP_GENERATOR_OUTPUT_DIR} COMMAND - slang-spirv-embed-generator - ${SLANG_SPIRV_CORE_SOURCE_JSON} + slang-spirv-embed-generator ${SLANG_SPIRV_CORE_SOURCE_JSON} ${SLANG_SPIRV_CORE_GRAMMAR_SOURCE} DEPENDS ${SLANG_SPIRV_CORE_SOURCE_JSON} slang-spirv-embed-generator VERBATIM @@ -157,7 +158,9 @@ slang_add_target( slang-lookup-tables OBJECT USE_EXTRA_WARNINGS - EXPLICIT_SOURCE ${SLANG_LOOKUP_GENERATED_SOURCE} ${SLANG_SPIRV_CORE_GRAMMAR_SOURCE} + EXPLICIT_SOURCE + ${SLANG_LOOKUP_GENERATED_SOURCE} + ${SLANG_SPIRV_CORE_GRAMMAR_SOURCE} LINK_WITH_PRIVATE core SPIRV-Headers EXCLUDE_FROM_ALL FOLDER generated @@ -167,7 +170,10 @@ slang_add_target( # Generate the version header # -configure_file(${slang_SOURCE_DIR}/slang-tag-version.h.in slang-version-header/slang-tag-version.h) +configure_file( + ${slang_SOURCE_DIR}/slang-tag-version.h.in + slang-version-header/slang-tag-version.h +) # # Slang itself @@ -176,37 +182,42 @@ configure_file(${slang_SOURCE_DIR}/slang-tag-version.h.in slang-version-header/s set(slang_build_args USE_EXTRA_WARNINGS EXTRA_COMPILE_OPTIONS_PRIVATE - # a warning is disabled for a memset boundary check. - # everything looked fine and it is unclear why the checking fails - $<$:-Wno-error=stringop-overflow> - INCLUDE_DIRECTORIES_PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header - EXPORT_MACRO_PREFIX SLANG - EXPORT_TYPE_AS ${SLANG_LIB_TYPE} - EXTRA_SOURCE_DIRS ${SLANG_RECORD_REPLAY_SYSTEM} + # a warning is disabled for a memset boundary check. + # everything looked fine and it is unclear why the checking fails + $<$:-Wno-error=stringop-overflow> + INCLUDE_DIRECTORIES_PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header + EXPORT_MACRO_PREFIX + SLANG + EXPORT_TYPE_AS + ${SLANG_LIB_TYPE} + EXTRA_SOURCE_DIRS + ${SLANG_RECORD_REPLAY_SYSTEM} ) set(slang_link_args LINK_WITH_PRIVATE - core - prelude - compiler-core - slang-capability-defs - slang-capability-lookup - slang-reflect-headers - slang-lookup-tables - SPIRV-Headers + core + prelude + compiler-core + slang-capability-defs + slang-capability-lookup + slang-reflect-headers + slang-lookup-tables + SPIRV-Headers ) set(slang_interface_args # slang.h is in the project root, so include that directory in the interface # for slang - INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR} -) + INCLUDE_DIRECTORIES_PUBLIC + ${slang_SOURCE_DIR} +) set(slang_public_lib_args - PUBLIC_HEADERS - ${slang_SOURCE_DIR}/include/slang*.h - ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header/*.h + PUBLIC_HEADERS + ${slang_SOURCE_DIR}/include/slang*.h + ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header/*.h LINK_WITH_PRIVATE - $,slang-embedded-stdlib,slang-no-embedded-stdlib> - $,slang-embedded-stdlib-source,slang-no-embedded-stdlib-source> + $,slang-embedded-stdlib,slang-no-embedded-stdlib> + $,slang-embedded-stdlib-source,slang-no-embedded-stdlib-source> INSTALL ) @@ -231,7 +242,7 @@ if(NOT SLANG_EMBED_STDLIB) ${slang_public_lib_args} INSTALL_COMPONENT generators ) - add_library(slang-without-embedded-stdlib ALIAS slang) + add_library(slang-without-embedded-stdlib ALIAS slang) else() # However if we're embedding stdlib, we need to make two different # libraries, one with the embedded stdlib and one without, so first define @@ -250,12 +261,11 @@ else() ${slang_link_args} ${slang_interface_args} NO_SOURCE - TARGET_NAME - slang-without-embedded-stdlib + TARGET_NAME slang-without-embedded-stdlib EXCLUDE_FROM_ALL - LINK_WITH_PRIVATE + LINK_WITH_PRIVATE slang-common-objects - slang-no-embedded-stdlib + slang-no-embedded-stdlib slang-embedded-stdlib-source OUTPUT_DIR generators FOLDER generators @@ -267,8 +277,7 @@ else() ${slang_link_args} ${slang_interface_args} ${slang_public_lib_args} - LINK_WITH_PRIVATE - slang-common-objects + LINK_WITH_PRIVATE slang-common-objects NO_SOURCE ) endif() diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 8c2221a2b5..a4ded58d6a 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -9,9 +9,9 @@ add_custom_target( set_target_properties(all-generators PROPERTIES FOLDER generators) if(CMAKE_HOST_WIN32) - set(CMAKE_HOST_EXECUTABLE_SUFFIX ".exe") + set(CMAKE_HOST_EXECUTABLE_SUFFIX ".exe") else() - set(CMAKE_HOST_EXECUTABLE_SUFFIX "") + set(CMAKE_HOST_EXECUTABLE_SUFFIX "") endif() function(generator dir) if(SLANG_GENERATORS_PATH) @@ -44,7 +44,12 @@ function(generator dir) endif() endfunction() -generator(slang-cpp-extractor USE_FEWER_WARNINGS LINK_WITH_PRIVATE compiler-core) +generator( + slang-cpp-extractor + USE_FEWER_WARNINGS + LINK_WITH_PRIVATE + compiler-core +) generator(slang-embed) generator(slang-generate USE_FEWER_WARNINGS) generator(slang-lookup-generator LINK_WITH_PRIVATE compiler-core) @@ -52,14 +57,15 @@ generator(slang-capability-generator LINK_WITH_PRIVATE compiler-core) generator(slang-spirv-embed-generator LINK_WITH_PRIVATE compiler-core) generator( ${slang_SOURCE_DIR}/source/slangc - TARGET_NAME slang-bootstrap + TARGET_NAME + slang-bootstrap USE_FEWER_WARNINGS - LINK_WITH_PRIVATE - prelude - slang-without-embedded-stdlib - slang-capability-lookup - slang-lookup-tables - Threads::Threads + LINK_WITH_PRIVATE + prelude + slang-without-embedded-stdlib + slang-capability-lookup + slang-lookup-tables + Threads::Threads ) # @@ -96,10 +102,7 @@ if(SLANG_ENABLE_GFX) "$<$:-framework Cocoa>" "$<$:-framework QuartzCore>" ${CMAKE_DL_LIBS} - LINK_WITH_FRAMEWORK - Foundation - Cocoa - QuartzCore + LINK_WITH_FRAMEWORK Foundation Cocoa QuartzCore EXTRA_COMPILE_DEFINITIONS_PRIVATE $<$:SLANG_ENABLE_XLIB=1> INCLUDE_FROM_PRIVATE gfx @@ -121,11 +124,7 @@ if(SLANG_ENABLE_GFX) metal-cpp $<$:X11::X11> $<$:CUDA::cuda_driver> - LINK_WITH_FRAMEWORK - Foundation - Cocoa - QuartzCore - Metal + LINK_WITH_FRAMEWORK Foundation Cocoa QuartzCore Metal EXTRA_COMPILE_DEFINITIONS_PRIVATE $<$:GFX_ENABLE_CUDA> $<$:GFX_OPTIX> @@ -136,7 +135,9 @@ if(SLANG_ENABLE_GFX) EXPORT_MACRO_PREFIX SLANG_GFX # slang-gfx is in this directory, anything which depends on gfx should include # this - INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR} ${slang_SOURCE_DIR}/include + INCLUDE_DIRECTORIES_PUBLIC + ${slang_SOURCE_DIR} + ${slang_SOURCE_DIR}/include REQUIRES copy-gfx-slang-modules INSTALL FOLDER gfx @@ -195,7 +196,12 @@ if(SLANG_ENABLE_TESTS) slang-test EXECUTABLE USE_FEWER_WARNINGS - LINK_WITH_PRIVATE core compiler-core slang ${CMAKE_DL_LIBS} Threads::Threads + LINK_WITH_PRIVATE + core + compiler-core + slang + ${CMAKE_DL_LIBS} + Threads::Threads REQUIRES # Shared libraries dlopened by slang-test slang-reflection-test @@ -222,14 +228,15 @@ if(SLANG_ENABLE_TESTS) add_test( NAME slang-test COMMAND - slang-test -bindir ${slang_SOURCE_DIR}/build/$/${runtime_subdir} - -expected-failure-list ${slang_SOURCE_DIR}/tests/expected-failure.txt + slang-test -bindir + ${slang_SOURCE_DIR}/build/$/${runtime_subdir} + -expected-failure-list + ${slang_SOURCE_DIR}/tests/expected-failure.txt -expected-failure-list ${slang_SOURCE_DIR}/tests/expected-failure-github.txt WORKING_DIRECTORY ${slang_SOURCE_DIR} ) - slang_add_target( unit-test OBJECT @@ -308,15 +315,16 @@ endif() # # slang-replay tool for replaying the record files # -if (SLANG_ENABLE_REPLAYER) +if(SLANG_ENABLE_REPLAYER) slang_add_target( slang-replay EXECUTABLE - EXTRA_SOURCE_DIRS - ${slang_SOURCE_DIR}/source/slang-record-replay/replay + EXTRA_SOURCE_DIRS + ${slang_SOURCE_DIR}/source/slang-record-replay/replay ${slang_SOURCE_DIR}/source/slang-record-replay/util LINK_WITH_PRIVATE core compiler-core slang - INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/source/slang-record-replay + INCLUDE_DIRECTORIES_PUBLIC + ${slang_SOURCE_DIR}/source/slang-record-replay FOLDER test ) endif()