Skip to content

Commit

Permalink
[build] Disable WebGPU for Windows non-release builds
Browse files Browse the repository at this point in the history
The Windows build is currently much slower than the macOS/Linux builds on CI,
especially on mostly cached builds.
Based on profiling on #2981, this is caused by the repo mapping stage for dawn
taking several minutes of Windows. Disable the experimental WebGPU feature on
Windows to better meet compile time constraints. Release builds remain
unaffected.
  • Loading branch information
fhanau committed Oct 26, 2024
1 parent e01f32e commit 9683707
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 30 deletions.
30 changes: 17 additions & 13 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,18 @@ build --experimental_remote_cache_eviction_retries=3
# due to https://github.com/bazelbuild/bazel/issues/20576.
# Windows build is failing on some runs due to FileAccessException errors, Bazel has had several
# similar bugs in the past. Disable BwoB for now.
build:windows --remote_download_all

# Import CI-specific configuration. As the amount of custom configuration settings we use grows,
# consider moving more flags out to separate files.
import %workspace%/build/ci.bazelrc

# Enable webgpu
build --//src/workerd/io:enable_experimental_webgpu=True
# Enable webgpu. Merely fetching the required Dawn library and computing the repo mapping based on
# it slows down the Windows build significantly, so only enable this on Unix and for Windows release
# builds. This is mostly motivated by compile time constraints, we hope to lift this limitation
# again if this Windows performance bottleneck gets fixed within Bazel.
build:unix --config=webgpu
build:release_windows --config=webgpu
build:webgpu --//src/workerd/io:enable_experimental_webgpu=True

# Avoid generating duplicate runfile trees. This will become the default in a future bazel version.
build --nolegacy_external_runfiles
Expand All @@ -39,16 +43,16 @@ build --incompatible_disallow_empty_glob
# Prevents bazel cache invalidation when switching terminals
build --incompatible_strict_action_env

# Dawn tint build flags
build --@dawn//src/tint:tint_build_glsl_writer=False
build --@dawn//src/tint:tint_build_glsl_validator=False
build --@dawn//src/tint:tint_build_hlsl_writer=True
build --@dawn//src/tint:tint_build_ir=False
build --@dawn//src/tint:tint_build_msl_writer=True
build --@dawn//src/tint:tint_build_spv_reader=False
build --@dawn//src/tint:tint_build_spv_writer=True
build --@dawn//src/tint:tint_build_wgsl_reader=True
build --@dawn//src/tint:tint_build_wgsl_writer=True
# Dawn tint build flags. Only enable when building with webgpu support
build:webgpu --@dawn//src/tint:tint_build_glsl_writer=False
build:webgpu --@dawn//src/tint:tint_build_glsl_validator=False
build:webgpu --@dawn//src/tint:tint_build_hlsl_writer=True
build:webgpu --@dawn//src/tint:tint_build_ir=False
build:webgpu --@dawn//src/tint:tint_build_msl_writer=True
build:webgpu --@dawn//src/tint:tint_build_spv_reader=False
build:webgpu --@dawn//src/tint:tint_build_spv_writer=True
build:webgpu --@dawn//src/tint:tint_build_wgsl_reader=True
build:webgpu --@dawn//src/tint:tint_build_wgsl_writer=True

# Our dependencies (ICU, zlib, etc.) produce a lot of these warnings, so we disable them. Depending
# on the clang version, zlib either produces warnings for -Wdeprecated-non-prototype or does not
Expand Down
15 changes: 10 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
# disk I/O race conditions causing permission denied errors (this also happened in
# previous versions). Use remote_download_all for now.
- os: { name : windows, image : windows-2022 }
config: { suffix: '', bazel-args: "--config=windows_no_dbg --remote_download_all" }
config: { suffix: '', bazel-args: "--config=windows_no_dbg" }
# TODO (later): The custom Windows-debug configuration consistently runs out of disk
# space on CI, disable it for now. Once https://github.com/bazelbuild/bazel/issues/21615
# has been resolved we can likely re-enable it and possibly fold up the custom
Expand Down Expand Up @@ -171,12 +171,9 @@ jobs:
- name: Configure git hooks
# Configure git to quell an irrelevant warning for runners (they never commit / push).
run: git config core.hooksPath githooks
- name: Bazel build
- name: Bazel build & test
# timestamps are no longer being added here, the GitHub logs include timestamps (Use
# 'Show timestamps' on the web interface)
run: |
bazel build --remote_download_minimal ${{ matrix.config.bazel-args }} --disk_cache=~/bazel-disk-cache --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev --config=ci --config=v8-codegen-opt //...
- name: Bazel test
run: |
bazel test --remote_download_minimal ${{ matrix.config.bazel-args }} --disk_cache=~/bazel-disk-cache --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev --test_output=errors --config=ci --config=v8-codegen-opt //...
- name: Report disk usage (in MB)
Expand Down Expand Up @@ -207,6 +204,14 @@ jobs:
else
echo "Disk cache does not exist: ~/bazel-disk-cache"
fi
- name: Upload build statistics
if: always()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os.name }}${{ matrix.config.suffix }}-bazel-profile
path: |
build.bazel-profile
test.bazel-profile
- name: Bazel shutdown
# Check that there are no .bazelrc issues that prevent shutdown.
run: bazel shutdown
11 changes: 1 addition & 10 deletions build/BUILD.wpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@
# Licensed under the Apache 2.0 license found in the LICENSE file or at:
# https://opensource.org/licenses/Apache-2.0

directories = glob(
["*"],
exclude = glob(
["*"],
exclude_directories = 1,
) + [
".*",
],
exclude_directories = 0,
)
directories = ["url"]

[filegroup(
name = dir,
Expand Down
4 changes: 4 additions & 0 deletions build/ci.bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ build:ci --show_progress_rate_limit=1
build:ci --color=yes
# Indicate support for more terminal columns, 100 is the line length recommended by KJ style.
build:ci --terminal_columns=100

# Emit build profile so that slow builds can be investigated
build:ci --profile build.bazel-profile
test:ci --profile test.bazel-profile
9 changes: 9 additions & 0 deletions build/wpt_test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ def wpt_test(name, wpt_directory, test_js):
test_name = name,
wpt_directory = wpt_directory,
test_js = test_js,
target_compatible_with = select({
"@platforms//os:windows": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)

wd_test(
Expand All @@ -28,6 +32,11 @@ def wpt_test(name, wpt_directory, test_js):
wpt_directory,
"//src/workerd/io:trimmed-supported-compatibility-date.txt",
],
# Even generating WPT tests is prohibitively expensive on Windows, disable it there
target_compatible_with = select({
"@platforms//os:windows": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)

def _wpt_test_gen_impl(ctx):
Expand Down
3 changes: 1 addition & 2 deletions src/wpt/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
filegroup(
name = "wpt-test-harness",
srcs = glob(
include = ["**/*"],
allow_empty = True,
include = ["*.js"],
),
visibility = ["//visibility:public"],
)

0 comments on commit 9683707

Please sign in to comment.