For static library crates that depend on other internal static library crates, all link_with targets get promoted to link_whole targets. Due to a bug, only link_with targets are considered when generating a Rust target for the ninja backend. This made it impossible to link a Rust static library with another internal Rust static library. This change fixes that issue by chaining link_whole_targets with link_targets, just like many other languages within the ninja backend.pull/9512/merge
parent
96df0fc69e
commit
6383eb2279
6 changed files with 32 additions and 2 deletions
@ -0,0 +1,4 @@ |
||||
#[no_mangle] |
||||
pub extern "C" fn what_have_we_here() -> i32 { |
||||
leaf::HOW_MANY * leaf::HOW_MANY |
||||
} |
@ -0,0 +1 @@ |
||||
pub const HOW_MANY: i32 = 5; |
@ -0,0 +1,8 @@ |
||||
project('staticlib link staticlib', 'c', 'rust') |
||||
|
||||
leaf = static_library('leaf', 'leaf.rs', rust_crate_type : 'rlib') |
||||
# Even though leaf is linked using link_with, this gets implicitly promoted to link_whole because |
||||
# it is an internal Rust project. |
||||
branch = static_library('branch', 'branch.rs', link_with: leaf, rust_crate_type : 'staticlib', install : true) |
||||
e = executable('prog', 'prog.c', link_with : branch, install : true) |
||||
test('linktest', e) |
@ -0,0 +1,7 @@ |
||||
#include <stdio.h> |
||||
|
||||
int what_have_we_here(); |
||||
|
||||
int main(void) { |
||||
printf("printing %d\n", what_have_we_here()); |
||||
} |
@ -0,0 +1,7 @@ |
||||
{ |
||||
"installed": [ |
||||
{"type": "exe", "file": "usr/bin/prog"}, |
||||
{"type": "pdb", "file": "usr/bin/prog"}, |
||||
{"type": "file", "file": "usr/lib/libbranch.a"} |
||||
] |
||||
} |
Loading…
Reference in new issue