--target'[Target triple cpu-manufacturer-kernel\[-os\] to compile]'
--target-cpu'[Select target processor (llc -mcpu=help for details)]'
--target-feature'[Target specific attributes (llc -mattr=help for details)]'
+ --relocation-model'[Relocation model (llc --help for details)]'
{-v,--version}'[Print version info and exit]'
)
_rustc_opts_lint=(
(sess.targ_cfg.os == abi::OsMacos &&
sess.targ_cfg.arch == abi::X86_64);
+ let reloc_model = match sess.opts.cg.relocation_model.as_slice() {
+ "pic" => lib::llvm::RelocPIC,
+ "static" => lib::llvm::RelocStatic,
+ "default" => lib::llvm::RelocDefault,
+ "dynamic-no-pic" => lib::llvm::RelocDynamicNoPic,
+ _ => {
+ sess.err(format!("{} is not a valid relocation mode",
+ sess.opts.cg.relocation_model));
+ sess.abort_if_errors();
+ return;
+ }
+ };
+
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|t| {
sess.opts.cg.target_cpu.with_c_str(|cpu| {
target_feature(sess).with_c_str(|features| {
llvm::LLVMRustCreateTargetMachine(
t, cpu, features,
lib::llvm::CodeModelDefault,
- lib::llvm::RelocPIC,
+ reloc_model,
opt_level,
true,
use_softfp,
"prefer dynamic linking to static linking"),
no_integrated_as: bool = (false, parse_bool,
"use an external assembler rather than LLVM's integrated one"),
+ relocation_model: ~str = (~"pic", parse_string,
+ "choose the relocation model to use (llc -relocation-model for details)"),
)
// Seems out of place, but it uses session, so I'm putting it here
--- /dev/null
+-include ../tools.mk
+
+all:
+ $(RUSTC) -C relocation-model=dynamic-no-pic foo.rs
+ $(call RUN,foo)
+
+ $(RUSTC) -C relocation-model=default foo.rs
+ $(call RUN,foo)
+
+ $(RUSTC) -C relocation-model=static foo.rs
+ $(call RUN,foo)
+
+ $(RUSTC) -C relocation-model=default --crate-type=dylib foo.rs
+ $(RUSTC) -C relocation-model=static --crate-type=dylib foo.rs
+ $(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs
--- /dev/null
+// Copyright 2014 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.
+
+pub fn main() {}