| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| [package] |
| name = "datafusion-jni" |
| version.workspace = true |
| edition.workspace = true |
| license.workspace = true |
| repository.workspace = true |
| # cdylib JNI artifact loaded by the JVM, not a crates.io library. |
| publish = false |
| |
| [lib] |
| # `rlib` alongside `cdylib` so `cargo test` has a Rust-level harness for |
| # native-only invariants (the error-classification tests now live in |
| # `datafusion-jni-common`). The `cdylib` is still the artifact the JVM loads. |
| crate-type = ["cdylib", "rlib"] |
| |
| [features] |
| # Object-store backends are on by default (per PR #73) so `make test` exercises |
| # them; downstream builds that strip a feature get a clear runtime error if a |
| # caller tries to register an unsupported backend. Substrait is opt-in: the |
| # transitive `substrait` crate's build script invokes its own `prost_build`, |
| # and our `build.rs`'s vendored `PROTOC` only applies to our own compilation, |
| # so making substrait default-on would force `protoc` on every clean build. |
| default = [ |
| "object-store-aws", |
| "object-store-gcp", |
| "object-store-http", |
| "spark", |
| ] |
| object-store-aws = ["object_store/aws"] |
| object-store-gcp = ["object_store/gcp"] |
| object-store-http = ["object_store/http"] |
| # Pulls in `datafusion-substrait` so `SessionContext.fromSubstrait(byte[])` can |
| # decode and execute Substrait plans. Enable explicitly: |
| # |
| # cargo build --features substrait # needs protoc on PATH |
| # cargo build --features substrait,protoc # vendor protoc via cmake |
| # |
| # The JNI handler throws a clear "feature not enabled" error from the JVM if |
| # invoked in a build that compiled the feature off, so the Java surface is |
| # unchanged either way. |
| substrait = ["dep:datafusion-substrait"] |
| # Forwards to `datafusion-substrait/protoc`, which uses `protobuf-src` (compiles |
| # protoc from source via cmake) so the substrait dependency stack does not |
| # require a system `protoc`. Useful for hermetic builds; requires cmake. |
| protoc = ["datafusion-substrait?/protoc"] |
| # Pulls in `tokio-metrics` so `SessionContext.runtimeStats()` returns real |
| # numbers from the underlying Tokio runtime. Off by default because |
| # `tokio-metrics` only compiles when `--cfg tokio_unstable` is set, and we |
| # don't want to force that flag onto every build. Enable explicitly: |
| # |
| # RUSTFLAGS="--cfg tokio_unstable" cargo build --features runtime-metrics |
| # |
| # The JNI handler returns a clear "feature not enabled" error from the JVM if |
| # invoked in a build that compiled the feature off, so the Java surface is |
| # unchanged either way. |
| runtime-metrics = ["dep:tokio-metrics"] |
| # Apache Spark-compatible functions, registered when a caller builds a |
| # context with `SessionContextBuilder.withSparkFunctions()`. On by default so |
| # Java callers don't have to think about features; builds that strip it get a |
| # clear runtime error from the JVM if the flag is requested. |
| spark = ["dep:datafusion-spark"] |
| |
| [dependencies] |
| arrow = { workspace = true } |
| async-trait = { workspace = true } |
| datafusion = { workspace = true, features = ["avro"] } |
| # Shared JNI plumbing (error->exception mapping, runtime singleton, |
| # StreamingReader). `avro` keeps the classifier's AvroError->IoException arm |
| # in sync with the `avro` feature on `datafusion` above. |
| datafusion-jni-common = { path = "../native-common", features = ["avro"] } |
| datafusion-proto = { workspace = true } |
| # Apache Spark-compatible functions + expression planners. Optional and |
| # gated behind the `spark` feature (in the default set). The `core` feature |
| # of the crate is what exposes `SessionStateBuilderSpark`. |
| datafusion-spark = { workspace = true, features = ["core"], optional = true } |
| datafusion-substrait = { workspace = true, optional = true } |
| futures = { workspace = true } |
| jni = { workspace = true } |
| object_store = { workspace = true } |
| prost = { workspace = true } |
| tokio = { workspace = true } |
| tokio-metrics = { workspace = true, optional = true } |
| url = { workspace = true } |
| |
| [build-dependencies] |
| prost-build = { workspace = true } |
| protoc-bin-vendored = { workspace = true } |