blob: 5418568e1d6a19d1da732b6f885d6555a259e5b2 [file] [log] [blame]
use failure::Error;
use regex::Regex;
use std::{collections::BTreeSet, io};
fn parse(linker_line: &str) -> (BTreeSet<String>, BTreeSet<String>) {
let lib_path_re = Regex::new(r#"(-Lnative=(\S+))"#).unwrap();
let captures = lib_path_re.captures_iter(linker_line);
let lib_paths: BTreeSet<String> = captures.map(|capture| capture[2].to_string()).collect();
let libs_re = Regex::new(r#"(\s+-l(\S+))"#).unwrap();
let libs_captures = libs_re.captures_iter(linker_line);
let libs: BTreeSet<String> = libs_captures.map(|capture| capture[2].to_string()).collect();
(lib_paths, libs)
}
pub fn extract_linkage_information() -> Result<(), Error> {
let mut linker_text = String::new();
io::stdin().read_line(&mut linker_text)?;
let (lib_paths, libs) = parse(&linker_text);
println!("library_search_paths = {:#?}", lib_paths);
println!("additional_static_libraries = {:#?}", libs);
Ok(())
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_link_parsing() {
let (lib_paths, libs) = parse(LINKER_LINE);
assert!(lib_paths.len() > 0);
assert!(libs.len() > 0);
}
const LINKER_LINE: &'static str = r#"[1/128] mkdir -p ./exe.unstripped && ../../prebuilt/third_party/rust/mac-x64/bin/rustc --color=always --crate-name spinning_square ../../src/lib/ui/carnelian/examples/spinning_square.rs --crate-type bin --emit=dep-info=./spinning_square.d,link -Zdep-info-omit-d-target -C link-args=--Map="./exe.unstripped/spinning_square.map" --cfg=__rust_toolchain=\"g7iBlBv8Ea_O1W0mxabel89X_OWItx5s22pNG6Y1JQ8C\" --cfg=rust_panic=\"abort\" -L /Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia/lib -Clinker=/Users/rob/projects/fuchsia/prebuilt/third_party/clang/mac-x64/bin/lld -Clink-arg=--sysroot=/Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia -Clink-arg=-L/Users/rob/projects/fuchsia/out/core.x64-release/gen/build/config/fuchsia/lib -Clink-arg=-L/Users/rob/projects/fuchsia/prebuilt/third_party/clang/mac-x64/lib/clang/11.0.0/x86_64-fuchsia/lib -Clink-arg=--pack-dyn-relocs=relr -Clink-arg=-dynamic-linker=ld.so.1 -Clink-arg=--icf=all --remap-path-prefix /Users/rob/projects/fuchsia/=../../ -Copt-level=z -Cdebuginfo=2 --edition=2018 -Zallow-features= --target x86_64-fuchsia --cap-lints=warn -Wrust-2018-idioms -Dwarnings -Clink-args=-zstack-size=0x200000 -Cpanic=abort -Cforce-unwind-tables=yes -Zpanic_abort_tests -o "./exe.unstripped/spinning_square" -Ldependency=obj/garnet/examples/fidl/services -Ldependency=obj/src/lib/fidl/rust/fidl -Ldependency=obj/src/lib/zerocopy -Ldependency=host_x64 -Ldependency=obj/third_party/rust_crates -Ldependency=obj/src/lib/zircon/rust -Ldependency=obj/src/lib/fuchsia-async -Ldependency=obj/src/lib/fuchsia-system-alloc -Ldependency=obj/sdk/fidl/fuchsia.ui.input -Ldependency=obj/sdk/fidl/fuchsia.ui.input2 -Ldependency=obj/sdk/fidl/fuchsia.ui.views -Ldependency=obj/zircon/vdso/zx -Ldependency=obj/sdk/fidl/fuchsia.ui.input3 -Ldependency=obj/sdk/fidl/fuchsia.input -Ldependency=obj/src/lib/trace/rust -Ldependency=obj/src/lib/cstr -Ldependency=obj/src/lib/ui/carnelian -Ldependency=obj/sdk/fidl/fuchsia.fonts -Ldependency=obj/sdk/fidl/fuchsia.intl -Ldependency=obj/sdk/fidl/fuchsia.mem -Ldependency=obj/sdk/fidl/fuchsia.hardware.input -Ldependency=obj/sdk/fidl/fuchsia.images -Ldependency=obj/sdk/fidl/fuchsia.sysmem -Ldependency=obj/sdk/fidl/fuchsia.input.report -Ldependency=obj/sdk/fidl/fuchsia.math -Ldependency=obj/sdk/fidl/fuchsia.ui.app -Ldependency=obj/sdk/fidl/fuchsia.sys -Ldependency=obj/sdk/fidl/fuchsia.ui.gfx -Ldependency=obj/sdk/fidl/fuchsia.ui.policy -Ldependency=obj/sdk/fidl/fuchsia.ui.scenic -Ldependency=obj/sdk/fidl/fuchsia.scenic.scheduling -Ldependency=obj/src/graphics/lib/compute/mold -Ldependency=obj/src/graphics/lib/compute/surpass -Ldependency=obj/src/graphics/lib/compute/spinel-rs-sys -Ldependency=obj/src/lib/fdio/rust -Ldependency=obj/sdk/fidl/fuchsia.device -Ldependency=obj/sdk/fidl/fuchsia.device.manager -Ldependency=obj/src/lib/fuchsia-runtime -Ldependency=obj/src/lib/fuchsia-component -Ldependency=obj/garnet/lib/rust/io_util -Ldependency=obj/sdk/fidl/fuchsia.io -Ldependency=obj/sdk/fidl/fuchsia.sys2 -Ldependency=obj/sdk/fidl/fuchsia.component -Ldependency=obj/sdk/fidl/fuchsia.data -Ldependency=obj/sdk/fidl/fuchsia.io2 -Ldependency=obj/sdk/fidl/fuchsia.url -Ldependency=obj/src/lib/mapped-vmo -Ldependency=obj/src/lib/shared-buffer -Ldependency=obj/src/lib/syslog/rust -Ldependency=obj/sdk/fidl/fuchsia.logger -Ldependency=obj/src/lib/ui/fuchsia-framebuffer -Ldependency=obj/sdk/fidl/fuchsia.hardware.display -Ldependency=obj/src/lib/ui/fuchsia-scenic -Ldependency=obj/src/lib/ui/input-synthesis -Lnative=x64-shared -Lnative=obj/zircon/system/ulib/trace-provider -Lnative=obj/zircon/public/lib/async -Lnative=obj/zircon/public/lib/fit -Lnative=obj/zircon/public/lib/zx -Lnative=obj/zircon/public/lib/fidl -Lnative=obj/zircon/public/lib/fidl_base -Lnative=obj/zircon/public/lib/async-cpp -Lnative=obj/src/graphics/lib/compute/common -Lnative=obj/src/graphics/lib/compute/common/vk -Lnative=obj/src/graphics/lib/compute/hotsort/platforms/vk -Lnative=obj/src/graphics/lib/compute/spinel -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/amd/gcn3 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/amd/gcn3/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/arm/bifrost8 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/arm/bifrost8/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/intel/gen8 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/intel/gen8/hotsort -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/nvidia/sm50 -Lnative=obj/src/graphics/lib/compute/spinel/platforms/vk/targets/vendors/nvidia/sm50/hotsort -ltrace-engine -lrust-trace-provider -ltrace-provider-with-fdio -lasync -lfit -lzx -lfdio -lfidl -lfidl_base -lasync-cpp -lasync-default -lsyslog -lcompute_common -lcompute_common_vk -lvulkan -lhotsort_vk -lspinel -lspinel_vk -lspinel_vk_find_target -lspinel_vk_spn_amd_gcn3 -lhotsort_vk_hs_amd_gcn3_u64 -lspinel_vk_spn_arm_bifrost8 -lhotsort_vk_hs_arm_bifrost8_u64 -lspinel_vk_spn_intel_gen8 -lhotsort_vk_hs_intel_gen8_u64 -lspinel_vk_spn_nvidia_sm50 -lhotsort_vk_hs_nvidia_sm35_u64 -Lnative=gen/zircon/system/ulib/fdio -Lnative=gen/zircon/system/ulib/trace-engine -Lnative=gen/zircon/system/ulib/syslog -lzircon --extern fidl_fidl_examples_echo=obj/garnet/examples/fidl/services/libfidl_fidl_examples_echo.rlib --extern fidl_fuchsia_ui_input=obj/sdk/fidl/fuchsia.ui.input/libfidl_fuchsia_ui_input.rlib --extern fidl=obj/src/lib/fidl/rust/fidl/libfidl.rlib --extern fuchsia_async=obj/src/lib/fuchsia-async/libfuchsia_async.rlib --extern fuchsia_trace=obj/src/lib/trace/rust/libfuchsia_trace.rlib --extern fuchsia_trace_provider=obj/src/lib/trace/rust/libfuchsia_trace_provider.rlib --extern carnelian=obj/src/lib/ui/carnelian/libcarnelian.rlib --extern fuchsia_scenic=obj/src/lib/ui/fuchsia-scenic/libfuchsia_scenic.rlib --extern fuchsia_zircon=obj/src/lib/zircon/rust/libfuchsia_zircon.rlib --extern anyhow=obj/third_party/rust_crates/libanyhow-7791292ca6d4cc50.rlib --extern euclid=obj/third_party/rust_crates/libeuclid-4687831aa0edfe47.rlib --extern futures=obj/third_party/rust_crates/libfutures-db6a965543caf277.rlib --extern thiserror=obj/third_party/rust_crates/libthiserror-eafe64cb9fc967f6.rlib && ../../prebuilt/third_party/clang/mac-x64/bin/llvm-objcopy --strip-sections "./exe.unstripped/spinning_square" "./spinning_square" && ../../prebuilt/tools/buildidtool/mac-x64/buildidtool -build-id-dir .build-id -stamp "./spinning_square.build-id.stamp" -entry "=./spinning_square" -entry ".debug=./exe.unstripped/spinning_square"
"#;
}