Skip to content

Commit 49756a5

Browse files
authored
Allow rust tvm build configuration through cargo features (#8665)
1 parent 338940d commit 49756a5

File tree

4 files changed

+284
-3
lines changed

4 files changed

+284
-3
lines changed

rust/tvm-rt/Cargo.toml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,55 @@ default = ["dynamic-linking"]
3333
dynamic-linking = ["tvm-sys/dynamic-linking"]
3434
static-linking = ["tvm-sys/static-linking"]
3535
standalone = ["tvm-sys/runtime-only"]
36+
runtime-only = ["tvm-sys/runtime-only"]
3637
blas = ["ndarray/blas"]
38+
# Enabling any of the following features is like setting the value to "ON" in config.cmake.
39+
use-cuda = ["tvm-sys/use-cuda"]
40+
use-opencl = ["tvm-sys/use-opencl"]
41+
use-vulkan = ["tvm-sys/use-vulkan"]
42+
use-metal = ["tvm-sys/use-metal"]
43+
use-rocm = ["tvm-sys/use-rocm"]
44+
use-hexagon-device = ["tvm-sys/use-hexagon-device"]
45+
use-rpc = ["tvm-sys/use-rpc"]
46+
use-threads = ["tvm-sys/use-threads"]
47+
use-llvm = ["tvm-sys/use-llvm"]
48+
use-stackvm-runtime = ["tvm-sys/use-stackvm-runtime"]
49+
use-graph-runtime = ["tvm-sys/use-graph-runtime"]
50+
use-graph-runtime-debug = ["tvm-sys/use-graph-runtime-debug"]
51+
use-openmp = ["tvm-sys/use-openmp"]
52+
use-relay-debug = ["tvm-sys/use-relay-debug"]
53+
use-rtti = ["tvm-sys/use-rtti"]
54+
use-mscv-mt = ["tvm-sys/use-mscv-mt"]
55+
use-micro = ["tvm-sys/use-micro"]
56+
use-install-dev = ["tvm-sys/use-install-dev"]
57+
hide-private-symbols = ["tvm-sys/hide-private-symbols"]
58+
use-fallback-stl-map = ["tvm-sys/use-fallback-stl-map"]
59+
use-ethosn = ["tvm-sys/use-ethosn"]
60+
use-index-default-i64 = ["tvm-sys/use-index-default-i64"]
61+
use-tf-tvmdsoop = ["tvm-sys/use-tf-tvmdsoop"]
62+
use-byodt-posit = ["tvm-sys/use-byodt-posit"]
63+
use-mkl = ["tvm-sys/use-mkl"]
64+
use-mkldnn = ["tvm-sys/use-mkldnn"]
65+
use-dnnl-codegen = ["tvm-sys/use-dnnl-codegen"]
66+
use-cudnn = ["tvm-sys/use-cudnn"]
67+
use-cublas = ["tvm-sys/use-cublas"]
68+
use-thrust = ["tvm-sys/use-thrust"]
69+
use-miopen = ["tvm-sys/use-miopen"]
70+
use-rocblas = ["tvm-sys/use-rocblas"]
71+
use-sort = ["tvm-sys/use-sort"]
72+
use-nnpack = ["tvm-sys/use-nnpack"]
73+
use-random = ["tvm-sys/use-random"]
74+
use-micro-standalone-runtime = ["tvm-sys/use-micro-standalone-runtime"]
75+
use-cpp-rpc = ["tvm-sys/use-cpp-rpc"]
76+
use-tflite = ["tvm-sys/use-tflite"]
77+
use-coreml = ["tvm-sys/use-coreml"]
78+
use-target-onnx = ["tvm-sys/use-target-onnx"]
79+
use-arm-compute-lib = ["tvm-sys/use-arm-compute-lib"]
80+
use-arm-compute-lib-graph-runtime = ["tvm-sys/use-arm-compute-lib-graph-runtime"]
81+
use-tensorrt-codegen = ["tvm-sys/use-tensorrt-codegen"]
82+
use-tensorrt-runtime = ["tvm-sys/use-tensorrt-runtime"]
83+
use-vitis-ai = ["tvm-sys/use-vitis-ai"]
84+
build-static-runtime = ["tvm-sys/build-static-runtime"]
3785

3886
[dependencies]
3987
thiserror = "^1.0"

rust/tvm-sys/Cargo.toml

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,53 @@ default = ["dynamic-linking"]
2828
static-linking = []
2929
dynamic-linking = []
3030
runtime-only = []
31+
# Enabling any of the following features is like setting the value to "ON" in config.cmake.
32+
use-cuda = []
33+
use-opencl = []
34+
use-vulkan = []
35+
use-metal = []
36+
use-rocm = []
37+
use-hexagon-device = []
38+
use-rpc = []
39+
use-threads = []
40+
use-llvm = []
41+
use-stackvm-runtime = []
42+
use-graph-runtime = []
43+
use-graph-runtime-debug = []
44+
use-openmp = []
45+
use-relay-debug = []
46+
use-rtti = []
47+
use-mscv-mt = []
48+
use-micro = []
49+
use-install-dev = []
50+
hide-private-symbols = []
51+
use-fallback-stl-map = []
52+
use-ethosn = []
53+
use-index-default-i64 = []
54+
use-tf-tvmdsoop = []
55+
use-byodt-posit = []
56+
use-mkl = []
57+
use-mkldnn = []
58+
use-dnnl-codegen = []
59+
use-cudnn = []
60+
use-cublas = []
61+
use-thrust = []
62+
use-miopen = []
63+
use-rocblas = []
64+
use-sort = []
65+
use-nnpack = []
66+
use-random = []
67+
use-micro-standalone-runtime = []
68+
use-cpp-rpc = []
69+
use-tflite = []
70+
use-coreml = []
71+
use-target-onnx = []
72+
use-arm-compute-lib = []
73+
use-arm-compute-lib-graph-runtime = []
74+
use-tensorrt-codegen = []
75+
use-tensorrt-runtime = []
76+
use-vitis-ai = []
77+
build-static-runtime = []
3178

3279
[dependencies]
3380
thiserror = "^1.0"
@@ -38,4 +85,4 @@ enumn = "^0.1"
3885
[build-dependencies]
3986
bindgen = { version="0.57", default-features = false, features = ["runtime"] }
4087
anyhow = "^1.0"
41-
tvm-build = "0.1"
88+
tvm-build = "0.2.1"

rust/tvm-sys/build.rs

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919

2020
extern crate bindgen;
2121

22-
use std::path::{Path, PathBuf};
22+
use std::{path::{Path, PathBuf}, str::FromStr};
2323

2424
use anyhow::{Context, Result};
25-
use tvm_build::BuildConfig;
25+
use tvm_build::{BuildConfig, CMakeSetting};
2626

2727
/// The necessary information for detecting a TVM installation.
2828
struct TVMInstall {
@@ -59,6 +59,146 @@ fn find_using_tvm_build() -> Result<TVMInstall> {
5959
let mut build_config = BuildConfig::default();
6060
build_config.repository = Some("https://github.com/apache/tvm".to_string());
6161
build_config.branch = Some(option_env!("TVM_BRANCH").unwrap_or("main").into());
62+
63+
if cfg!(feature = "use-cuda") {
64+
build_config.settings.use_cuda = CMakeSetting::from_str("on").ok();
65+
}
66+
if cfg!(feature = "use-opencl") {
67+
build_config.settings.use_opencl = CMakeSetting::from_str("on").ok();
68+
}
69+
if cfg!(feature = "use-vulkan") {
70+
build_config.settings.use_vulkan = CMakeSetting::from_str("on").ok();
71+
}
72+
if cfg!(feature = "use-rocm") {
73+
build_config.settings.use_rocm = CMakeSetting::from_str("on").ok();
74+
}
75+
if cfg!(feature = "use-metal") {
76+
build_config.settings.use_metal = CMakeSetting::from_str("on").ok();
77+
}
78+
if cfg!(feature = "use-hexagon-device") {
79+
build_config.settings.use_hexagon_device = Some(true);
80+
}
81+
if cfg!(feature = "use-rpc") {
82+
build_config.settings.use_rpc = Some(true);
83+
}
84+
if cfg!(feature = "use-threads") {
85+
build_config.settings.use_threads = Some(true);
86+
}
87+
if cfg!(feature = "use-llvm") {
88+
build_config.settings.use_llvm = CMakeSetting::from_str("on").ok();
89+
}
90+
if cfg!(feature = "use-stackvm-runtime") {
91+
build_config.settings.use_stackvm_runtime = Some(true);
92+
}
93+
if cfg!(feature = "use-graph-runtime") {
94+
build_config.settings.use_graph_runtime = Some(true);
95+
}
96+
if cfg!(feature = "use-graph-runtime-debug") {
97+
build_config.settings.use_graph_runtime_debug = Some(true);
98+
}
99+
if cfg!(feature = "use-openmp") {
100+
build_config.settings.use_openmp = Some(true);
101+
}
102+
if cfg!(feature = "use-relay-debug") {
103+
build_config.settings.use_relay_debug = Some(true);
104+
}
105+
if cfg!(feature = "use-rtti") {
106+
build_config.settings.use_rtti = Some(true);
107+
}
108+
if cfg!(feature = "use-mscv-mt") {
109+
build_config.settings.use_mscv_mt = Some(true);
110+
}
111+
if cfg!(feature = "use-micro") {
112+
build_config.settings.use_micro = Some(true);
113+
}
114+
if cfg!(feature = "use-install-dev") {
115+
build_config.settings.use_install_dev = Some(true);
116+
}
117+
if cfg!(feature = "hide_private-symbols") {
118+
build_config.settings.hide_private_symbols = Some(true);
119+
}
120+
if cfg!(feature = "use-fallback-stl-map") {
121+
build_config.settings.use_fallback_stl_map = Some(true);
122+
}
123+
if cfg!(feature = "use-ethosn") {
124+
build_config.settings.use_ethosn = Some(true);
125+
}
126+
if cfg!(feature = "use-index_default-i64") {
127+
build_config.settings.use_index_default_i64 = Some(true);
128+
}
129+
if cfg!(feature = "use-tf-tvmdsoop") {
130+
build_config.settings.use_tf_tvmdsoop = Some(true);
131+
}
132+
if cfg!(feature = "use-byodt-posit") {
133+
build_config.settings.use_byodt_posit = Some(true);
134+
}
135+
if cfg!(feature = "use-mkl") {
136+
build_config.settings.use_mkl = CMakeSetting::from_str("on").ok();
137+
}
138+
if cfg!(feature = "use-mkldnn") {
139+
build_config.settings.use_mkldnn = CMakeSetting::from_str("on").ok();
140+
}
141+
if cfg!(feature = "use-dnnl-codegen") {
142+
build_config.settings.use_dnnl_codegen = Some(true);
143+
}
144+
if cfg!(feature = "use-cudnn") {
145+
build_config.settings.use_cudnn = Some(true);
146+
}
147+
if cfg!(feature = "use-cublas") {
148+
build_config.settings.use_cublas = Some(true);
149+
}
150+
if cfg!(feature = "use-thrust") {
151+
build_config.settings.use_thrust = Some(true);
152+
}
153+
if cfg!(feature = "use-miopen") {
154+
build_config.settings.use_miopen = Some(true);
155+
}
156+
if cfg!(feature = "use-rocblas") {
157+
build_config.settings.use_rocblas = Some(true);
158+
}
159+
if cfg!(feature = "use-sort") {
160+
build_config.settings.use_sort = Some(true);
161+
}
162+
if cfg!(feature = "use-nnpack") {
163+
build_config.settings.use_nnpack = Some(true);
164+
}
165+
if cfg!(feature = "use-random") {
166+
build_config.settings.use_random = Some(true);
167+
}
168+
if cfg!(feature = "use-micro-standalone-runtime") {
169+
build_config.settings.use_micro_standalone_runtime = Some(true);
170+
}
171+
if cfg!(feature = "use-cpp-rpc") {
172+
build_config.settings.use_cpp_rpc = Some(true);
173+
}
174+
if cfg!(feature = "use-tflite") {
175+
build_config.settings.use_tflite = Some(true);
176+
}
177+
if cfg!(feature = "use-coreml") {
178+
build_config.settings.use_coreml = Some(true);
179+
}
180+
if cfg!(feature = "use-target-onnx") {
181+
build_config.settings.use_target_onnx = Some(true);
182+
}
183+
if cfg!(feature = "use-arm-compute-lib") {
184+
build_config.settings.use_arm_compute_lib = Some(true);
185+
}
186+
if cfg!(feature = "use-arm-compute-lib-graph-runtime") {
187+
build_config.settings.use_arm_compute_lib_graph_runtime = CMakeSetting::from_str("on").ok();
188+
}
189+
if cfg!(feature = "use-tensorrt-codegen") {
190+
build_config.settings.use_tensorrt_codegen = Some(true);
191+
}
192+
if cfg!(feature = "use-tensorrt-runtime") {
193+
build_config.settings.use_tensorrt_runtime = CMakeSetting::from_str("on").ok();
194+
}
195+
if cfg!(feature = "use-vitis-ai") {
196+
build_config.settings.use_vitis_ai = Some(true);
197+
}
198+
if cfg!(any(feature = "static-linking", feature = "build-static-runtime")) {
199+
build_config.settings.build_static_runtime = Some(true);
200+
}
201+
62202
let build_result = tvm_build::build(build_config)?;
63203
let source_path = build_result.revision.source_path();
64204
let build_path = build_result.revision.build_path();

rust/tvm/Cargo.toml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,52 @@ dynamic-linking = ["tvm-rt/dynamic-linking"]
3434
static-linking = ["tvm-rt/static-linking"]
3535
blas = ["ndarray/blas"]
3636
python = ["pyo3"]
37+
# Enabling any of the following features is like setting the value to "ON" in config.cmake.
38+
use-cuda = ["tvm-rt/use-cuda"]
39+
use-opencl = ["tvm-rt/use-opencl"]
40+
use-vulkan = ["tvm-rt/use-vulkan"]
41+
use-metal = ["tvm-rt/use-metal"]
42+
use-rocm = ["tvm-rt/use-rocm"]
43+
use-hexagon-device = ["tvm-rt/use-hexagon-device"]
44+
use-rpc = ["tvm-rt/use-rpc"]
45+
use-threads = ["tvm-rt/use-threads"]
46+
use-llvm = ["tvm-rt/use-llvm"]
47+
use-stackvm-runtime = ["tvm-rt/use-stackvm-runtime"]
48+
use-graph-runtime = ["tvm-rt/use-graph-runtime"]
49+
use-graph-runtime-debug = ["tvm-rt/use-graph-runtime-debug"]
50+
use-openmp = ["tvm-rt/use-openmp"]
51+
use-relay-debug = ["tvm-rt/use-relay-debug"]
52+
use-rtti = ["tvm-rt/use-rtti"]
53+
use-mscv-mt = ["tvm-rt/use-mscv-mt"]
54+
use-micro = ["tvm-rt/use-micro"]
55+
use-install-dev = ["tvm-rt/use-install-dev"]
56+
hide-private-symbols = ["tvm-rt/hide-private-symbols"]
57+
use-fallback-stl-map = ["tvm-rt/use-fallback-stl-map"]
58+
use-ethosn = ["tvm-rt/use-ethosn"]
59+
use-index-default-i64 = ["tvm-rt/use-index-default-i64"]
60+
use-tf-tvmdsoop = ["tvm-rt/use-tf-tvmdsoop"]
61+
use-byodt-posit = ["tvm-rt/use-byodt-posit"]
62+
use-mkl = ["tvm-rt/use-mkl"]
63+
use-mkldnn = ["tvm-rt/use-mkldnn"]
64+
use-dnnl-codegen = ["tvm-rt/use-dnnl-codegen"]
65+
use-cudnn = ["tvm-rt/use-cudnn"]
66+
use-cublas = ["tvm-rt/use-cublas"]
67+
use-thrust = ["tvm-rt/use-thrust"]
68+
use-miopen = ["tvm-rt/use-miopen"]
69+
use-rocblas = ["tvm-rt/use-rocblas"]
70+
use-sort = ["tvm-rt/use-sort"]
71+
use-nnpack = ["tvm-rt/use-nnpack"]
72+
use-random = ["tvm-rt/use-random"]
73+
use-micro-standalone-runtime = ["tvm-rt/use-micro-standalone-runtime"]
74+
use-cpp-rpc = ["tvm-rt/use-cpp-rpc"]
75+
use-tflite = ["tvm-rt/use-tflite"]
76+
use-coreml = ["tvm-rt/use-coreml"]
77+
use-target-onnx = ["tvm-rt/use-target-onnx"]
78+
use-arm-compute-lib = ["tvm-rt/use-arm-compute-lib"]
79+
use-arm-compute-lib-graph-runtime = ["tvm-rt/use-arm-compute-lib-graph-runtime"]
80+
use-tensorrt-codegen = ["tvm-rt/use-tensorrt-codegen"]
81+
use-tensorrt-runtime = ["tvm-rt/use-tensorrt-runtime"]
82+
use-vitis-ai = ["tvm-rt/use-vitis-ai"]
3783

3884
[dependencies.tvm-rt]
3985
version = "0.1.0-alpha"

0 commit comments

Comments
 (0)