Compile for bpf target for compatibility when cargo-build-bpf is used

This commit is contained in:
Dmitri Makarov 2022-07-13 16:44:53 -07:00 committed by Dmitri Makarov
parent 3fc161bea4
commit 27cee7a7de
5 changed files with 65 additions and 16 deletions

View File

@ -90,7 +90,7 @@ test-stable-bpf)
bpf_dump_archive="bpf-dumps.tar.bz2"
rm -f "$bpf_dump_archive"
tar cjvf "$bpf_dump_archive" "${bpf_target_path}"/{deploy/*.txt,sbf-solana-solana/release/*.so}
tar cjvf "$bpf_dump_archive" "${bpf_target_path}"/{deploy/*.txt,bpfel-unknown-unknown/release/*.so}
exit 0
;;
test-stable-perf)

View File

@ -26,6 +26,8 @@ fn main() {
args.remove(0);
}
}
args.push("--arch".to_string());
args.push("bpf".to_string());
print!("cargo-build-bpf child: {}", program.display());
for a in &args {
print!(" {}", a);

View File

@ -316,7 +316,11 @@ fn check_undefined_symbols(config: &Config, program: &Path) {
let readelf = config
.sbf_sdk
.join("dependencies")
.join("sbf-tools")
.join(if config.arch == "bpf" {
"bpf-tools"
} else {
"sbf-tools"
})
.join("llvm")
.join("bin")
.join("llvm-readelf");
@ -355,7 +359,11 @@ fn link_sbf_toolchain(config: &Config) {
let toolchain_path = config
.sbf_sdk
.join("dependencies")
.join("sbf-tools")
.join(if config.arch == "bpf" {
"bpf-tools"
} else {
"sbf-tools"
})
.join("rust");
let rustup = PathBuf::from("rustup");
let rustup_args = vec!["toolchain", "list", "-v"];
@ -369,12 +377,16 @@ fn link_sbf_toolchain(config: &Config) {
}
let mut do_link = true;
for line in rustup_output.lines() {
if line.starts_with("sbf") {
if line.starts_with(if config.arch == "bpf" { "bpf" } else { "sbf" }) {
let mut it = line.split_whitespace();
let _ = it.next();
let path = it.next();
if path.unwrap() != toolchain_path.to_str().unwrap() {
let rustup_args = vec!["toolchain", "uninstall", "sbf"];
let rustup_args = vec![
"toolchain",
"uninstall",
if config.arch == "bpf" { "bpf" } else { "sbf" },
];
let output = spawn(
&rustup,
&rustup_args,
@ -390,7 +402,12 @@ fn link_sbf_toolchain(config: &Config) {
}
}
if do_link {
let rustup_args = vec!["toolchain", "link", "sbf", toolchain_path.to_str().unwrap()];
let rustup_args = vec![
"toolchain",
"link",
if config.arch == "bpf" { "bpf" } else { "sbf" },
toolchain_path.to_str().unwrap(),
];
let output = spawn(
&rustup,
&rustup_args,
@ -447,7 +464,13 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m
.cloned()
.unwrap_or_else(|| target_directory.join("deploy"));
let target_build_directory = target_directory.join("sbf-solana-solana").join("release");
let target_build_directory = target_directory
.join(if config.arch == "bpf" {
"bpfel-unknown-unknown"
} else {
"sbf-solana-solana"
})
.join("release");
env::set_current_dir(&root_package_dir).unwrap_or_else(|err| {
error!(
@ -468,9 +491,19 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m
info!("Legacy program feature detected");
}
let sbf_tools_download_file_name = if cfg!(target_os = "windows") {
"solana-sbf-tools-windows.tar.bz2"
if config.arch == "bpf" {
"solana-bpf-tools-windows.tar.bz2"
} else {
"solana-sbf-tools-windows.tar.bz2"
}
} else if cfg!(target_os = "macos") {
"solana-sbf-tools-osx.tar.bz2"
if config.arch == "bpf" {
"solana-bpf-tools-osx.tar.bz2"
} else {
"solana-sbf-tools-osx.tar.bz2"
}
} else if config.arch == "bpf" {
"solana-bpf-tools-linux.tar.bz2"
} else {
"solana-sbf-tools-linux.tar.bz2"
};
@ -479,7 +512,11 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m
error!("Can't get home directory path: {}", err);
exit(1);
}));
let package = "sbf-tools";
let package = if config.arch == "bpf" {
"bpf-tools"
} else {
"sbf-tools"
};
let target_path = home_dir
.join(".cache")
.join("solana")
@ -512,7 +549,11 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m
let llvm_bin = config
.sbf_sdk
.join("dependencies")
.join("sbf-tools")
.join(if config.arch == "bpf" {
"bpf-tools"
} else {
"sbf-tools"
})
.join("llvm")
.join("bin");
env::set_var("CC", llvm_bin.join("clang"));
@ -557,11 +598,15 @@ fn build_sbf_package(config: &Config, target_directory: &Path, package: &cargo_m
let cargo_build = PathBuf::from("cargo");
let mut cargo_build_args = vec![
"+sbf",
if config.arch == "bpf" { "+bpf" } else { "+sbf" },
"build",
"--target",
"sbf-solana-solana",
"--release",
"--target",
if config.arch == "bpf" {
"bpfel-unknown-unknown"
} else {
"sbf-solana-solana"
},
];
if config.arch == "sbfv2" {
cargo_build_args.push("-Zbuild-std=std,panic_abort");
@ -852,7 +897,7 @@ fn main() {
.arg(
Arg::new("arch")
.long("arch")
.possible_values(&["sbf", "sbfv2"])
.possible_values(&["bpf", "sbf", "sbfv2"])
.default_value("sbf")
.help("Build for the given SBF version"),
)

View File

@ -32,6 +32,8 @@ fn main() {
args.remove(0);
}
}
args.push("--arch".to_string());
args.push("bpf".to_string());
print!("cargo-test-bpf child: {}", program.display());
for a in &args {
print!(" {}", a);

View File

@ -319,7 +319,7 @@ fn main() {
.arg(
Arg::new("arch")
.long("arch")
.possible_values(&["sbf", "sbfv2"])
.possible_values(&["bpf", "sbf", "sbfv2"])
.default_value("sbf")
.help("Build for the given SBF version"),
)