Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.

Commit 7e2d730

Browse files
authored
build2cmake: cxx-flags option for C++ compile flags for kernels (#171)
1 parent 4e244cf commit 7e2d730

5 files changed

Lines changed: 43 additions & 10 deletions

File tree

build2cmake/src/config/v2.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,21 @@ pub enum Kernel {
9090
Cuda {
9191
cuda_capabilities: Option<Vec<String>>,
9292
cuda_flags: Option<Vec<String>>,
93+
cxx_flags: Option<Vec<String>>,
9394
depends: Vec<Dependencies>,
9495
include: Option<Vec<String>>,
9596
src: Vec<String>,
9697
},
9798
#[serde(rename_all = "kebab-case")]
9899
Metal {
100+
cxx_flags: Option<Vec<String>>,
99101
depends: Vec<Dependencies>,
100102
include: Option<Vec<String>>,
101103
src: Vec<String>,
102104
},
103105
#[serde(rename_all = "kebab-case")]
104106
Rocm {
107+
cxx_flags: Option<Vec<String>>,
105108
depends: Vec<Dependencies>,
106109
rocm_archs: Option<Vec<String>>,
107110
include: Option<Vec<String>>,
@@ -110,11 +113,19 @@ pub enum Kernel {
110113
}
111114

112115
impl Kernel {
116+
pub fn cxx_flags(&self) -> Option<&[String]> {
117+
match self {
118+
Kernel::Cuda { cxx_flags, .. }
119+
| Kernel::Metal { cxx_flags, .. }
120+
| Kernel::Rocm { cxx_flags, .. } => cxx_flags.as_deref(),
121+
}
122+
}
123+
113124
pub fn include(&self) -> Option<&[String]> {
114125
match self {
115-
Kernel::Cuda { include, .. } => include.as_deref(),
116-
Kernel::Metal { include, .. } => include.as_deref(),
117-
Kernel::Rocm { include, .. } => include.as_deref(),
126+
Kernel::Cuda { include, .. }
127+
| Kernel::Metal { include, .. }
128+
| Kernel::Rocm { include, .. } => include.as_deref(),
118129
}
119130
}
120131

@@ -128,17 +139,15 @@ impl Kernel {
128139

129140
pub fn depends(&self) -> &[Dependencies] {
130141
match self {
131-
Kernel::Cuda { depends, .. } => depends,
132-
Kernel::Metal { depends, .. } => depends,
133-
Kernel::Rocm { depends, .. } => depends,
142+
Kernel::Cuda { depends, .. }
143+
| Kernel::Metal { depends, .. }
144+
| Kernel::Rocm { depends, .. } => depends,
134145
}
135146
}
136147

137148
pub fn src(&self) -> &[String] {
138149
match self {
139-
Kernel::Cuda { src, .. } => src,
140-
Kernel::Metal { src, .. } => src,
141-
Kernel::Rocm { src, .. } => src,
150+
Kernel::Cuda { src, .. } | Kernel::Metal { src, .. } | Kernel::Rocm { src, .. } => src,
142151
}
143152
}
144153
}
@@ -233,6 +242,7 @@ fn convert_kernels(v1_kernels: HashMap<String, v1::Kernel>) -> Result<HashMap<St
233242
kernels.insert(
234243
format!("{name}_rocm"),
235244
Kernel::Rocm {
245+
cxx_flags: None,
236246
rocm_archs: kernel.rocm_archs,
237247
depends: kernel.depends.clone(),
238248
include: kernel.include.clone(),
@@ -246,6 +256,7 @@ fn convert_kernels(v1_kernels: HashMap<String, v1::Kernel>) -> Result<HashMap<St
246256
Kernel::Cuda {
247257
cuda_capabilities: kernel.cuda_capabilities,
248258
cuda_flags: None,
259+
cxx_flags: None,
249260
depends: kernel.depends,
250261
include: kernel.include,
251262
src: kernel.src,

build2cmake/src/templates/cuda/kernel.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ if(GPU_LANG STREQUAL "CUDA")
3232
endforeach()
3333
{% endif %}
3434

35+
{% if cxx_flags %}
36+
foreach(_KERNEL_SRC {{'${' + kernel_name + '_SRC}'}})
37+
set_property(
38+
SOURCE ${_KERNEL_SRC}
39+
APPEND PROPERTY
40+
COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:CXX>:{{ cxx_flags }}>"
41+
)
42+
endforeach()
43+
{% endif %}
44+
3545
list(APPEND SRC {{'"${' + kernel_name + '_SRC}"'}})
3646
{% if supports_hipify %}
3747
elseif(GPU_LANG STREQUAL "HIP")

build2cmake/src/templates/metal/kernel.cmake

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,20 @@ set_source_files_properties(
2222
PROPERTIES INCLUDE_DIRECTORIES "{{ includes }}")
2323
{% endif %}
2424

25+
{% if cxx_flags %}
26+
foreach(_KERNEL_SRC {{'${' + kernel_name + '_CPP_SRC}'}})
27+
set_property(
28+
SOURCE ${_KERNEL_SRC}
29+
APPEND PROPERTY
30+
COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:CXX>:{{ cxx_flags }}>"
31+
)
32+
endforeach()
33+
{% endif %}
34+
2535
# Add C++ sources to main source list
2636
list(APPEND SRC {{'"${' + kernel_name + '_CPP_SRC}"'}})
2737

2838
# Keep track of Metal sources for later compilation
2939
if({{kernel_name}}_METAL_SRC)
3040
list(APPEND ALL_METAL_SOURCES {{'"${' + kernel_name + '_METAL_SRC}"'}})
31-
endif()
41+
endif()

build2cmake/src/torch/cuda.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ pub fn render_kernel(
314314
context! {
315315
cuda_capabilities => cuda_capabilities,
316316
cuda_flags => cuda_flags.map(|flags| flags.join(";")),
317+
cxx_flags => kernel.cxx_flags().map(|flags| flags.join(";")),
317318
rocm_archs => rocm_archs,
318319
includes => kernel.include().map(prefix_and_join_includes),
319320
kernel_name => kernel_name,

build2cmake/src/torch/metal.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ pub fn render_kernel(
158158
.wrap_err("Cannot get kernel template")?
159159
.render_to_write(
160160
context! {
161+
cxx_flags => kernel.cxx_flags().map(|flags| flags.join(";")),
161162
includes => kernel.include().map(prefix_and_join_includes),
162163
kernel_name => kernel_name,
163164
sources => sources,

0 commit comments

Comments
 (0)