-
Notifications
You must be signed in to change notification settings - Fork 374
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
16 changed files
with
375 additions
and
0 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
[package] | ||
name = "re_types" | ||
authors.workspace = true | ||
description = "The standard Rerun data types, component types, and archetypes." | ||
edition.workspace = true | ||
homepage.workspace = true | ||
include.workspace = true | ||
license.workspace = true | ||
publish = true | ||
readme = "README.md" | ||
repository.workspace = true | ||
rust-version.workspace = true | ||
version.workspace = true | ||
|
||
|
||
[package.metadata.docs.rs] | ||
all-features = true | ||
|
||
|
||
[features] | ||
default = [] | ||
|
||
## Enable color conversions. | ||
ecolor = ["dep:ecolor"] | ||
|
||
## Add support for some math operations using [`glam`](https://crates.io/crates/glam/). | ||
glam = ["dep:glam", "dep:macaw"] | ||
|
||
|
||
[dependencies] | ||
|
||
# External | ||
arrow2 = { workspace = true, features = [ | ||
"io_ipc", | ||
"io_print", | ||
"compute_concatenate", | ||
] } | ||
bytemuck = { version = "1.11", features = ["derive", "extern_crate_alloc"] } | ||
document-features = "0.2" | ||
|
||
# External (optional) | ||
ecolor = { workspace = true, optional = true } | ||
glam = { workspace = true, optional = true } | ||
macaw = { workspace = true, optional = true } | ||
|
||
|
||
[dev-dependencies] | ||
|
||
# External | ||
glam.workspace = true | ||
itertools.workspace = true | ||
|
||
|
||
[build-dependencies] | ||
|
||
# Rerun | ||
re_build_tools.workspace = true | ||
re_types_builder.workspace = true | ||
|
||
# External | ||
xshell = "0.2" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# re_types | ||
|
||
Part of the [`rerun`](https://github.com/rerun-io/rerun) family of crates. | ||
|
||
[![Latest version](https://img.shields.io/crates/v/re_types.svg)](https://crates.io/crates/re_types) | ||
[![Documentation](https://docs.rs/re_types/badge.svg)](https://docs.rs/re_types) | ||
![MIT](https://img.shields.io/badge/license-MIT-blue.svg) | ||
![Apache](https://img.shields.io/badge/license-Apache-blue.svg) | ||
|
||
The standard Rerun data types, component types, and archetypes. | ||
|
||
This crate includes both the language-agnostic definitions (flatbuffers IDL) as well as the generated code. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
//! Generates Rust & Python code from flatbuffers definitions. | ||
use xshell::{cmd, Shell}; | ||
|
||
use re_build_tools::{ | ||
compute_crate_hash, compute_dir_hash, compute_strings_hash, is_tracked_env_var_set, iter_dir, | ||
read_versioning_hash, rerun_if_changed, rerun_if_changed_or_doesnt_exist, | ||
write_versioning_hash, | ||
}; | ||
|
||
// NOTE: Don't need to add extra context to xshell invocations, it does so on its own. | ||
|
||
// --- | ||
|
||
const SOURCE_HASH_PATH: &str = "./source_hash.txt"; | ||
const DEFINITIONS_DIR_PATH: &str = "./definitions"; | ||
const RUST_OUTPUT_DIR_PATH: &str = "."; | ||
const PYTHON_OUTPUT_DIR_PATH: &str = "../../rerun_py/rerun2"; | ||
|
||
fn main() { | ||
if std::env::var("CI").is_ok() { | ||
// Don't run on CI! | ||
// | ||
// The code we're generating here is actual source code that gets committed into the | ||
// repository. | ||
return; | ||
} | ||
|
||
if !is_tracked_env_var_set("IS_IN_RERUN_WORKSPACE") { | ||
// Only run if we are in the rerun workspace, not on users machines. | ||
return; | ||
} | ||
if is_tracked_env_var_set("RERUN_IS_PUBLISHING") { | ||
// We don't need to rebuild - we should have done so beforehand! | ||
// See `RELEASES.md` | ||
return; | ||
} | ||
|
||
rerun_if_changed_or_doesnt_exist(SOURCE_HASH_PATH); | ||
for path in iter_dir(DEFINITIONS_DIR_PATH, Some(&[".fbs"])) { | ||
rerun_if_changed(&path); | ||
} | ||
|
||
// NOTE: We need to hash both the flatbuffers definitions as well as the source code of the | ||
// code generator itself! | ||
let re_types_builder_hash = compute_crate_hash("re_types_builder"); | ||
let cur_hash = read_versioning_hash(SOURCE_HASH_PATH); | ||
let new_hash = compute_dir_hash(DEFINITIONS_DIR_PATH, Some(&[".fbs"])); | ||
let new_hash_final = compute_strings_hash(&[&re_types_builder_hash, &new_hash]); | ||
|
||
// Leave these be please, very useful when debugging. | ||
eprintln!("re_types_builder_hash: {re_types_builder_hash:?}"); | ||
eprintln!("cur_hash: {cur_hash:?}"); | ||
eprintln!("new_hash: {new_hash:?}"); | ||
eprintln!("new_hash_final: {new_hash_final:?}"); | ||
|
||
if let Some(cur_hash) = cur_hash { | ||
if cur_hash == new_hash_final { | ||
// Neither the source of the code generator nor the IDL definitions have changed, no need | ||
// to do anything at this point. | ||
return; | ||
} | ||
} | ||
|
||
let sh = Shell::new().unwrap(); | ||
|
||
re_types_builder::generate_rust_code( | ||
DEFINITIONS_DIR_PATH, | ||
RUST_OUTPUT_DIR_PATH, | ||
"./definitions/rerun/archetypes.fbs", | ||
); | ||
|
||
// NOTE: We're purposefully ignoring the error here. | ||
// | ||
// In the very unlikely chance that the user doesn't have `cargo` in their $PATH, there's | ||
// still no good reason to fail the build. | ||
// | ||
// The CI will catch the unformatted files at PR time and complain appropriately anyhow. | ||
cmd!(sh, "cargo fmt").run().ok(); | ||
|
||
re_types_builder::generate_python_code( | ||
DEFINITIONS_DIR_PATH, | ||
PYTHON_OUTPUT_DIR_PATH, | ||
"./definitions/rerun/archetypes.fbs", | ||
); | ||
|
||
// NOTE: We're purposefully ignoring the error here. | ||
// | ||
// If the user doesn't have `black` in their $PATH, there's still no good reason to fail | ||
// the build. | ||
// | ||
// The CI will catch the unformatted files at PR time and complain appropriately anyhow. | ||
cmd!(sh, "black {PYTHON_OUTPUT_DIR_PATH}").run().ok(); | ||
|
||
// NOTE: We're purposefully ignoring the error here. | ||
// | ||
// If the user doesn't have `ruff` in their $PATH, there's still no good reason to fail | ||
// the build. | ||
// | ||
// The CI will catch the unformatted files at PR time and complain appropriately anyhow. | ||
cmd!(sh, "ruff --fix {PYTHON_OUTPUT_DIR_PATH}").run().ok(); | ||
|
||
write_versioning_hash(SOURCE_HASH_PATH, new_hash_final); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace arrow; | ||
|
||
/// Marks a union as sparse from Arrow's standpoint, affecting its Arrow datatype. | ||
/// | ||
/// Only applies to unions. | ||
attribute "arrow.attr.sparse_union"; | ||
|
||
/// Marks a single-field object as transparent from Arrow's standpoint, affecting its Arrow | ||
/// datatype. | ||
/// | ||
/// This is generally most useful for getting rid of extraneous `struct` layers. | ||
attribute "arrow.attr.transparent"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
namespace fbs.attributes; | ||
|
||
/// Mandatory attribute that applies to all kinds of objects: structs, enums, unions and even the | ||
/// fields within. | ||
/// | ||
/// This defines a stable order between objects of the same kind, e.g. the order in which fields of a | ||
/// struct should be laid out when generating code. | ||
/// This is always required since flatbuffers works entirely with unordered maps internally, which | ||
/// would results in flaky code generation. | ||
/// | ||
/// In unions, this effectively defines the arrow type of each variant, since that depends on the | ||
/// fields's order! | ||
/// | ||
/// NOTE: We do not use flatbuffers' builtin `id` attribute as it only works on `table`s, whereas we | ||
/// need a stable order for all kinds of things. | ||
attribute "order"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/// Unions cannot directly refer to scalar types, they need to be wrapped in a struct or table | ||
/// first. | ||
/// This package provides pre-wrapped scalars that will be automatically flattened down to their | ||
/// inner type by our parsers. | ||
namespace fbs.scalars; | ||
|
||
/// Flattens down to a 32-bit float. | ||
struct Float32 { | ||
v: float; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
namespace python.attributes; | ||
|
||
/// Marks a field as transparent, meaning its type will be replaced by the underlying type. | ||
/// | ||
/// Only applies to field whose types have a single-field. | ||
attribute "python.attr.transparent"; | ||
|
||
/// Defines the type aliases for a component, e.g. the types that make up `ComponentLike`. | ||
/// | ||
/// Only applies to structs/unions that are components. | ||
attribute "python.attr.aliases"; | ||
|
||
/// Defines the array type aliases for a component, e.g. the types that make up `ComponentArrayLike`. | ||
/// | ||
/// Only applies to structs/unions that are components. | ||
attribute "python.attr.array_aliases"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
namespace rerun.archetypes; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
namespace rust.attributes; | ||
|
||
/// Apply to a struct or table object to generate a tuple struct. | ||
/// | ||
/// The type definition of the target object must have exactly a single field. | ||
attribute "rust.attr.tuple_struct"; | ||
|
||
/// Apply to any object to generate a #derive clause. | ||
/// | ||
/// The value of the attribute will be trimmed out but otherwise left as-is. | ||
/// E.g. "rust.attr.derive": "Debug, Clone, Copy"`. | ||
attribute "rust.attr.derive"; | ||
|
||
/// Apply to any object to generate a #repr clause with the specified value. | ||
attribute "rust.attr.repr"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# This is a sha256 hash for all direct and indirect dependencies of this crate's build script. | ||
# It can be safely removed at anytime to force the build script to run again. | ||
# Check out build.rs to see how it's computed. | ||
e4b94e84d8869a38e732e777b6ab8e7d4ae7780e04cc3c89512e444cdda5ee50 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
// NOTE: This file was autogenerated by re_types_builder; DO NOT EDIT. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
// NOTE: This file was autogenerated by re_types_builder; DO NOT EDIT. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
// NOTE: This file was autogenerated by re_types_builder; DO NOT EDIT. |
Oops, something went wrong.