Skip to content

Commit 77137a8

Browse files
committed
Deduplicate Arch ARM handling with a macro
1 parent 55525d8 commit 77137a8

File tree

4 files changed

+29
-36
lines changed

4 files changed

+29
-36
lines changed

flowey/flowey/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
pub mod node {
1515
pub mod prelude {
1616
// include all user-facing types in the prelude
17+
pub use flowey_core::match_arch;
1718
pub use flowey_core::node::user_facing::*;
1819

1920
// ...in addition, export various types/traits that node impls are

flowey/flowey_core/src/node.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,20 @@ pub mod user_facing {
103103

104104
Ok(())
105105
}
106+
107+
/// Helper method to handle Linux distros that are supported only on one
108+
/// host architecture.
109+
/// match_arch!(var, arch, result)
110+
#[macro_export]
111+
macro_rules! match_arch {
112+
($host_arch:expr, $match_arch:pat, $expr:expr) => {
113+
if matches!($host_arch, $match_arch) {
114+
$expr
115+
} else {
116+
anyhow::bail!("Linux distro not supported on host arch {}", $host_arch);
117+
}
118+
};
119+
}
106120
}
107121

108122
/// Check if `ReadVar` / `WriteVar` instances are backed by the same underlying

flowey/flowey_lib_hvlite/src/init_cross_build.rs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,9 @@ impl FlowNode for Node {
6363
let pkg = match linux_distribution {
6464
FlowPlatformLinuxDistro::Fedora => "gcc-x86_64-linux-gnu",
6565
FlowPlatformLinuxDistro::Ubuntu => "gcc-x86-64-linux-gnu",
66-
FlowPlatformLinuxDistro::Arch => match host_arch {
67-
FlowArch::X86_64 => "gcc",
68-
FlowArch::Aarch64 => {
69-
anyhow::bail!("Arch Linux ARM is not supported")
70-
}
71-
_ => {
72-
anyhow::bail!("Unknown host arch")
73-
}
74-
},
66+
FlowPlatformLinuxDistro::Arch => {
67+
match_arch!(host_arch, FlowArch::X86_64, "gcc")
68+
}
7569
FlowPlatformLinuxDistro::Unknown => {
7670
anyhow::bail!("Unknown Linux distribution")
7771
}
@@ -87,15 +81,11 @@ impl FlowNode for Node {
8781
| FlowPlatformLinuxDistro::Ubuntu => {
8882
"gcc-aarch64-linux-gnu"
8983
}
90-
FlowPlatformLinuxDistro::Arch => match host_arch {
91-
FlowArch::X86_64 => "aarch64-linux-gnu-gcc",
92-
FlowArch::Aarch64 => {
93-
anyhow::bail!("Arch Linux ARM is not supported")
94-
}
95-
_ => {
96-
anyhow::bail!("Unknown host arch")
97-
}
98-
},
84+
FlowPlatformLinuxDistro::Arch => match_arch!(
85+
host_arch,
86+
FlowArch::X86_64,
87+
"aarch64-linux-gnu-gcc"
88+
),
9989
FlowPlatformLinuxDistro::Unknown => {
10090
anyhow::bail!("Unknown Linux distribution")
10191
}

flowey/flowey_lib_hvlite/src/run_split_debug_info.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,9 @@ impl SimpleFlowNode for Node {
4343
FlowPlatformLinuxDistro::Ubuntu => {
4444
("binutils-x86-64-linux-gnu", "x86_64-linux-gnu-objcopy")
4545
}
46-
FlowPlatformLinuxDistro::Arch => match host_arch {
47-
FlowArch::X86_64 => ("binutils", "objcopy"),
48-
FlowArch::Aarch64 => {
49-
anyhow::bail!("Arch Linux ARM is not supported")
50-
}
51-
_ => {
52-
anyhow::bail!("Unknown host arch")
53-
}
54-
},
46+
FlowPlatformLinuxDistro::Arch => {
47+
match_arch!(host_arch, FlowArch::X86_64, ("binutils", "objcopy"))
48+
}
5549
FlowPlatformLinuxDistro::Unknown => anyhow::bail!("Unknown Linux distribution"),
5650
},
5751
_ => anyhow::bail!("Unsupported platform"),
@@ -62,15 +56,9 @@ impl SimpleFlowNode for Node {
6256
FlowPlatformLinuxDistro::Fedora | FlowPlatformLinuxDistro::Ubuntu => {
6357
"binutils-aarch64-linux-gnu"
6458
}
65-
FlowPlatformLinuxDistro::Arch => match host_arch {
66-
FlowArch::X86_64 => "aarch64-linux-gnu-binutils",
67-
FlowArch::Aarch64 => {
68-
anyhow::bail!("Arch Linux ARM is not supported")
69-
}
70-
_ => {
71-
anyhow::bail!("Unknown host arch")
72-
}
73-
},
59+
FlowPlatformLinuxDistro::Arch => {
60+
match_arch!(host_arch, FlowArch::X86_64, "aarch64-linux-gnu-binutils")
61+
}
7462
FlowPlatformLinuxDistro::Unknown => {
7563
anyhow::bail!("Unknown Linux distribution")
7664
}

0 commit comments

Comments
 (0)