diff --git a/configure b/configure index 1bcbe5135791..06bddccc15cf 100755 --- a/configure +++ b/configure @@ -378,7 +378,7 @@ then LLVM_VERSION=$($LLVM_CONFIG --version) case $LLVM_VERSION in - (3.1svn) + (3.1svn|3.1|3.0svn|3.0) msg "found ok version of LLVM: $LLVM_VERSION" ;; (*) diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 6c19a2997575..8135465b30dc 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -75,6 +75,12 @@ extern "C" bool LLVMLinkModules(LLVMModuleRef Dest, LLVMModuleRef Src) { return true; } +void LLVMInitializeX86TargetInfo(); +void LLVMInitializeX86Target(); +void LLVMInitializeX86TargetMC(); +void LLVMInitializeX86AsmPrinter(); +void LLVMInitializeX86AsmParser(); + extern "C" bool LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, LLVMModuleRef M, @@ -84,10 +90,16 @@ LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, CodeGenOpt::Level OptLevel, bool EnableSegmentedStacks) { - InitializeAllTargets(); - InitializeAllTargetMCs(); - InitializeAllAsmPrinters(); - InitializeAllAsmParsers(); + // Only initialize the platforms supported by Rust here, + // because using --llvm-root will have multiple platforms + // that rustllvm doesn't actually link to and it's pointless to put target info + // into the registry that Rust can not generate machine code for. + + LLVMInitializeX86TargetInfo(); + LLVMInitializeX86Target(); + LLVMInitializeX86TargetMC(); + LLVMInitializeX86AsmPrinter(); + LLVMInitializeX86AsmParser(); TargetOptions Options; Options.NoFramePointerElim = true; diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 8d82d930fd6f..ed3799028d4f 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -390,6 +390,8 @@ LLVMInitializeX86Disassembler LLVMInitializeX86Disassembler LLVMInitializeX86Target LLVMInitializeX86Target +LLVMInitializeX86TargetMC +LLVMInitializeX86TargetMC LLVMInitializeX86TargetInfo LLVMInitializeX86TargetInfo LLVMInsertBasicBlock