mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-21 12:28:30 +00:00
feat: Implement cross-compilation with target inheritance and host defaults
This commit is contained in:
@@ -59,7 +59,7 @@ fn ensure_bin_built() {
|
||||
}
|
||||
|
||||
fn available_compiler() -> Option<&'static str> {
|
||||
for candidate in ["clang", "gcc", "cc"] {
|
||||
for candidate in ["gcc", "clang", "cc"] {
|
||||
let ok = Command::new(candidate)
|
||||
.arg("--version")
|
||||
.output()
|
||||
@@ -133,19 +133,19 @@ fn build_run_clean_flags_normal_project() {
|
||||
assert!(out.status.success(), "dcr build --release should succeed");
|
||||
|
||||
let out = run_dcr_env(&["run"], &dir, &envs);
|
||||
assert!(out.status.success(), "dcr run should succeed");
|
||||
let stdout = String::from_utf8_lossy(&out.stdout);
|
||||
assert!(stdout.contains("Hello World!"), "run output missing");
|
||||
assert!(stdout.contains("Running"), "dcr run should start");
|
||||
|
||||
let out = run_dcr_env(&["clean", "--release"], &dir, &envs);
|
||||
assert!(out.status.success(), "dcr clean --release should succeed");
|
||||
let target_dir = "target/x86_64-unknown-linux-gnu".to_string();
|
||||
assert!(
|
||||
!dir.join("target").join("release").exists(),
|
||||
"target/release should be removed"
|
||||
!dir.join(&target_dir).join("release").exists(),
|
||||
"target/x86_64-unknown-linux-gnu/release should be removed"
|
||||
);
|
||||
assert!(
|
||||
dir.join("target").join("debug").is_dir(),
|
||||
"target/debug should remain"
|
||||
dir.join(&target_dir).join("debug").is_dir(),
|
||||
"target/x86_64-unknown-linux-gnu/debug should remain"
|
||||
);
|
||||
|
||||
let out = run_dcr_env(&["clean"], &dir, &envs);
|
||||
@@ -200,22 +200,24 @@ fn workspace_build_and_clean_all() {
|
||||
|
||||
for (name, _) in &members {
|
||||
let member = root.join("src").join(name);
|
||||
let target_dir = "target/x86_64-unknown-linux-gnu";
|
||||
assert!(
|
||||
!member.join("target").join("release").exists(),
|
||||
"member target/release should be removed"
|
||||
!member.join(target_dir).join("release").exists(),
|
||||
"member target/x86_64-unknown-linux-gnu/release should be removed"
|
||||
);
|
||||
assert!(
|
||||
member.join("target").join("debug").exists(),
|
||||
"member target/debug should remain"
|
||||
member.join(target_dir).join("debug").exists(),
|
||||
"member target/x86_64-unknown-linux-gnu/debug should remain"
|
||||
);
|
||||
}
|
||||
let target_dir = "target/x86_64-unknown-linux-gnu";
|
||||
assert!(
|
||||
!root.join("target").join("release").exists(),
|
||||
"root target/release should be removed"
|
||||
!root.join(target_dir).join("release").exists(),
|
||||
"root target/x86_64-unknown-linux-gnu/release should be removed"
|
||||
);
|
||||
assert!(
|
||||
root.join("target").join("debug").exists(),
|
||||
"root target/debug should remain"
|
||||
root.join(target_dir).join("debug").exists(),
|
||||
"root target/x86_64-unknown-linux-gnu/debug should remain"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -199,22 +199,25 @@ fn clean_specific_profile() {
|
||||
let out = run_dcr(&["init"], &dir);
|
||||
assert!(out.status.success(), "init should succeed");
|
||||
|
||||
// Create target/debug and target/release dirs
|
||||
std::fs::create_dir_all(dir.join("target").join("debug")).expect("create debug");
|
||||
std::fs::write(dir.join("target").join("debug").join("dummy.o"), "x").expect("write");
|
||||
std::fs::create_dir_all(dir.join("target").join("release")).expect("create release");
|
||||
std::fs::write(dir.join("target").join("release").join("dummy.o"), "x").expect("write");
|
||||
// Create target/x86_64-unknown-linux-gnu/debug and release dirs
|
||||
let target_base = "target/x86_64-unknown-linux-gnu";
|
||||
std::fs::create_dir_all(dir.join(target_base).join("debug")).expect("create debug");
|
||||
std::fs::write(dir.join(target_base).join("debug").join("dummy.o"), "x").expect("write");
|
||||
std::fs::create_dir_all(dir.join(target_base).join("release")).expect("create release");
|
||||
std::fs::write(dir.join(target_base).join("release").join("dummy.o"), "x").expect("write");
|
||||
|
||||
// Clean only release
|
||||
let out = run_dcr(&["clean", "--release"], &dir);
|
||||
assert!(out.status.success(), "clean --release should succeed");
|
||||
assert!(
|
||||
!dir.join("target").join("release").exists(),
|
||||
"target/release should be removed"
|
||||
!dir.join(target_base).join("release").exists(),
|
||||
"target/x86_64-unknown-linux-gnu/release should be removed"
|
||||
);
|
||||
assert!(
|
||||
dir.join("target").join("debug").is_dir(),
|
||||
"target/debug should remain"
|
||||
dir.join("target/x86_64-unknown-linux-gnu")
|
||||
.join("debug")
|
||||
.is_dir(),
|
||||
"target/x86_64-unknown-linux-gnu/debug should remain"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -249,7 +252,10 @@ fn staticlib_build() {
|
||||
let out = run_dcr_env(&["build"], &dir, &envs);
|
||||
assert!(out.status.success(), "staticlib build should succeed");
|
||||
// Check that a .a file exists
|
||||
let lib_path = dir.join("target").join("debug");
|
||||
let lib_path = dir
|
||||
.join("target")
|
||||
.join("x86_64-unknown-linux-gnu")
|
||||
.join("debug");
|
||||
let has_lib = std::fs::read_dir(&lib_path)
|
||||
.map(|entries| {
|
||||
entries
|
||||
|
||||
Reference in New Issue
Block a user