# 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 = "teaclave_executor"
version = "0.5.0"
authors = ["Teaclave Contributors <dev@teaclave.apache.org>"]
description = "Teaclave executor"
license = "Apache-2.0"
edition = "2021"

[lib]
name = "teaclave_executor"
crate-type = ["staticlib", "rlib"]

[features]
default = []
mesalock_sgx = [
  "teaclave_types/mesalock_sgx",
  "teaclave_crypto/mesalock_sgx",
  "teaclave_runtime/mesalock_sgx",
  "teaclave_function/mesalock_sgx",
  "teaclave_executor_context/mesalock_sgx",
]
cov = ["sgx_cov"]
enclave_unit_test = [
  "teaclave_test_utils/mesalock_sgx",
  "teaclave_runtime/mesalock_sgx",
]

# Enable builtin functions for the builtin executor

full_builtin_function = [
  "builtin_echo",
  "builtin_face_detection",
  "builtin_gbdt_predict",
  "builtin_gbdt_train",
  "builtin_logistic_regression_predict",
  "builtin_logistic_regression_train",
  "builtin_password_check",
  "builtin_online_decrypt",
  "builtin_ordered_set_intersect",
  "builtin_principal_components_analysis",
  "builtin_private_join_and_compute",
  "builtin_rsa_sign",
]

builtin_echo = []
builtin_face_detection = []
builtin_gbdt_predict = []
builtin_gbdt_train = []
builtin_logistic_regression_predict = []
builtin_logistic_regression_train = []
builtin_password_check = []
builtin_online_decrypt = []
builtin_ordered_set_intersect = []
builtin_principal_components_analysis = []
builtin_private_join_and_compute = []
builtin_rsa_sign = []

[dependencies]
log           = { version = "0.4.17", features = ["release_max_level_info"] }
anyhow        = { version = "1.0.26" }
serde_json    = { version = "1.0.39" }
serde         = { version = "1.0.92", features = ["derive"] }
thiserror     = { version = "1.0.9" }
gbdt          = { version = "0.1.0", features = ["input", "enable_training"] }
rusty-machine = { version = "0.5.4" }
itertools     = { version = "0.8.0", default-features = false }

teaclave_types      = { path = "../types" }
teaclave_crypto     = { path = "../crypto" }
teaclave_runtime    = { path = "../runtime", optional = true }
teaclave_test_utils = { path = "../tests/utils", optional = true }
teaclave_function   = { path = "../function" }
teaclave_executor_context = { path = "./context" }

sgx_cov       = { version = "2.0.0", optional = true }

[target.'cfg(not(target_vendor = "teaclave"))'.dependencies]
sgx_types     = { version = "2.0.0" }
