From a81344e29dbb0ec324ffe36a15087bdcdaea3286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sch=C3=BCtt?= Date: Fri, 18 Nov 2022 11:35:57 +0100 Subject: [PATCH] Fix windows-gnu create-exe --- lib/cli/src/commands/create_exe.rs | 33 ++++++++++++++++-------------- tests/integration/cli/tests/run.rs | 22 ++++++++++++-------- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/lib/cli/src/commands/create_exe.rs b/lib/cli/src/commands/create_exe.rs index 59a192105..d86bcee71 100644 --- a/lib/cli/src/commands/create_exe.rs +++ b/lib/cli/src/commands/create_exe.rs @@ -407,12 +407,7 @@ impl CreateExe { v.canonicalize().unwrap_or(v) } else { { - let os = target_triple.unwrap_or(Triple::host()).operating_system; - let libwasmer_path = if os == OperatingSystem::Windows { - "lib/wasmer.lib" - } else { - "lib/libwasmer.a" - }; + let libwasmer_path = "lib/libwasmer.a"; let tarball_dir; let filename = if let Some(local_tarball) = cross_subc.tarball.as_ref() { let target_file_path = local_tarball @@ -571,23 +566,31 @@ impl CreateExe { cmd.arg(&zig_triple); cmd.arg(&format!("-I{}/", include_dir.display())); cmd.arg(&format!("-I{}/", header_code_path.display())); - cmd.arg("--library"); - cmd.arg("c"); + if zig_triple.contains("windows") { + cmd.arg("-lc++"); + } else { + cmd.arg("-lc"); + } + cmd.arg("-lunwind"); cmd.arg("-OReleaseSafe"); cmd.arg("-fstrip"); cmd.arg("-dead_strip"); cmd.arg("-dead_strip_dylibs"); - cmd.arg("--verbose-cc"); + cmd.arg("-fno-compiler-rt"); cmd.arg(&format!("-femit-bin={}", output_path.display())); - if !zig_triple.contains("windows") { - cmd.arg("-lunwind"); - } - cmd.arg(&object_path); cmd.arg(&c_src_path); - cmd.arg(libwasmer_path.join(lib_filename)); - + cmd.arg(libwasmer_path.join(&lib_filename)); + if zig_triple.contains("windows") { + let mut libwasmer_parent = libwasmer_path.clone(); + libwasmer_parent.pop(); + cmd.arg(libwasmer_parent.join("winsdk/ADVAPI32.lib")); + cmd.arg(libwasmer_parent.join("winsdk/BCRYPT.lib")); + cmd.arg(libwasmer_parent.join("winsdk/KERNEL32.lib")); + cmd.arg(libwasmer_parent.join("winsdk/USERENV.lib")); + cmd.arg(libwasmer_parent.join("winsdk/WS2_32.lib")); + } if let Some(volume_obj) = pirita_volume_path.as_ref() { cmd.arg(volume_obj.clone()); } diff --git a/tests/integration/cli/tests/run.rs b/tests/integration/cli/tests/run.rs index 4fc396ccb..2ef9187d6 100644 --- a/tests/integration/cli/tests/run.rs +++ b/tests/integration/cli/tests/run.rs @@ -37,14 +37,15 @@ fn test_cross_compile_python_windows() -> anyhow::Result<()> { for t in targets { let python_wasmer_path = temp_dir.path().join(format!("{t}-python")); - let output = Command::new(get_wasmer_path()) - .arg("create-exe") - .arg(wasi_test_python_path()) - .arg("--target") - .arg(t) - .arg("-o") - .arg(python_wasmer_path.clone()) - .output()?; + let mut output = Command::new(get_wasmer_path()); + + output.arg("create-exe"); + output.arg(wasi_test_python_path()); + output.arg("--target"); + output.arg(t); + output.arg("-o"); + output.arg(python_wasmer_path.clone()); + let output = output.output()?; let stdout = std::str::from_utf8(&output.stdout) .expect("stdout is not utf8! need to handle arbitrary bytes"); @@ -64,7 +65,10 @@ fn test_cross_compile_python_windows() -> anyhow::Result<()> { .unwrap() .filter_map(|e| Some(e.ok()?.path())) .collect::>(); - panic!("target {t} was not compiled correctly {stdout} {stderr}, tempdir: {:#?}", p); + panic!( + "target {t} was not compiled correctly {stdout} {stderr}, tempdir: {:#?}", + p + ); } }