anki/rslib/BUILD.bazel
Damien Elmes ded626f0b9 render deck description with markdown; strip images
To support images on that screen, we'll first need to adjust the base url
for each platform, or rewrite the local image URLs, as otherwise they
are resolved to _anki/pages/...
2021-02-06 15:02:40 +10:00

211 lines
5.3 KiB
Python

# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
load("@rules_proto//proto:defs.bzl", "proto_library")
load("@io_bazel_rules_rust//rust:rust.bzl", "rust_binary", "rust_library", "rust_test")
load("@io_bazel_rules_rust//cargo:cargo_build_script.bzl", "cargo_build_script")
load(":rustfmt.bzl", "rustfmt_fix", "rustfmt_test")
load(":clang_format.bzl", "proto_format")
load("//ts:sql_format.bzl", "sql_format")
# Build script
#######################
cargo_build_script(
name = "build_script",
srcs = glob(["build/*.rs"]),
build_script_env = {
"BACKEND_PROTO": "$(location backend.proto)",
"PROTOC": "$(location @com_google_protobuf//:protoc)",
"RSLIB_FTL_ROOT": "$(location @rslib_ftl//:l10n.toml)",
"EXTRA_FTL_ROOT": "$(location @extra_ftl//:l10n.toml)",
"BAZEL": "1",
},
crate_root = "build/main.rs",
data = [
"//ftl",
"backend.proto",
"@com_google_protobuf//:protoc",
# bazel requires us to list these out separately
"@rslib_ftl//:l10n.toml",
"@extra_ftl//:l10n.toml",
],
deps = [
"//rslib/cargo:fluent_syntax",
"//rslib/cargo:prost_build",
],
)
# Library
#######################
_anki_compile_data = glob([
"src/**/*.sql",
"src/**/*.html",
"src/**/*.css",
"src/**/*.tex",
]) + [
"Cargo.toml", # prevents a warning about num_enum
"//:buildinfo.txt",
"templates/.empty", # required for askama
]
_anki_features = [
"translations",
]
_anki_rustc_env = {
"BUILDINFO": "$(location //:buildinfo.txt)",
}
rust_library(
name = "anki",
srcs = glob([
"src/**/*.rs",
]),
compile_data = _anki_compile_data,
crate_features = _anki_features,
proc_macro_deps = [
"//rslib/cargo:serde_derive",
"//rslib/cargo:serde_repr",
"//rslib/cargo:async_trait",
],
rustc_env = _anki_rustc_env,
visibility = ["//visibility:public"],
deps = [
":build_script",
"//rslib/cargo:ammonia",
"//rslib/cargo:askama",
"//rslib/cargo:async_compression",
"//rslib/cargo:blake3",
"//rslib/cargo:bytes",
"//rslib/cargo:chrono",
"//rslib/cargo:coarsetime",
"//rslib/cargo:failure",
"//rslib/cargo:flate2",
"//rslib/cargo:fluent",
"//rslib/cargo:futures",
"//rslib/cargo:hex",
"//rslib/cargo:htmlescape",
"//rslib/cargo:intl_memoizer",
"//rslib/cargo:itertools",
"//rslib/cargo:lazy_static",
"//rslib/cargo:nom",
"//rslib/cargo:num_enum",
"//rslib/cargo:num_format",
"//rslib/cargo:num_integer",
"//rslib/cargo:once_cell",
"//rslib/cargo:pin_project",
"//rslib/cargo:prost",
"//rslib/cargo:pulldown_cmark",
"//rslib/cargo:rand",
"//rslib/cargo:regex",
"//rslib/cargo:reqwest",
"//rslib/cargo:rusqlite",
"//rslib/cargo:scopeguard",
"//rslib/cargo:serde",
"//rslib/cargo:serde_aux",
"//rslib/cargo:serde_json",
"//rslib/cargo:serde_tuple",
"//rslib/cargo:sha1",
"//rslib/cargo:slog",
"//rslib/cargo:slog_async",
"//rslib/cargo:slog_envlogger",
"//rslib/cargo:slog_term",
"//rslib/cargo:tempfile",
"//rslib/cargo:tokio",
"//rslib/cargo:unic_langid",
"//rslib/cargo:unicase",
"//rslib/cargo:unicode_normalization",
"//rslib/cargo:utime",
"//rslib/cargo:zip",
],
)
# Tests
#######################
rust_test(
name = "unit_tests",
compile_data = _anki_compile_data,
crate = ":anki",
crate_features = _anki_features,
data = glob([
"tests/support/**",
]),
rustc_env = _anki_rustc_env,
deps = ["//rslib/cargo:env_logger"],
)
rustfmt_test(
name = "format_check",
srcs = glob([
"src/**/*.rs",
]),
)
rustfmt_fix(
name = "format",
srcs = glob([
"src/**/*.rs",
]),
)
sql_format(
name = "sql_format",
srcs = glob(["**/*.sql"]),
)
proto_format(
name = "proto_format",
srcs = ["backend.proto"],
)
# fluent.proto generation
###########################
# This separate step is required to make the file available to downstream consumers.
rust_binary(
name = "write_fluent_proto",
srcs = [
"build/mergeftl.rs",
"build/write_fluent_proto.rs",
],
deps = ["//rslib/cargo:fluent_syntax"],
)
genrule(
name = "fluent_proto",
srcs = [
"//ftl",
"//ftl:BUILD.bazel",
"//rslib/cargo:fluent_syntax",
"@rslib_ftl//:l10n.toml",
"@extra_ftl//:l10n.toml",
],
outs = ["fluent.proto"],
cmd = """\
RSLIB_FTL_ROOT="$(location @rslib_ftl//:l10n.toml)" \
EXTRA_FTL_ROOT="$(location @extra_ftl//:l10n.toml)" \
FTL_SRC="$(location //ftl:BUILD.bazel)" \
$(location :write_fluent_proto) $(location fluent.proto)""",
tools = [
":write_fluent_proto",
],
visibility = ["//visibility:public"],
)
proto_library(
name = "fluent_proto_lib",
srcs = ["fluent.proto"],
visibility = ["//visibility:public"],
)
proto_library(
name = "backend_proto_lib",
srcs = ["backend.proto"],
visibility = ["//visibility:public"],
)
exports_files(["backend.proto"])