Skip to content

Commit 4e185cd

Browse files
committed
offload: build bin crates as cdylib on the device side
1 parent b24f47a commit 4e185cd

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

‎compiler/rustc_interface/src/passes.rs‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use rustc_parse::lexer::StripTokens;
3636
use rustc_parse::{new_parser_from_file, new_parser_from_source_str, unwrap_or_emit_fatal};
3737
use rustc_passes::{abi_test, input_stats, layout_test};
3838
use rustc_resolve::{Resolver, ResolverOutputs};
39-
use rustc_session::config::{Input, OutFileName, OutputFilenames, OutputType};
39+
use rustc_session::config::{Input, Offload, OutFileName, OutputFilenames, OutputType};
4040
use rustc_session::diagnostics::feature_err;
4141
use rustc_session::output::{filename_for_input, invalid_output_for_target};
4242
use rustc_session::search_paths::PathKind;
@@ -1491,6 +1491,16 @@ pub fn collect_crate_types(
14911491
}
14921492
}
14931493

1494+
// GPU code is never run as a binary; the offload runtime looks up kernels by
1495+
// name, and only cdylibs export their symbols.
1496+
if session.opts.unstable_opts.offload.iter().any(|o| matches!(o, Offload::Device(_))) {
1497+
for crate_type in &mut base {
1498+
if *crate_type == CrateType::Executable {
1499+
*crate_type = CrateType::Cdylib;
1500+
}
1501+
}
1502+
}
1503+
14941504
base.retain(|crate_type| {
14951505
if invalid_output_for_target(session, *crate_type) {
14961506
session.dcx().emit_warn(diagnostics::UnsupportedCrateTypeForTarget {

0 commit comments

Comments
 (0)