# 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("@rules_rust//rust:rust.bzl", "rust_binary", "rust_library", "rust_test") load("@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: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:async_trait", "//rslib/cargo:serde_derive", "//rslib/cargo:serde_repr", ], 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:fnv", "//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_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:strum", "//rslib/cargo:tempfile", "//rslib/cargo:tokio", "//rslib/cargo:unic_langid", "//rslib/cargo:unicase", "//rslib/cargo:unicode_normalization", "//rslib/cargo:utime", "//rslib/cargo:zip", "//rslib/i18n:anki_i18n", ], ) # Tests ####################### rust_test( name = "anki_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", "//rslib/i18n:anki_i18n", ], ) 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"], ) # backend.proto ####################### proto_library( name = "backend_proto_lib", srcs = ["backend.proto"], visibility = ["//visibility:public"], ) exports_files(["backend.proto"])