about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2011-10-31 10:28:18 -0700
committerBrian Anderson <banderson@mozilla.com>2011-11-02 14:14:20 -0700
commitec77144713a67ae8aa616cecd054786cf9e5aa44 (patch)
treede3d627a28cf046336d832b88e520602ab415ff9 /src/comp
parente012fd03f3a4ff383a2e9beae62f93c527e1eed5 (diff)
add -m64 to gcc args if appropriate
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/back/link.rs4
-rw-r--r--src/comp/back/target_strs.rs3
-rw-r--r--src/comp/back/x86.rs4
-rw-r--r--src/comp/back/x86_64.rs4
-rw-r--r--src/comp/middle/trans.rs6
5 files changed, 15 insertions, 6 deletions
diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs
index d7b79e939be..8d46774712a 100644
--- a/src/comp/back/link.rs
+++ b/src/comp/back/link.rs
@@ -516,7 +516,9 @@ fn link_binary(sess: session::session,
     let prog: str = "gcc";
     // The invocations of gcc share some flags across platforms
 
-    let gcc_args = [stage, "-m32", "-o", out_filename, obj_filename];
+    let gcc_args =
+        [stage] + sess.get_targ_cfg().target_strs.gcc_args +
+        ["-o", out_filename, obj_filename];
     let lib_cmd;
 
     let os = sess.get_targ_cfg().os;
diff --git a/src/comp/back/target_strs.rs b/src/comp/back/target_strs.rs
index bf2458c2d6b..c3f70d83dfc 100644
--- a/src/comp/back/target_strs.rs
+++ b/src/comp/back/target_strs.rs
@@ -4,5 +4,6 @@ type t = {
     module_asm: str,
     meta_sect_name: str,
     data_layout: str,
-    target_triple: str
+    target_triple: str,
+    gcc_args: [str]
 };
\ No newline at end of file
diff --git a/src/comp/back/x86.rs b/src/comp/back/x86.rs
index 50f71419853..0aff0604389 100644
--- a/src/comp/back/x86.rs
+++ b/src/comp/back/x86.rs
@@ -33,7 +33,9 @@ fn get_target_strs(target_os: session::os) -> target_strs::t {
           session::os_macos. { "i686-apple-darwin" }
           session::os_win32. { "i686-pc-mingw32" }
           session::os_linux. { "i686-unknown-linux-gnu" }
-        }
+        },
+
+        gcc_args: ["-m32"]
     };
 }
 
diff --git a/src/comp/back/x86_64.rs b/src/comp/back/x86_64.rs
index 8cbebebf1ff..a668e3ee2f0 100644
--- a/src/comp/back/x86_64.rs
+++ b/src/comp/back/x86_64.rs
@@ -33,7 +33,9 @@ fn get_target_strs(target_os: session::os) -> target_strs::t {
           session::os_macos. { "x86_64-apple-darwin" }
           session::os_win32. { "x86_64-pc-mingw32" }
           session::os_linux. { "x86_64-unknown-linux-gnu" }
-        }
+        },
+
+        gcc_args: ["-m64"]
     };
 }
 
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 397e07af34c..d60fcc88c3e 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -6063,11 +6063,13 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
         llvm::LLVMModuleCreateWithNameInContext
             (buf, llvm::LLVMGetGlobalContext())
     });
+    let data_layout = sess.get_targ_cfg().target_strs.data_layout;
+    let targ_triple = sess.get_targ_cfg().target_strs.target_triple;
     let _: () =
-        str::as_buf(sess.get_targ_cfg().target_strs.data_layout,
+        str::as_buf(data_layout,
                     {|buf| llvm::LLVMSetDataLayout(llmod, buf) });
     let _: () =
-        str::as_buf(sess.get_targ_cfg().target_strs.target_triple,
+        str::as_buf(targ_triple,
                     {|buf| llvm::LLVMSetTarget(llmod, buf) });
     let targ_cfg = sess.get_targ_cfg();
     let td = mk_target_data(sess.get_targ_cfg().target_strs.data_layout);