module(name = "net_eagle0") # Version constants SCALA_VERSION = "3.7.4" NETTY_VERSION = "4.1.135.Final" SCALAPB_VERSION = "1.0.0-alpha.5" SCALAPB_JSON4S_VERSION = "1.0.0-alpha.1" AWS_SDK_VERSION = "2.46.9" SLF4J_VERSION = "2.0.18" # # Core Build Tools # bazel_dep(name = "bazel_skylib", version = "1.9.2") bazel_dep(name = "aspect_rules_esbuild", version = "0.26.0") bazel_dep(name = "aspect_rules_js", version = "3.3.0") bazel_dep(name = "bazel_jar_jar", version = "0.1.15", repo_name = "bazel_jar_jar") bazel_dep(name = "platforms", version = "1.1.0") bazel_dep(name = "rules_dotnet", version = "0.22.1") bazel_dep(name = "rules_foreign_cc", version = "0.15.1") bazel_dep(name = "rules_android", version = "0.7.3") bazel_dep(name = "rules_nodejs", version = "6.7.5") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_shell", version = "0.8.0") multiple_version_override( module_name = "aspect_rules_js", versions = [ "2.3.8", "3.3.0", ], ) npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm") npm.npm_translate_lock( name = "eagle0pedia_npm", pnpm_lock = "//docs/eagle0pedia:pnpm-lock.yaml", run_lifecycle_hooks = False, update_pnpm_lock = False, ) use_repo(npm, "eagle0pedia_npm") # # Language Support - Scala # bazel_dep(name = "rules_scala", version = "7.2.6") scala_config = use_extension( "@rules_scala//scala/extensions:config.bzl", "scala_config", ) scala_config.settings(scala_version = SCALA_VERSION) scala_deps = use_extension( "@rules_scala//scala/extensions:deps.bzl", "scala_deps", ) scala_deps.scala() scala_deps.scalatest() scala_deps.scala_proto() # # Language Support - C++ # bazel_dep(name = "toolchains_llvm", version = "1.8.0") llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm") LLVM_VERSION = "22.1.8" LLVM_DISTRIBUTIONS = { "LLVM-22.1.8-Linux-ARM64.tar.xz": "805efad2bb91cb4967fa569e0881d10c0f69c04461cf671cccbae19f547acc34", "LLVM-22.1.8-Linux-X64.tar.xz": "df0e1ecf16caf3489a272a5eea4eec9b0d82878f6477fa309504f918a0006384", "LLVM-22.1.8-macOS-ARM64.tar.xz": "f260f4f7c0d430828a81ae8a3826a1d63fc0963ec2459489308cc23b1f7eab4f", } # Native toolchain (macOS -> macOS, Linux -> Linux) llvm.toolchain( name = "llvm_toolchain", extra_llvm_distributions = LLVM_DISTRIBUTIONS, llvm_version = LLVM_VERSION, ) # Cross-compilation toolchain (macOS -> Linux x86_64) # Uses the same LLVM distribution but with a Linux sysroot llvm.toolchain( name = "llvm_toolchain_linux", extra_llvm_distributions = LLVM_DISTRIBUTIONS, llvm_version = LLVM_VERSION, ) # Linux x86_64 sysroot for cross-compilation llvm.sysroot( name = "llvm_toolchain_linux", label = "@linux_sysroot//sysroot", targets = ["linux-x86_64"], ) # Cross-compilation toolchain (macOS -> Linux ARM64) llvm.toolchain( name = "llvm_toolchain_linux_arm64", extra_llvm_distributions = LLVM_DISTRIBUTIONS, llvm_version = LLVM_VERSION, ) # Linux ARM64 sysroot for cross-compilation llvm.sysroot( name = "llvm_toolchain_linux_arm64", label = "@linux_sysroot_arm64//sysroot", targets = ["linux-aarch64"], ) use_repo(llvm, "llvm_toolchain", "llvm_toolchain_linux", "llvm_toolchain_linux_arm64") # Download the Linux sysroots (Ubuntu 24.04 Noble for C++23 support) # Built by: .github/workflows/build_sysroot.yml # To rebuild: Run the "Build Linux Sysroot" workflow with a new version, then update sha256 and URL sysroot = use_repo_rule("@toolchains_llvm//toolchain:sysroot.bzl", "sysroot") # x86_64 sysroot sysroot( name = "linux_sysroot", sha256 = "a06475004fe8003ae7ccb4fe1d5511feb9b27cce4a8826eb1dfd686ed83f3dba", urls = ["https://eagle0-sysroot.sfo3.digitaloceanspaces.com/v3/ubuntu_noble_amd64_sysroot.tar.xz"], ) # ARM64 sysroot sysroot( name = "linux_sysroot_arm64", sha256 = "87469137737e09bc73855007dab835477eb10a7b3ce3f725f93f64e25747f3f9", urls = ["https://eagle0-sysroot.sfo3.digitaloceanspaces.com/v4/ubuntu_noble_arm64_sysroot.tar.xz"], ) # # Language Support - Go # bazel_dep(name = "rules_go", version = "0.62.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "gazelle", version = "0.52.2", repo_name = "bazel_gazelle") go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download(version = "1.25.11") use_repo(go_sdk, "go_default_sdk") go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps") go_deps.from_file(go_mod = "//:go.mod") use_repo( go_deps, "com_github_aws_aws_sdk_go_v2", "com_github_aws_aws_sdk_go_v2_config", "com_github_aws_aws_sdk_go_v2_credentials", "com_github_aws_aws_sdk_go_v2_service_s3", "com_github_golang_jwt_jwt_v5", "com_github_google_uuid", "com_github_webview_webview_go", "org_golang_google_grpc", "org_golang_google_protobuf", "org_golang_x_sys", ) # # Language Support - Rust # bazel_dep(name = "rules_rust", version = "0.72.0") rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain(edition = "2021") use_repo(rust, "rust_toolchains") register_toolchains("@rust_toolchains//:all") crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate") crate.from_cargo( name = "map_generator_crates", cargo_lockfile = "//src/main/rust/net/eagle0/eagle/map_generator:Cargo.lock", manifests = ["//src/main/rust/net/eagle0/eagle/map_generator:Cargo.toml"], ) use_repo(crate, "map_generator_crates") # # Platform Support - Apple/iOS # bazel_dep(name = "apple_support", version = "2.8.0", repo_name = "build_bazel_apple_support") bazel_dep(name = "rules_apple", version = "4.5.3", repo_name = "build_bazel_rules_apple") multiple_version_override( module_name = "rules_swift", versions = [ "2.1.1", "3.5.0", ], ) # Register Apple CC toolchain for Objective-C compilation apple_cc_configure = use_extension( "@build_bazel_apple_support//crosstool:setup.bzl", "apple_cc_configure_extension", ) use_repo(apple_cc_configure, "local_config_apple_cc", "local_config_apple_cc_toolchains") # # Protocol Buffers & RPC # bazel_dep(name = "protobuf", version = "35.1", repo_name = "com_google_protobuf") single_version_override( module_name = "protobuf", patch_strip = 1, patches = ["//third_party/protobuf/patches:rust_crates_dev_dependency.patch"], version = "35.1", ) # Use pre-built protoc binaries instead of compiling from source. # See: https://protobuf.dev/reference/cpp/cpp-generated/#invocation prebuilt_protoc = use_extension("@com_google_protobuf//bazel/private/oss/toolchains/prebuilt:protoc_extension.bzl", "protoc") use_repo( prebuilt_protoc, "prebuilt_protoc.linux_aarch_64", "prebuilt_protoc.linux_ppcle_64", "prebuilt_protoc.linux_s390_64", "prebuilt_protoc.linux_x86_32", "prebuilt_protoc.linux_x86_64", "prebuilt_protoc.osx_aarch_64", "prebuilt_protoc.osx_x86_64", "prebuilt_protoc.win32", "prebuilt_protoc.win64", ) bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_cc", version = "0.2.22") bazel_dep(name = "grpc", version = "1.83.0") # gRPC's generated upb module map trips Clang's layering check in the # Linux ARM64 cross-toolchain even though the normal Bazel deps are present. single_version_override( module_name = "grpc", patch_strip = 1, patches = ["//third_party/grpc/patches:disable_xds_client_layering_check.patch"], ) bazel_dep(name = "grpc-java", version = "1.82.0") bazel_dep(name = "rules_proto_grpc_csharp", version = "5.8.0") bazel_dep(name = "flatbuffers", version = "25.12.19") # # Testing # bazel_dep(name = "googletest", version = "1.17.0.bcr.2") # # Container Images (OCI) # bazel_dep(name = "rules_oci", version = "2.3.0") bazel_dep(name = "aspect_bazel_lib", version = "2.22.5") bazel_dep(name = "rules_distroless", version = "0.8.0") oci = use_extension("@rules_oci//oci:extensions.bzl", "oci") apt = use_extension("@rules_distroless//apt:extensions.bzl", "apt") apt.install( lock = "//ci:shardok_perf.lock.json", name = "shardok_perf", manifest = "//ci:shardok_perf.yaml", ) use_repo(apt, "shardok_perf") # Base image for Eagle (Java 25 JRE - smaller runtime, no dev tools needed) # Digest pinned for Bazel repository cache hit; update with: # TOKEN=$(curl -s "https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/eclipse-temurin:pull" | python3 -c "import json,sys; print(json.load(sys.stdin)['token'])") # curl -s -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.oci.image.index.v1+json,application/vnd.docker.distribution.manifest.list.v2+json" "https://registry-1.docker.io/v2/library/eclipse-temurin/manifests/25-jre" | python3 -c "import json,sys; m=json.load(sys.stdin); [print(p['digest']) for p in m.get('manifests',[]) if p['platform']['architecture']=='amd64']" oci.pull( name = "eclipse_temurin_25_jre", digest = "sha256:882787e465d6c0c4c08daa8d9e209d57ec052228eff8244c959f271af24ad27b", image = "docker.io/library/eclipse-temurin", platforms = ["linux/amd64"], tag = "26-jre", ) # Base image for JFR sidecar (Java 25 JDK - includes jcmd for JFR dumps) oci.pull( name = "eclipse_temurin_25_jdk", digest = "sha256:625889835aab66a096f999ee16cd7061ac846b155dc7adbed693686bbae5c59a", image = "docker.io/library/eclipse-temurin", platforms = ["linux/amd64"], tag = "26-jdk", ) # Base image for Shardok (Ubuntu 24.04 for C++ runtime) oci.pull( name = "ubuntu_24_04", image = "docker.io/library/ubuntu", platforms = [ "linux/amd64", "linux/arm64/v8", ], tag = "26.04", ) # Base image for Admin Server (Alpine for lightweight Go binary) oci.pull( name = "alpine_linux", digest = "sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b", image = "docker.io/library/alpine", platforms = ["linux/amd64"], tag = "3.24", ) use_repo(oci, "alpine_linux", "alpine_linux_linux_amd64", "eclipse_temurin_25_jdk", "eclipse_temurin_25_jdk_linux_amd64", "eclipse_temurin_25_jre", "eclipse_temurin_25_jre_linux_amd64", "ubuntu_24_04", "ubuntu_24_04_linux_amd64", "ubuntu_24_04_linux_arm64_v8") # # Java/Scala Dependencies # bazel_dep(name = "rules_java", version = "9.7.0") bazel_dep(name = "rules_jvm_external", version = "7.1") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( artifacts = [ # Netty "io.netty:netty-codec:%s" % NETTY_VERSION, "io.netty:netty-codec-http:%s" % NETTY_VERSION, "io.netty:netty-codec-socks:%s" % NETTY_VERSION, "io.netty:netty-codec-http2:%s" % NETTY_VERSION, "io.netty:netty-handler:%s" % NETTY_VERSION, "io.netty:netty-buffer:%s" % NETTY_VERSION, "io.netty:netty-transport:%s" % NETTY_VERSION, "io.netty:netty-resolver:%s" % NETTY_VERSION, "io.netty:netty-common:%s" % NETTY_VERSION, "io.netty:netty-handler-proxy:%s" % NETTY_VERSION, # ScalaPB "com.thesamet.scalapb:lenses_3:%s" % SCALAPB_VERSION, "com.thesamet.scalapb:scalapb-json4s_3:%s" % SCALAPB_JSON4S_VERSION, "com.thesamet.scalapb:scalapb-runtime_3:%s" % SCALAPB_VERSION, "com.thesamet.scalapb:scalapb-runtime-grpc_3:%s" % SCALAPB_VERSION, "com.thesamet.scalapb:compilerplugin_3:%s" % SCALAPB_VERSION, "com.thesamet.scalapb:protoc-bridge_3:0.9.10", # JSON "org.json4s:json4s-ast_3:4.1.0-M8", "org.json4s:json4s-core_3:4.1.0-M8", "org.json4s:json4s-native_3:4.1.0-M8", # Testing "org.scalamock:scalamock_3:7.5.5", # Developer tools "org.scalameta:scalafmt-cli_2.13:3.11.5", # AWS SDK "software.amazon.awssdk:s3-transfer-manager:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:s3:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:regions:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:aws-core:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:sdk-core:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:utils:%s" % AWS_SDK_VERSION, "software.amazon.awssdk:http-client-spi:%s" % AWS_SDK_VERSION, # AWS Lambda "com.amazonaws:aws-lambda-java-core:1.4.0", "com.amazonaws:aws-lambda-java-events:3.16.1", # Logging "org.slf4j:slf4j-api:%s" % SLF4J_VERSION, "org.slf4j:slf4j-simple:%s" % SLF4J_VERSION, # Other "org.reactivestreams:reactive-streams:1.0.4", "javax.xml.bind:jaxb-api:2.3.1", # OkHttp (for SSE with read timeout support, OAuth HTTP calls) "com.squareup.okhttp3:okhttp-jvm:5.4.0", "com.squareup.okhttp3:okhttp-sse:5.4.0", # JWT (for OAuth token handling) "com.nimbusds:nimbus-jose-jwt:10.9.1", # Error tracking "io.sentry:sentry:8.50.1", # SQLite for client text storage "org.xerial:sqlite-jdbc:3.53.2.1", # Postgres for production history benchmarking and migration work "com.zaxxer:HikariCP:7.1.0", "org.postgresql:postgresql:42.7.13", ], duplicate_version_warning = "error", fail_if_repin_required = True, known_contributing_modules = [ "grpc-java", "protobuf", ], lock_file = "//:maven_install.json", repositories = [ "https://repo.maven.apache.org/maven2", ], ) # json4s' Scala 3 reflection path can load scala.quoted.staging at runtime, but # its Maven metadata does not bring the staging jar transitively. maven.artifact( artifact = "scala3-staging_3", exclusions = ["org.scala-lang:scala3-compiler_3"], group = "org.scala-lang", version = SCALA_VERSION, ) # Force specific versions for dependencies with conflicts between grpc-java and protobuf maven.artifact( artifact = "gson", force_version = True, group = "com.google.code.gson", version = "2.14.0", ) maven.artifact( artifact = "error_prone_annotations", force_version = True, group = "com.google.errorprone", version = "2.50.0", ) maven.artifact( artifact = "guava", force_version = True, group = "com.google.guava", version = "33.6.0-jre", ) use_repo(maven, "maven", "unpinned_maven") # # External Libraries # http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") # GTL (for parallel_hashmap) GTL_VERSION = "1.2.0" GTL_SHA = "1969c45dd76eac0dd87e9e2b65cffe358617f4fe1bcd203f72f427742537913a" http_archive( name = "gtl", build_file_content = """ load("@rules_cc//cc:defs.bzl", "cc_library") cc_library( name = "gtl", hdrs = glob(["include/gtl/*.hpp"]), includes = ["include"], visibility = ["//visibility:public"], ) """, sha256 = GTL_SHA, strip_prefix = "gtl-%s" % GTL_VERSION, url = "https://github.com/greg7mdp/gtl/archive/refs/tags/v%s.zip" % GTL_VERSION, ) # Unity GoDice Plugin UNITY_GODICE_COMMIT = "18d6823991592e4d45fcc0f22692db849dea9063" UNITY_GODICE_SHA = "04e6ae4155965aab3372592e04061eba1256bb6ea7ccffd0d83f27574e5b3349" http_archive( name = "net_eagle0_unity_godice", sha256 = UNITY_GODICE_SHA, strip_prefix = "godice-framework-%s" % UNITY_GODICE_COMMIT, urls = [ "https://github.com/nolen777/godice-framework/archive/%s.zip" % UNITY_GODICE_COMMIT, ], ) # Sparkle framework for macOS auto-updates SPARKLE_VERSION = "2.9.3" http_archive( name = "sparkle", build_file = "//src/main/objc/net/eagle0/clients/unity/sparkle/external:BUILD.sparkle", sha256 = "74a07da821f92b79310009954c0e15f350173374a3abe39095b4fc5096916be6", strip_prefix = "", url = "https://github.com/sparkle-project/Sparkle/releases/download/%s/Sparkle-%s.tar.xz" % (SPARKLE_VERSION, SPARKLE_VERSION), ) # Busybox static binary for Docker health checks (provides nc, wget, etc.) # Primary: DigitalOcean Spaces (public, reliable) # Fallback: busybox.net (can be unreliable/slow) http_file( name = "busybox_x86_64", downloaded_file_path = "busybox", executable = True, sha256 = "6e123e7f3202a8c1e9b1f94d8941580a25135382b99e8d3e34fb858bba311348", urls = [ "https://eagle0-sysroot.sfo3.digitaloceanspaces.com/busybox/busybox-1.35.0-x86_64-linux-musl", "https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox", ], ) http_file( name = "busybox_aarch64", downloaded_file_path = "busybox", executable = True, sha256 = "141adb1b625a6f44c4b114f76b4387b4ea4f7ab802b88eb40e0d2f6adcccb1c3", urls = [ # TODO: Upload aarch64 binary to GitHub release when needed "https://busybox.net/downloads/binaries/1.35.0-aarch64-linux-musl/busybox", ], ) # LLVM MinGW toolchain for Windows cross-compilation from macOS # This provides a complete toolchain for building Windows executables including # the MinGW-w64 libraries needed for CGO cross-compilation LLVM_MINGW_VERSION = "20250305" http_archive( name = "llvm_mingw", build_file_content = """ package(default_visibility = ["//visibility:public"]) filegroup( name = "all_files", srcs = glob(["**/*"]), ) filegroup( name = "compiler_files", srcs = glob([ "bin/x86_64-w64-mingw32-*", "bin/clang*", "bin/llvm-*", "bin/lld*", ]), ) filegroup( name = "windows_x86_64_sysroot", srcs = glob([ "x86_64-w64-mingw32/**/*", "generic-w64-mingw32/include/**/*", ]), ) filegroup( name = "linker_files", srcs = glob([ "bin/x86_64-w64-mingw32-*", "bin/lld*", "bin/ld.lld*", "lib/**/*", "x86_64-w64-mingw32/lib/**/*", ]), ) exports_files([ "bin/x86_64-w64-mingw32-clang", "bin/x86_64-w64-mingw32-clang++", ]) """, sha256 = "32c24fc62fc8b9f8a900bf2c730b78b36767688f816f9d21e97a168289ff44e0", strip_prefix = "llvm-mingw-%s-ucrt-macos-14.4.1-universal" % LLVM_MINGW_VERSION, urls = ["https://github.com/fathonix/llvm-mingw-arm64ec-macos/releases/download/%s/llvm-mingw-%s-ucrt-macos-14.4.1-universal.tar.xz" % (LLVM_MINGW_VERSION, LLVM_MINGW_VERSION)], ) # # Toolchain Registration # register_toolchains( "//tools:unused_dependency_checker_error_and_opts_toolchain", "@rules_scala//testing:scalatest_toolchain", ) # Apple CC toolchain for Objective-C compilation (SparklePlugin). # Registered before LLVM so it has higher priority; Apple constraint matching # ensures it's only used for Apple-platform targets (objc_library, macos_bundle). register_toolchains("@local_config_apple_cc_toolchains//:all") # Set dev_dependency so we can turn this off for swift MacOS builds register_toolchains( "@llvm_toolchain//:all", "@llvm_toolchain_linux//:cc-toolchain-x86_64-linux", "@llvm_toolchain_linux_arm64//:cc-toolchain-aarch64-linux", dev_dependency = True, )