mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 22:35:42 +00:00
517 lines
16 KiB
Python
517 lines
16 KiB
Python
module(name = "net_eagle0")
|
|
|
|
# Version constants
|
|
SCALA_VERSION = "3.7.4"
|
|
|
|
NETTY_VERSION = "4.1.127.Final"
|
|
|
|
SCALAPB_VERSION = "1.0.0-alpha.1"
|
|
|
|
AWS_SDK_VERSION = "2.41.18"
|
|
|
|
#
|
|
# Core Build Tools
|
|
#
|
|
|
|
bazel_dep(name = "bazel_skylib", version = "1.9.0")
|
|
bazel_dep(name = "platforms", version = "1.0.0")
|
|
bazel_dep(name = "rules_pkg", version = "1.2.0")
|
|
|
|
#
|
|
# Language Support - Scala
|
|
#
|
|
|
|
bazel_dep(name = "rules_scala", version = "7.2.1")
|
|
|
|
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.6.0")
|
|
|
|
llvm = use_extension("@toolchains_llvm//toolchain/extensions:llvm.bzl", "llvm")
|
|
|
|
# Native toolchain (macOS -> macOS, Linux -> Linux)
|
|
llvm.toolchain(
|
|
name = "llvm_toolchain",
|
|
llvm_version = "20.1.4",
|
|
)
|
|
|
|
# Cross-compilation toolchain (macOS -> Linux x86_64)
|
|
# Uses the same LLVM distribution but with a Linux sysroot
|
|
llvm.toolchain(
|
|
name = "llvm_toolchain_linux",
|
|
llvm_version = "20.1.4",
|
|
)
|
|
|
|
# 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",
|
|
llvm_version = "20.1.4",
|
|
)
|
|
|
|
# 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.59.0", repo_name = "io_bazel_rules_go")
|
|
bazel_dep(name = "gazelle", version = "0.47.0", repo_name = "bazel_gazelle")
|
|
|
|
go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk")
|
|
go_sdk.download(version = "1.23.3")
|
|
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.68.1")
|
|
|
|
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:extension.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 = "1.24.1", repo_name = "build_bazel_apple_support")
|
|
bazel_dep(name = "rules_apple", version = "4.3.3", repo_name = "build_bazel_rules_apple")
|
|
|
|
# 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 = "33.5", repo_name = "com_google_protobuf")
|
|
|
|
# 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: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.14")
|
|
bazel_dep(name = "grpc", version = "1.78.0")
|
|
|
|
# Patch grpc 1.78.0 to fix rules_python incompatibility: grpc requests Python
|
|
# 3.14.0b2 toolchain but rules_python >= 1.6.0 removed it in favor of 3.14.
|
|
# Upstream fix: https://github.com/grpc/grpc/commit/459279b
|
|
# TODO: Remove this override once a fixed grpc version is published to BCR.
|
|
single_version_override(
|
|
module_name = "grpc",
|
|
patch_strip = 1,
|
|
patches = ["//third_party/patches:grpc_fix_python_version.patch"],
|
|
version = "1.78.0",
|
|
)
|
|
|
|
bazel_dep(name = "grpc-java", version = "1.78.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")
|
|
|
|
#
|
|
# Container Images (OCI)
|
|
#
|
|
|
|
bazel_dep(name = "rules_oci", version = "2.2.7")
|
|
bazel_dep(name = "aspect_bazel_lib", version = "2.22.5")
|
|
|
|
oci = use_extension("@rules_oci//oci:extensions.bzl", "oci")
|
|
|
|
# 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:98236ffdfb61cff3fc4f8e40e5b80460a5a4c35a0f56a5b4182a926844a7db49",
|
|
image = "docker.io/library/eclipse-temurin",
|
|
platforms = ["linux/amd64"],
|
|
tag = "25-jre",
|
|
)
|
|
|
|
# Base image for JFR sidecar (Java 25 JDK - includes jcmd for JFR dumps)
|
|
oci.pull(
|
|
name = "eclipse_temurin_25_jdk",
|
|
digest = "sha256:bc2d562355813350f47bc472b9721b0b84761866671ad95d9a9f1151fa69da6e",
|
|
image = "docker.io/library/eclipse-temurin",
|
|
platforms = ["linux/amd64"],
|
|
tag = "25-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 = "24.04",
|
|
)
|
|
|
|
# Base image for Admin Server (Alpine for lightweight Go binary)
|
|
oci.pull(
|
|
name = "alpine_linux",
|
|
image = "docker.io/library/alpine",
|
|
platforms = ["linux/amd64"],
|
|
tag = "3.21",
|
|
)
|
|
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.3.0")
|
|
bazel_dep(name = "rules_jvm_external", version = "6.10")
|
|
|
|
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_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.9",
|
|
|
|
# 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.4.1",
|
|
|
|
# Developer tools
|
|
"org.scalameta:scalafmt-cli_2.13:3.9.9",
|
|
|
|
# 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.2.3",
|
|
"com.amazonaws:aws-lambda-java-events:3.13.0",
|
|
|
|
# Logging
|
|
"org.slf4j:slf4j-api:2.0.16",
|
|
"org.slf4j:slf4j-simple:2.0.16",
|
|
|
|
# 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:4.12.0",
|
|
"com.squareup.okhttp3:okhttp-sse:4.12.0",
|
|
|
|
# JWT (for OAuth token handling)
|
|
"com.nimbusds:nimbus-jose-jwt:9.37.3",
|
|
|
|
# Error tracking
|
|
"io.sentry:sentry:8.31.0",
|
|
|
|
# SQLite for client text storage
|
|
"org.xerial:sqlite-jdbc:3.46.1.0",
|
|
],
|
|
duplicate_version_warning = "error",
|
|
fail_if_repin_required = True,
|
|
lock_file = "//:maven_install.json",
|
|
repositories = [
|
|
"https://repo1.maven.org/maven2",
|
|
],
|
|
)
|
|
|
|
# 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.11.0",
|
|
)
|
|
maven.artifact(
|
|
artifact = "error_prone_annotations",
|
|
force_version = True,
|
|
group = "com.google.errorprone",
|
|
version = "2.30.0",
|
|
)
|
|
maven.artifact(
|
|
artifact = "guava",
|
|
force_version = True,
|
|
group = "com.google.guava",
|
|
version = "33.3.1-android",
|
|
)
|
|
|
|
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 = """
|
|
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.6.4"
|
|
|
|
http_archive(
|
|
name = "sparkle",
|
|
build_file = "//src/main/objc/net/eagle0/clients/unity/sparkle/external:BUILD.sparkle",
|
|
sha256 = "50612a06038abc931f16011d7903b8326a362c1074dabccb718404ce8e585f0b",
|
|
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",
|
|
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",
|
|
],
|
|
downloaded_file_path = "busybox",
|
|
executable = True,
|
|
)
|
|
|
|
http_file(
|
|
name = "busybox_aarch64",
|
|
sha256 = "141adb1b625a6f44c4b114f76b4387b4ea4f7ab802b88eb40e0d2f6adcccb1c3",
|
|
urls = [
|
|
# TODO: Upload aarch64 binary to GitHub release when needed
|
|
"https://busybox.net/downloads/binaries/1.35.0-aarch64-linux-musl/busybox",
|
|
],
|
|
downloaded_file_path = "busybox",
|
|
executable = True,
|
|
)
|
|
|
|
# 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//:all",
|
|
"@llvm_toolchain_linux_arm64//:all",
|
|
dev_dependency = True,
|
|
)
|