diff --git a/minutus-mruby-build-utils/Cargo.toml b/minutus-mruby-build-utils/Cargo.toml index 1ce8af3..8f96ddb 100644 --- a/minutus-mruby-build-utils/Cargo.toml +++ b/minutus-mruby-build-utils/Cargo.toml @@ -14,3 +14,4 @@ tar = "0.4.40" reqwest = { version = "0.11.23", features = ["blocking"] } flate2 = "1.*" cc = "1.*" +regex = "1" diff --git a/minutus-mruby-build-utils/src/lib.rs b/minutus-mruby-build-utils/src/lib.rs index 6ddd063..3fc8ec0 100644 --- a/minutus-mruby-build-utils/src/lib.rs +++ b/minutus-mruby-build-utils/src/lib.rs @@ -110,7 +110,16 @@ fn link_mruby(workdir: &Path) { libs.trim() ); - println!("cargo:rustc-link-arg=-lmruby"); + // For build on environments where `-Wl,--as-needed` is the default. + let re = regex::Regex::new(r"as-needed").unwrap(); + let as_needed_supported = run_command(Path::new("."), &["ld", "--help"]) + .unwrap() + .lines() + .any(|line| re.is_match(line)); + if as_needed_supported { + println!("cargo:rustc-link-arg=-Wl,--no-as-needed"); + } + println!("cargo:rustc-link-lib=mruby"); } /// Downloads mruby source code from github.