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" bpf_dump_archive="bpf-dumps.tar.bz2"
rm -f "$bpf_dump_archive" 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 exit 0
;; ;;
test-stable-perf) test-stable-perf)

View File

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

View File

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

View File

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

View File

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