}
}
+fn get_file_path(sess: &Session, name: &str) -> PathBuf {
+ let fs = sess.target_filesearch(PathKind::Native);
+ let file_path = fs.get_lib_path().join(name);
+ if file_path.exists() {
+ return file_path
+ }
+ for search_path in fs.search_paths() {
+ let file_path = search_path.dir.join(name);
+ if file_path.exists() {
+ return file_path
+ }
+ }
+ PathBuf::from(name)
+}
+
// Create a dynamic library or executable
//
// This will invoke the system linker/cc to create the resulting file. This
// The invocations of cc share some flags across platforms
let (pname, mut cmd) = get_linker(sess, &linker, flavor);
- let root = sess.target_filesearch(PathKind::Native).get_lib_path();
if let Some(args) = sess.target.target.options.pre_link_args.get(&flavor) {
cmd.args(args);
}
&sess.target.target.options.pre_link_objects_dll
};
for obj in pre_link_objects {
- cmd.arg(root.join(obj));
+ cmd.arg(get_file_path(sess, obj));
}
if crate_type == config::CrateType::Executable && sess.crt_static() {
for obj in &sess.target.target.options.pre_link_objects_exe_crt {
- cmd.arg(root.join(obj));
+ cmd.arg(get_file_path(sess, obj));
}
}
cmd.args(args);
}
for obj in &sess.target.target.options.post_link_objects {
- cmd.arg(root.join(obj));
+ cmd.arg(get_file_path(sess, obj));
}
if sess.crt_static() {
for obj in &sess.target.target.options.post_link_objects_crt {
- cmd.arg(root.join(obj));
+ cmd.arg(get_file_path(sess, obj));
}
}
if let Some(args) = sess.target.target.options.post_link_args.get(&flavor) {
--- /dev/null
+-include ../tools.mk
+
+ifeq ($(if $(IS_WINDOWS),$(IS_MSVC),no),)
+
+all: empty.rs
+ cp -r $(shell cygpath -u $(shell $(RUSTC) --print sysroot)) $(TMPDIR)/sysroot
+ $(RUSTC) --target $(TARGET) --sysroot $(TMPDIR)/sysroot -L$(TMPDIR)/obj -Z print-link-args empty.rs | $(CGREP) 'lib\\crt2.o'
+ mkdir -p $(TMPDIR)/obj
+ mv $(TMPDIR)/sysroot/lib/rustlib/$(TARGET)/lib/crt2.o $(TMPDIR)/obj/crt2.o
+ $(RUSTC) --target $(TARGET) --sysroot $(TMPDIR)/sysroot -L$(TMPDIR)/obj -Z print-link-args empty.rs | $(CGREP) 'obj\\crt2.o'
+
+else
+
+all:
+
+endif
--- /dev/null
+// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+fn main() {}