Hey~

I've been trying to hook rust up the v8 VM to play with, and although I've
got it working, it's kind of annoying to do.

In CMake you can extract a list of build targets using something like:

function(get_dependent_targets TARGET RETURN)
  get_property(LOC TARGET ${TARGET} PROPERTY LOCATION)
  set(RTN ${LOC})
  get_property(LIBS TARGET ${TARGET} PROPERTY LINK_LIBRARIES)
  foreach(LIB ${LIBS})
    get_dependent_targets(${LIB} LIB_LIST)
    foreach(LIBI ${LIB_LIST})
      list(APPEND RTN ${LIBI})
    endforeach()
  endforeach()
  set(${RETURN} ${RTN} PARENT_SCOPE)
endfunction()

That generates a list of the absolute paths to the libraries you're linking
against for your target.

So in my case I have some light V8 interop libraries in libv8i, and the
output list of static libraries to link against is:

/Users/doug/projects/rust/rust-v8/build/libv8i.a
/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libv8_base.x64.a
/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libv8_snapshot.a
/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicudata.a
/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicui18n.a
/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicuuc.a

Now, what do I do with that list to link with rustc?

I tried generating an include using a template, and the output was along
the lines of:

#[link(name = "/Users/doug/projects/rust/rust-v8/build/libv8i.a", kind =
"static")]
#[link(name =
"/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libv8_base.x64.a",
kind = "static")]
#[link(name =
"/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libv8_snapshot.a",
kind = "static")]
#[link(name =
"/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicudata.a",
kind = "static")]
#[link(name =
"/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicui18n.a",
kind = "static")]
#[link(name =
"/Users/doug/projects/rust/rust-v8/build/src/v8/out/native/libicuuc.a",
kind = "static")]
extern {
... etc.
}

...but that doesn't work. Instead I've had to fudge my template down to
non-absolute paths, and invoke it like this:

rustc package.rs -Lbuild -Lbuild/src/v8/out/native

It's not a huge deal in this trivial example, but as the number of
dependencies increases you end up stuck either have an absolutely massive
rustc call script to generate (or something like that), or having to copy
all your static libraries into a single folder post-build.

So TLDR; is there some way to specify an absolute path for #[link]?

(I did see #[link_args] but that's not portable as I understand it)

~
Doug.
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to