From 480fa7c00e477dc2bdad1f7750b57c128e78f491 Mon Sep 17 00:00:00 2001 From: Zack Corr Date: Sat, 21 Jul 2012 17:20:45 +1000 Subject: [PATCH] Only initialize targets that are actually supported / linked to in RustWrapper --- src/rustllvm/RustWrapper.cpp | 20 ++++++++++++++++---- src/rustllvm/rustllvm.def.in | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 6c19a299757..8135465b30d 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 8d82d930fd6..ed3799028d4 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