diff --git a/.bazelignore b/.bazelignore index 3c3629e647f..0efcc0d323e 100644 --- a/.bazelignore +++ b/.bazelignore @@ -1 +1,6 @@ node_modules + +# Nested modules +build/google-benchmark +build/perfetto +build/workerd-v8 diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 4d334cb3bfb..efeebb915e8 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -26,7 +26,7 @@ jobs: name: Run benchmarks runs-on: ubuntu-22.04 env: - BAZEL_ARGS: --config=benchmark --@codspeed//core:codspeed_mode=instrumentation --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev + BAZEL_ARGS: --config=benchmark --@workerd-google-benchmark//:codspeed_mode=instrumentation --remote_cache=https://bazel:${{ secrets.BAZEL_CACHE_KEY }}@bazel-remote-cache.devprod.cloudflare.dev steps: - uses: actions/checkout@v4 with: diff --git a/WORKSPACE b/WORKSPACE index e462afff7e7..7438cdc962b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -19,24 +19,6 @@ load("//:build/rust_toolchains.bzl", "rust_toolchains") rust_toolchains() -# Tell workerd code where to find google-benchmark with CodSpeed. -# -# We indirect through `@workerd-google-benchmark` to allow dependents to override how and where -# google-benchmark is built, similar to the v8 setup above. -new_local_repository( - name = "workerd-google-benchmark", - build_file_content = """cc_library( - name = "benchmark", - deps = [ "@codspeed//google_benchmark:benchmark" ], - visibility = ["//visibility:public"]) - -cc_library( - name = "benchmark_main", - deps = [ "@codspeed//google_benchmark:benchmark_main" ], - visibility = ["//visibility:public"])""", - path = "empty", -) - # rust-based lolhtml dependency, including the API header. # Presented as a separate repository to allow overrides. new_local_repository( diff --git a/build/deps/build_deps.jsonc b/build/deps/build_deps.jsonc index d4ccacbed68..a97c9504531 100644 --- a/build/deps/build_deps.jsonc +++ b/build/deps/build_deps.jsonc @@ -49,13 +49,6 @@ "file_regex": "^cargo-bazel-x86_64-pc-windows-msvc.exe$", "file_type": "executable", "downloaded_file_path": "downloaded.exe" - }, - // microbenchmark - { - "name": "codspeed", - "type": "github_release", - "owner": "CodSpeedHQ", - "repo": "codspeed-cpp" } ] } diff --git a/build/deps/gen/build_deps.bzl b/build/deps/gen/build_deps.bzl index c1087b87536..0380e158f66 100644 --- a/build/deps/gen/build_deps.bzl +++ b/build/deps/gen/build_deps.bzl @@ -5,7 +5,6 @@ load("@//build/deps:gen/dep_cargo_bazel_linux_x64.bzl", "dep_cargo_bazel_linux_x load("@//build/deps:gen/dep_cargo_bazel_macos_arm64.bzl", "dep_cargo_bazel_macos_arm64") load("@//build/deps:gen/dep_cargo_bazel_macos_x64.bzl", "dep_cargo_bazel_macos_x64") load("@//build/deps:gen/dep_cargo_bazel_win_x64.bzl", "dep_cargo_bazel_win_x64") -load("@//build/deps:gen/dep_codspeed.bzl", "dep_codspeed") load("@//build/deps:gen/dep_rules_rust.bzl", "dep_rules_rust") def deps_gen(): @@ -15,4 +14,3 @@ def deps_gen(): dep_cargo_bazel_macos_x64() dep_cargo_bazel_macos_arm64() dep_cargo_bazel_win_x64() - dep_codspeed() diff --git a/build/deps/gen/dep_codspeed.bzl b/build/deps/gen/dep_codspeed.bzl deleted file mode 100644 index a3e6e337212..00000000000 --- a/build/deps/gen/dep_codspeed.bzl +++ /dev/null @@ -1,18 +0,0 @@ -# WARNING: THIS FILE IS AUTOGENERATED BY update-deps.py DO NOT EDIT - -load("@//:build/http.bzl", "http_archive") - -TAG_NAME = "v1.2.0" -URL = "https://api.github.com/repos/CodSpeedHQ/codspeed-cpp/tarball/v1.2.0" -STRIP_PREFIX = "CodSpeedHQ-codspeed-cpp-719c41f" -SHA256 = "1ced2c2e813313a574f41de9a218f38b53a4114cf7e72ee286801eaba6d8b240" -TYPE = "tgz" - -def dep_codspeed(): - http_archive( - name = "codspeed", - url = URL, - strip_prefix = STRIP_PREFIX, - type = TYPE, - sha256 = SHA256, - ) diff --git a/build/deps/v8.MODULE.bazel b/build/deps/v8.MODULE.bazel index 17629ca075e..6fa3897b56d 100644 --- a/build/deps/v8.MODULE.bazel +++ b/build/deps/v8.MODULE.bazel @@ -101,3 +101,13 @@ local_path_override( module_name = "workerd-v8", path = "build/workerd-v8", ) + +# Tell workerd code where to find google-benchmark with CodSpeed. +# +# We indirect through `@workerd-google-benchmark` to allow dependents to override how and where +# google-benchmark is built, similar to the v8 setup above. +bazel_dep(name = "workerd-google-benchmark") +local_path_override( + module_name = "workerd-google-benchmark", + path = "build/google-benchmark", +) diff --git a/build/google-benchmark/BUILD b/build/google-benchmark/BUILD new file mode 100644 index 00000000000..35ad3596a3d --- /dev/null +++ b/build/google-benchmark/BUILD @@ -0,0 +1,16 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "benchmark", + deps = ["@codspeed//google_benchmark:benchmark"], +) + +cc_library( + name = "benchmark_main", + deps = ["@codspeed//google_benchmark:benchmark_main"], +) + +alias( + name = "codspeed_mode", + actual = "@codspeed//core:codspeed_mode", +) diff --git a/build/google-benchmark/MODULE.bazel b/build/google-benchmark/MODULE.bazel new file mode 100644 index 00000000000..c10d81e68ea --- /dev/null +++ b/build/google-benchmark/MODULE.bazel @@ -0,0 +1,16 @@ +module(name = "workerd-google-benchmark") + +bazel_dep(name = "bazel_skylib", version = "1.8.1") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_cc", version = "0.2.8") + +http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "codspeed", + url = "https://api.github.com/repos/CodSpeedHQ/codspeed-cpp/tarball/v1.2.0", + patches = ["codspeed_pr_21.patch"], + strip_prefix = "CodSpeedHQ-codspeed-cpp-719c41f", + type = "tgz", + sha256 = "1ced2c2e813313a574f41de9a218f38b53a4114cf7e72ee286801eaba6d8b240", +) diff --git a/build/google-benchmark/codspeed_pr_21.patch b/build/google-benchmark/codspeed_pr_21.patch new file mode 100644 index 00000000000..0c8dc5cdd08 --- /dev/null +++ b/build/google-benchmark/codspeed_pr_21.patch @@ -0,0 +1,10 @@ +--- core/BUILD ++++ core/BUILD +@@ -67,6 +67,7 @@ string_flag( + "instrumentation", + "walltime", + ], ++ visibility = ["//visibility:public"], + ) + + config_setting(