Add surgical linker to cli_run tests that don't use rust

This commit is contained in:
Brendan Hansknecht 2021-09-24 13:43:00 -07:00
parent 1fba3702a8
commit eae8a2ea37
5 changed files with 29 additions and 5 deletions

View file

@ -18,6 +18,13 @@ mod cli_run {
#[cfg(not(debug_assertions))] #[cfg(not(debug_assertions))]
use roc_collections::all::MutMap; use roc_collections::all::MutMap;
#[cfg(target_os = "linux")]
const TEST_SURGICAL_LINKER: bool = true;
// Surgical linker currently only supports linux.
#[cfg(not(target_os = "linux"))]
const TEST_SURGICAL_LINKER: bool = false;
#[cfg(not(target_os = "macos"))] #[cfg(not(target_os = "macos"))]
const ALLOW_VALGRIND: bool = true; const ALLOW_VALGRIND: bool = true;
@ -136,7 +143,6 @@ mod cli_run {
); );
} }
} }
/// This macro does two things. /// This macro does two things.
/// ///
/// First, it generates and runs a separate test for each of the given /// First, it generates and runs a separate test for each of the given
@ -184,6 +190,24 @@ mod cli_run {
example.expected_ending, example.expected_ending,
example.use_valgrind, example.use_valgrind,
); );
// Also check with the surgical linker.
if TEST_SURGICAL_LINKER {
if matches!(example.executable_filename, "echo" | "hello-rust") {
eprintln!("WARNING: skipping testing example {} with surgical linking because rust is currently not supported!", example.filename);
return;
}
check_output_with_stdin(
&file_name,
example.stdin,
example.executable_filename,
&["--roc-linker"],
example.expected_ending,
example.use_valgrind,
);
}
} }
)* )*
@ -228,7 +252,7 @@ mod cli_run {
}, },
hello_rust:"hello-rust" => Example { hello_rust:"hello-rust" => Example {
filename: "Hello.roc", filename: "Hello.roc",
executable_filename: "hello-world", executable_filename: "hello-rust",
stdin: &[], stdin: &[],
expected_ending:"Hello, World!\n", expected_ending:"Hello, World!\n",
use_valgrind: true, use_valgrind: true,

View file

@ -1 +1 @@
hello-world hello-rust

View file

@ -1,4 +1,4 @@
app "hello-world" app "hello-rust"
packages { base: "platform" } packages { base: "platform" }
imports [] imports []
provides [ main ] to base provides [ main ] to base

View file

@ -31,7 +31,6 @@ This linker is run in 2 phases: preprocessing and surigical linking.
## TODO (In a lightly prioritized order) ## TODO (In a lightly prioritized order)
- Run CLI tests and/or benchmarks with the Roc Linker.
- Test with an executable completely generated by Cargo (It will hopefully work out of the box like zig). - Test with an executable completely generated by Cargo (It will hopefully work out of the box like zig).
- Add Macho support - Add Macho support
- Honestly should be almost exactly the same code. - Honestly should be almost exactly the same code.

View file

@ -199,6 +199,7 @@ fn generate_dynamic_lib(
// TODO properly generate this list. // TODO properly generate this list.
for name in &[ for name in &[
format!("roc__{}_1_exposed", sym), format!("roc__{}_1_exposed", sym),
format!("roc__{}_1_exposed_generic", sym),
format!("roc__{}_1_Fx_caller", sym), format!("roc__{}_1_Fx_caller", sym),
format!("roc__{}_1_Fx_size", sym), format!("roc__{}_1_Fx_size", sym),
format!("roc__{}_1_Fx_result_size", sym), format!("roc__{}_1_Fx_result_size", sym),