74d24f278b7778223762f75b44627a3bed8e13b4
[oota-llvm.git] / lib / Linker / Linker.cpp
1 //===- lib/Linker/Linker.cpp - Basic Linker functionality  ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains basic Linker functionality that all usages will need.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #include "llvm/Linker.h"
15 #include "llvm/Bitcode/ReaderWriter.h"
16 #include "llvm/IR/Module.h"
17 #include "llvm/Support/MemoryBuffer.h"
18 #include "llvm/Support/raw_ostream.h"
19 #include "llvm/Support/system_error.h"
20 using namespace llvm;
21
22 Linker::Linker(StringRef progname, StringRef modname,
23                LLVMContext& C, unsigned flags):
24   Context(C),
25   Composite(new Module(modname, C)),
26   Flags(flags),
27   Error(),
28   ProgramName(progname) { }
29
30 Linker::Linker(StringRef progname, Module* aModule, unsigned flags) :
31   Context(aModule->getContext()),
32   Composite(aModule),
33   Flags(flags),
34   Error(),
35   ProgramName(progname) { }
36
37 Linker::~Linker() {
38   delete Composite;
39 }
40
41 bool
42 Linker::error(StringRef message) {
43   Error = message;
44   if (!(Flags&QuietErrors))
45     errs() << ProgramName << ": error: " << message << "\n";
46   return true;
47 }
48
49 bool
50 Linker::warning(StringRef message) {
51   Error = message;
52   if (!(Flags&QuietWarnings))
53     errs() << ProgramName << ": warning: " << message << "\n";
54   return false;
55 }
56
57 void
58 Linker::verbose(StringRef message) {
59   if (Flags&Verbose)
60     errs() << "  " << message << "\n";
61 }
62
63 Module*
64 Linker::releaseModule() {
65   Module* result = Composite;
66   Error.clear();
67   Composite = 0;
68   Flags = 0;
69   return result;
70 }