Skip to content

Commit 0b73ee5

Browse files
committed
allow specifying cc/cxx for llvm_offload subproject build
1 parent 7451185 commit 0b73ee5

File tree

4 files changed

+58
-29
lines changed

4 files changed

+58
-29
lines changed

src/bootstrap/src/core/build_steps/llvm.rs

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -939,34 +939,34 @@ impl Step for OmpOffload {
939939

940940
let out_dir = builder.llvm_out(target);
941941
static STAMP_HASH_MEMO: OnceLock<String> = OnceLock::new();
942-
//let smart_stamp_hash = STAMP_HASH_MEMO.get_or_init(|| {
943-
// generate_smart_stamp_hash(
944-
// builder,
945-
// &builder.config.src.join("src/llvm-project/offload"),
946-
// builder.offload_info.sha().unwrap_or_default(),
947-
// )
948-
//});
949-
//let stamp = BuildStamp::new(&out_dir).with_prefix("enzyme").add_stamp(smart_stamp_hash);
942+
let smart_stamp_hash = STAMP_HASH_MEMO.get_or_init(|| {
943+
generate_smart_stamp_hash(
944+
builder,
945+
&builder.config.src.join("src/llvm-project/offload"),
946+
builder.offload_info.sha().unwrap_or_default(),
947+
)
948+
});
949+
let stamp = BuildStamp::new(&out_dir).with_prefix("offload").add_stamp(smart_stamp_hash);
950950

951951
trace!("checking build stamp to see if we need to rebuild offload/openmp artifacts");
952-
//if stamp.is_up_to_date() {
953-
// trace!(?out_dir, "offload/openmp build artifacts are up to date");
954-
// if stamp.stamp().is_empty() {
955-
// builder.info(
956-
// "Could not determine the Offload submodule commit hash. \
957-
// Assuming that an Offload rebuild is not necessary.",
958-
// );
959-
// builder.info(&format!(
960-
// "To force Offload to rebuild, remove the file `{}`",
961-
// stamp.path().display()
962-
// ));
963-
// }
964-
// return out_dir;
965-
//}
966-
967-
trace!(?target, "(re)building offload artifacts");
968-
builder.info(&format!("Building Omp/Offload for {target}"));
969-
//t!(stamp.remove());
952+
if stamp.is_up_to_date() {
953+
trace!(?out_dir, "offload/openmp build artifacts are up to date");
954+
if stamp.stamp().is_empty() {
955+
builder.info(
956+
"Could not determine the Offload submodule commit hash. \
957+
Assuming that an Offload rebuild is not necessary.",
958+
);
959+
builder.info(&format!(
960+
"To force Offload/OpenMP to rebuild, remove the file `{}`",
961+
stamp.path().display()
962+
));
963+
}
964+
return out_dir;
965+
}
966+
967+
trace!(?target, "(re)building offload/openmp artifacts");
968+
builder.info(&format!("Building OpenMP/Offload for {target}"));
969+
t!(stamp.remove());
970970
let _time = helpers::timeit(builder);
971971
t!(fs::create_dir_all(&out_dir));
972972

@@ -984,6 +984,17 @@ impl Step for OmpOffload {
984984
};
985985
trace!(?profile);
986986

987+
let cc = if let Some(p) = &builder.build.config.llvm_offload_cc {
988+
p.clone()
989+
} else {
990+
builder.cc(target)
991+
};
992+
let cxx = if let Some(p) = &builder.build.config.llvm_offload_cxx {
993+
p.clone()
994+
} else {
995+
builder.cxx(target).unwrap()
996+
};
997+
987998
cfg.out_dir(&out_dir)
988999
.profile(profile)
9891000
.env("LLVM_CONFIG_REAL", &host_llvm_config)
@@ -997,9 +1008,8 @@ impl Step for OmpOffload {
9971008
// "CMAKE_CXX_COMPILER",
9981009
// "/tmp/drehwald1/prog/rust/build/x86_64-unknown-linux-gnu/llvm/bin/clang++",
9991010
//)
1000-
.define("CMAKE_C_COMPILER", builder.cc(target))
1001-
.define("CMAKE_CXX_COMPILER", builder.cxx(target).unwrap())
1002-
//.define("LLVM_DEFAULT_TARGET_TRIPLE", &target.triple)
1011+
.define("CMAKE_C_COMPILER", cc)
1012+
.define("CMAKE_CXX_COMPILER", cxx)
10031013
.define("OPENMP_STANDALONE_BUILD", "ON")
10041014
.define("LLVM_ROOT", builder.llvm_out(target).join("build"))
10051015
//.define(

src/bootstrap/src/core/config/config.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ pub struct Config {
169169
pub llvm_link_jobs: Option<u32>,
170170
pub llvm_version_suffix: Option<String>,
171171
pub llvm_use_linker: Option<String>,
172+
pub llvm_offload_cc: Option<PathBuf>,
173+
pub llvm_offload_cxx: Option<PathBuf>,
172174
pub llvm_allow_old_toolchain: bool,
173175
pub llvm_polly: bool,
174176
pub llvm_clang: bool,
@@ -290,6 +292,7 @@ pub struct Config {
290292
pub miri_info: channel::GitInfo,
291293
pub rustfmt_info: channel::GitInfo,
292294
pub enzyme_info: channel::GitInfo,
295+
pub offload_info: channel::GitInfo,
293296
pub in_tree_llvm_info: channel::GitInfo,
294297
pub in_tree_gcc_info: channel::GitInfo,
295298

@@ -601,6 +604,8 @@ impl Config {
601604
ldflags: llvm_ldflags,
602605
use_libcxx: llvm_use_libcxx,
603606
use_linker: llvm_use_linker,
607+
offload_cc: llvm_offload_cc,
608+
offload_cxx: llvm_offload_cxx,
604609
allow_old_toolchain: llvm_allow_old_toolchain,
605610
offload: llvm_offload,
606611
polly: llvm_polly,
@@ -1257,6 +1262,8 @@ impl Config {
12571262
let in_tree_gcc_info = git_info(&exec_ctx, false, &src.join("src/gcc"));
12581263
let in_tree_llvm_info = git_info(&exec_ctx, false, &src.join("src/llvm-project"));
12591264
let enzyme_info = git_info(&exec_ctx, omit_git_hash, &src.join("src/tools/enzyme"));
1265+
let offload_info =
1266+
git_info(&exec_ctx, omit_git_hash, &src.join("src/llvm-project/offload"));
12601267
let miri_info = git_info(&exec_ctx, omit_git_hash, &src.join("src/tools/miri"));
12611268
let rust_analyzer_info =
12621269
git_info(&exec_ctx, omit_git_hash, &src.join("src/tools/rust-analyzer"));
@@ -1320,6 +1327,7 @@ impl Config {
13201327
ehcont_guard: rust_ehcont_guard.unwrap_or(false),
13211328
enable_bolt_settings: flags_enable_bolt_settings,
13221329
enzyme_info,
1330+
offload_info,
13231331
exec_ctx,
13241332
explicit_stage_from_cli: flags_stage.is_some(),
13251333
explicit_stage_from_config,
@@ -1360,6 +1368,8 @@ impl Config {
13601368
llvm_enable_warnings: llvm_enable_warnings.unwrap_or(false),
13611369
llvm_enzyme: llvm_enzyme.unwrap_or(false),
13621370
llvm_experimental_targets,
1371+
llvm_offload_cc: llvm_offload_cc.map(PathBuf::from),
1372+
llvm_offload_cxx: llvm_offload_cxx.map(PathBuf::from),
13631373
llvm_from_ci,
13641374
llvm_ldflags,
13651375
llvm_libunwind_default: rust_llvm_libunwind

src/bootstrap/src/core/config/toml/llvm.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ define_config! {
3232
ldflags: Option<String> = "ldflags",
3333
use_libcxx: Option<bool> = "use-libcxx",
3434
use_linker: Option<String> = "use-linker",
35+
offload_cc: Option<String> = "offload-cc",
36+
offload_cxx: Option<String> = "offload-cxx",
3537
allow_old_toolchain: Option<bool> = "allow-old-toolchain",
3638
offload: Option<bool> = "offload",
3739
polly: Option<bool> = "polly",
@@ -110,6 +112,8 @@ pub fn check_incompatible_options_for_ci_llvm(
110112
ldflags,
111113
use_libcxx,
112114
use_linker,
115+
offload_cc,
116+
offload_cxx,
113117
allow_old_toolchain,
114118
offload,
115119
polly,

src/bootstrap/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,15 @@ pub struct Build {
212212
src: PathBuf,
213213
out: PathBuf,
214214
bootstrap_out: PathBuf,
215+
//offload_cc: PathBuf,
216+
//offload_cxx: PathBuf,
215217
cargo_info: GitInfo,
216218
rust_analyzer_info: GitInfo,
217219
clippy_info: GitInfo,
218220
miri_info: GitInfo,
219221
rustfmt_info: GitInfo,
220222
enzyme_info: GitInfo,
223+
offload_info: GitInfo,
221224
in_tree_llvm_info: GitInfo,
222225
in_tree_gcc_info: GitInfo,
223226
local_rebuild: bool,
@@ -476,6 +479,7 @@ impl Build {
476479
let miri_info = config.miri_info.clone();
477480
let rustfmt_info = config.rustfmt_info.clone();
478481
let enzyme_info = config.enzyme_info.clone();
482+
let offload_info = config.offload_info.clone();
479483
let in_tree_llvm_info = config.in_tree_llvm_info.clone();
480484
let in_tree_gcc_info = config.in_tree_gcc_info.clone();
481485

@@ -568,6 +572,7 @@ impl Build {
568572
miri_info,
569573
rustfmt_info,
570574
enzyme_info,
575+
offload_info,
571576
in_tree_llvm_info,
572577
in_tree_gcc_info,
573578
cc: HashMap::new(),

0 commit comments

Comments
 (0)