comparison gen/main.cpp @ 1524:b265fb6ce15b

Merge.
author Robert Clipsham <robert@octarineparrot.com>
date Mon, 06 Jul 2009 23:56:11 +0100
parents 833337c65fd3 982eb70e83b2
children f19adff18813
comparison
equal deleted inserted replaced
1523:833337c65fd3 1524:b265fb6ce15b
2 2
3 // some things are taken from llvm's llc tool 3 // some things are taken from llvm's llc tool
4 // which uses the llvm license 4 // which uses the llvm license
5 5
6 #include "gen/llvm.h" 6 #include "gen/llvm.h"
7 #include "gen/llvm-version.h"
7 #include "llvm/LinkAllVMCore.h" 8 #include "llvm/LinkAllVMCore.h"
8 #include "llvm/Linker.h" 9 #include "llvm/Linker.h"
10 #if LLVM_REV >= 74640
11 #include "llvm/LLVMContext.h"
12 #endif
9 #include "llvm/System/Signals.h" 13 #include "llvm/System/Signals.h"
10 #include "llvm/Target/SubtargetFeature.h" 14 #include "llvm/Target/SubtargetFeature.h"
11 #include "llvm/Target/TargetMachine.h" 15 #include "llvm/Target/TargetMachine.h"
12 #include "llvm/Target/TargetOptions.h" 16 #include "llvm/Target/TargetOptions.h"
13 #include "llvm/Target/TargetMachineRegistry.h" 17 #include "llvm/Target/TargetMachineRegistry.h"
18 #if LLVM_REV >= 73610
19 #include "llvm/Target/TargetSelect.h"
20 #endif
14 21
15 #include <stdio.h> 22 #include <stdio.h>
16 #include <stdlib.h> 23 #include <stdlib.h>
17 #include <assert.h> 24 #include <assert.h>
18 #include <limits.h> 25 #include <limits.h>
395 else if ((m32bits || m64bits) && (mArch != 0 || !mTargetTriple.empty())) 402 else if ((m32bits || m64bits) && (mArch != 0 || !mTargetTriple.empty()))
396 error("-m32 and -m64 switches cannot be used together with -march and -mtriple switches"); 403 error("-m32 and -m64 switches cannot be used together with -march and -mtriple switches");
397 if (global.errors) 404 if (global.errors)
398 fatal(); 405 fatal();
399 406
407 #if LLVM_REV >= 74640
408 llvm::Module mod("dummy", llvm::getGlobalContext());
409 #else
400 llvm::Module mod("dummy"); 410 llvm::Module mod("dummy");
411 #endif
401 412
402 // override triple if needed 413 // override triple if needed
403 const char* defaultTriple = DEFAULT_TARGET_TRIPLE; 414 const char* defaultTriple = DEFAULT_TARGET_TRIPLE;
404 if ((sizeof(void*) == 4 && m64bits) || (sizeof(void*) == 8 && m32bits)) 415 if ((sizeof(void*) == 4 && m64bits) || (sizeof(void*) == 8 && m32bits))
405 { 416 {
421 global.params.targetTriple = mTargetTriple.c_str(); 432 global.params.targetTriple = mTargetTriple.c_str();
422 } 433 }
423 434
424 mod.setTargetTriple(global.params.targetTriple); 435 mod.setTargetTriple(global.params.targetTriple);
425 436
426 // Allocate target machine. First, check whether the user has 437 // Allocate target machine.
427 // explicitly specified an architecture to compile for. 438
439 // first initialize llvm
440 #if LLVM_REV >= 73610
441 #define LLVM_TARGET(A) LLVMInitialize##A##Target(); LLVMInitialize##A##AsmPrinter();
442 // this is defined to be LLVM_TARGET(target name 1) LLVM_TARGET(target name 2) ...
443 LDC_TARGETS
444 #undef LLVM_TARGET
445 #endif
446
447 // Check whether the user has explicitly specified an architecture to compile for.
428 if (mArch == 0) 448 if (mArch == 0)
429 { 449 {
430 std::string Err; 450 std::string Err;
431 mArch = llvm::TargetMachineRegistry::getClosestStaticTargetForModule(mod, Err); 451 mArch = llvm::TargetMachineRegistry::getClosestStaticTargetForModule(mod, Err);
432 if (mArch == 0) 452 if (mArch == 0)
906 { 926 {
907 Module* m = (Module*)modules.data[0]; 927 Module* m = (Module*)modules.data[0];
908 char* name = m->toChars(); 928 char* name = m->toChars();
909 char* filename = m->objfile->name->str; 929 char* filename = m->objfile->name->str;
910 930
931 #if LLVM_REV >= 74640
932 llvm::Linker linker(name, name, llvm::getGlobalContext());
933 #else
911 llvm::Linker linker(name, name); 934 llvm::Linker linker(name, name);
935 #endif
912 std::string errormsg; 936 std::string errormsg;
913 for (int i = 0; i < llvmModules.size(); i++) 937 for (int i = 0; i < llvmModules.size(); i++)
914 { 938 {
915 #ifdef USE_METADATA 939 #ifdef USE_METADATA
916 //FIXME: workaround for llvm metadata bug: 940 //FIXME: workaround for llvm metadata bug: