Mercurial > projects > ldc
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: |