about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-02-04 13:47:06 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-02-04 13:54:49 -0800
commit6c62839a7ff4752fdd77e599beb87f3ccaaa6e84 (patch)
tree3a36e38033a494d4ec0142eed4b6f2894425a0b5 /src
parentac134f7ca435551964996ee88319241cd3c7c110 (diff)
downloadrust-6c62839a7ff4752fdd77e599beb87f3ccaaa6e84.tar.gz
rust-6c62839a7ff4752fdd77e599beb87f3ccaaa6e84.zip
rustc: Recognize `-L framework=foo`
On OSX the linker has a separate framework lookup path which is specified via
the `-F` flag. This adds a new kind of `-L` path recognized by the compiler for
frameworks to be passed through to the linker.

Closes #20259
Diffstat (limited to 'src')
-rw-r--r--src/librustc/session/config.rs3
-rw-r--r--src/librustc/session/search_paths.rs3
-rw-r--r--src/librustc_trans/back/link.rs7
3 files changed, 10 insertions, 3 deletions
diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs
index 88f6dc673cf..8faf81a1564 100644
--- a/src/librustc/session/config.rs
+++ b/src/librustc/session/config.rs
@@ -738,7 +738,8 @@ pub fn rustc_short_optgroups() -> Vec<RustcOptGroup> {
     vec![
         opt::flag("h", "help", "Display this message"),
         opt::multi("", "cfg", "Configure the compilation environment", "SPEC"),
-        opt::multi("L", "",   "Add a directory to the library search path", "PATH"),
+        opt::multi("L", "",   "Add a directory to the library search path",
+                   "[KIND=]PATH"),
         opt::multi("l", "",   "Link the generated crate(s) to the specified native
                              library NAME. The optional KIND can be one of,
                              static, dylib, or framework. If omitted, dylib is
diff --git a/src/librustc/session/search_paths.rs b/src/librustc/session/search_paths.rs
index c6436d47c73..c314a999f24 100644
--- a/src/librustc/session/search_paths.rs
+++ b/src/librustc/session/search_paths.rs
@@ -25,6 +25,7 @@ pub enum PathKind {
     Native,
     Crate,
     Dependency,
+    Framework,
     ExternFlag,
     All,
 }
@@ -41,6 +42,8 @@ impl SearchPaths {
             (PathKind::Crate, &path["crate=".len()..])
         } else if path.starts_with("dependency=") {
             (PathKind::Dependency, &path["dependency=".len()..])
+        } else if path.starts_with("framework=") {
+            (PathKind::Framework, &path["framework=".len()..])
         } else if path.starts_with("all=") {
             (PathKind::All, &path["all=".len()..])
         } else {
diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs
index be55ab9fda3..288efd7e5ee 100644
--- a/src/librustc_trans/back/link.rs
+++ b/src/librustc_trans/back/link.rs
@@ -1041,8 +1041,11 @@ fn link_args(cmd: &mut Command,
 // in the current crate. Upstream crates with native library dependencies
 // may have their native library pulled in above.
 fn add_local_native_libraries(cmd: &mut Command, sess: &Session) {
-    sess.target_filesearch(PathKind::All).for_each_lib_search_path(|path, _| {
-        cmd.arg("-L").arg(path);
+    sess.target_filesearch(PathKind::All).for_each_lib_search_path(|path, k| {
+        match k {
+            PathKind::Framework => { cmd.arg("-F").arg(path); }
+            _ => { cmd.arg("-L").arg(path); }
+        }
         FileDoesntMatch
     });