Provide InitializeAllTargets and InitializeNativeTarget functions in the

C bindings.  Change all the backend "Initialize" functions to have C linkage.
Change the "llvm/Config/Targets.def" header to use C-style comments to avoid
compile warnings.

llvm-svn: 74026
This commit is contained in:
Bob Wilson 2009-06-23 23:59:40 +00:00
parent 813ea8a8a7
commit 7bd642b80c
25 changed files with 102 additions and 125 deletions

View File

@ -20,6 +20,7 @@
#define LLVM_C_TARGET_H
#include "llvm-c/Core.h"
#include "llvm/Config/config.h"
#ifdef __cplusplus
extern "C" {
@ -31,6 +32,34 @@ typedef int LLVMByteOrdering;
typedef struct LLVMOpaqueTargetData *LLVMTargetDataRef;
typedef struct LLVMStructLayout *LLVMStructLayoutRef;
/* Declare all of the target-initialization functions that are available. */
#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target();
#include "llvm/Config/Targets.def"
/** LLVMInitializeAllTargets - The main program should call this function if it
wants to link in all available targets that LLVM is configured to
support. */
static inline void LLVMInitializeAllTargets() {
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
#include "llvm/Config/Targets.def"
}
/** LLVMInitializeNativeTarget - The main program should call this function to
initialize the native target corresponding to the host. This is useful
for JIT applications to ensure that the target gets linked in correctly. */
static inline int LLVMInitializeNativeTarget() {
/* If we have a native target, initialize it to ensure it is linked in. */
#ifdef LLVM_NATIVE_ARCH
#define DoInit2(TARG) LLVMInitialize ## TARG ()
#define DoInit(T) DoInit2(T)
DoInit(LLVM_NATIVE_ARCH);
return 0;
#undef DoInit
#undef DoInit2
#else
return 1;
#endif
}
/*===-- Target Data -------------------------------------------------------===*/

View File

@ -1,23 +1,23 @@
//===- llvm/Config/Targets.def - LLVM Target Architectures ------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file enumerates all of the target architectures supported by
// this build of LLVM. Clients of this file should define the
// LLVM_TARGET macro to be a function-like macro with a single
// parameter (the name of the target); including this file will then
// enumerate all of the targets.
//
// The set of targets supported by LLVM is generated at configuration
// time, at which point this header is generated. Do not modify this
// header directly.
//
//===----------------------------------------------------------------------===//
/*===- llvm/Config/Targets.def - LLVM Target Architectures ------*- C++ -*-===*\
|* *|
|* The LLVM Compiler Infrastructure *|
|* *|
|* This file is distributed under the University of Illinois Open Source *|
|* License. See LICENSE.TXT for details. *|
|* *|
|*===----------------------------------------------------------------------===*|
|* *|
|* This file enumerates all of the target architectures supported by *|
|* this build of LLVM. Clients of this file should define the *|
|* LLVM_TARGET macro to be a function-like macro with a single *|
|* parameter (the name of the target); including this file will then *|
|* enumerate all of the targets. *|
|* *|
|* The set of targets supported by LLVM is generated at configuration *|
|* time, at which point this header is generated. Do not modify this *|
|* header directly. *|
|* *|
\*===----------------------------------------------------------------------===*/
#ifndef LLVM_TARGET
# error Please define the macro LLVM_TARGET(TargetName)

View File

@ -18,20 +18,21 @@
#include "llvm/Config/config.h"
namespace llvm {
extern "C" {
// Declare all of the target-initialization functions that are available.
#define LLVM_TARGET(TargetName) void Initialize##TargetName##Target();
#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target();
#include "llvm/Config/Targets.def"
// Declare all of the available asm-printer initialization functions.
// Declare all of the target-initialization functions.
#define LLVM_ASM_PRINTER(TargetName) void Initialize##TargetName##AsmPrinter();
#define LLVM_ASM_PRINTER(TargetName) void LLVMInitialize##TargetName##AsmPrinter();
#include "llvm/Config/AsmPrinters.def"
}
namespace llvm {
/// InitializeAllTargets - The main program should call this function if it
/// wants to link in all available targets that LLVM is configured to support.
inline void InitializeAllTargets() {
#define LLVM_TARGET(TargetName) llvm::Initialize##TargetName##Target();
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
#include "llvm/Config/Targets.def"
}
@ -39,18 +40,17 @@ namespace llvm {
/// it wants all asm printers that LLVM is configured to support. This will
/// cause them to be linked into its executable.
inline void InitializeAllAsmPrinters() {
#define LLVM_ASM_PRINTER(TargetName) Initialize##TargetName##AsmPrinter();
#define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
#include "llvm/Config/AsmPrinters.def"
}
/// InitializeNativeTarget - The main program should call this function to
/// initialize the native target corresponding to the host. This is useful
/// for JIT applications to ensure that the target gets linked in correctly.
inline bool InitializeNativeTarget() {
// If we have a native target, initialize it to ensure it is linked in.
#ifdef LLVM_NATIVE_ARCH
#define DoInit2(TARG) llvm::Initialize ## TARG ()
#define DoInit2(TARG) LLVMInitialize ## TARG ()
#define DoInit(T) DoInit2(T)
DoInit(LLVM_NATIVE_ARCH);
return false;

View File

@ -39,10 +39,8 @@ int ARMTargetMachineModule = 0;
static RegisterTarget<ARMTargetMachine> X("arm", "ARM");
static RegisterTarget<ThumbTargetMachine> Y("thumb", "Thumb");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeARMTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeARMTarget() { }
// No assembler printer by default
ARMTargetMachine::AsmPrinterCtorFn ARMTargetMachine::AsmPrinterCtor = 0;

View File

@ -1172,8 +1172,5 @@ namespace {
} Registrator;
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeARMAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeARMAsmPrinter() { }

View File

@ -27,10 +27,8 @@ static RegisterTarget<AlphaTargetMachine> X("alpha", "Alpha [experimental]");
// No assembler printer by default
AlphaTargetMachine::AsmPrinterCtorFn AlphaTargetMachine::AsmPrinterCtor = 0;
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeAlphaTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeAlphaTarget() { }
const TargetAsmInfo *AlphaTargetMachine::createTargetAsmInfo() const {
return new AlphaTargetAsmInfo(*this);

View File

@ -304,11 +304,8 @@ bool AlphaAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI,
return false;
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeAlphaAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeAlphaAsmPrinter() { }
namespace {
static struct Register {

View File

@ -59,10 +59,8 @@ int CBackendTargetMachineModule = 0;
// Register the target.
static RegisterTarget<CTargetMachine> X("c", "C backend");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeCBackendTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeCBackendTarget() { }
namespace {
/// CBackendNameAllUsedStructsAndMergeFunctions - This pass inserts names for

View File

@ -617,11 +617,8 @@ FunctionPass *llvm::createSPUAsmPrinterPass(raw_ostream &o,
return new LinuxAsmPrinter(o, tm, tm.getTargetAsmInfo(), OptLevel, verbose);
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeCellSPUAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeCellSPUAsmPrinter() { }
namespace {
static struct Register {

View File

@ -32,10 +32,8 @@ namespace {
// No assembler printer by default
SPUTargetMachine::AsmPrinterCtorFn SPUTargetMachine::AsmPrinterCtor = 0;
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeCellSPUTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeCellSPUTarget() { }
const std::pair<unsigned, int> *
SPUFrameInfo::getCalleeSaveSpillSlots(unsigned &NumEntries) const {

View File

@ -82,10 +82,8 @@ int CppBackendTargetMachineModule = 0;
// Register the target.
static RegisterTarget<CPPTargetMachine> X("cpp", "C++ backend");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeCppBackendTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeCppBackendTarget() { }
namespace {
typedef std::vector<const Type*> TypeList;

View File

@ -384,8 +384,5 @@ namespace {
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeIA64AsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeIA64AsmPrinter() { }

View File

@ -26,10 +26,8 @@ static RegisterTarget<IA64TargetMachine> X("ia64",
// No assembler printer by default
IA64TargetMachine::AsmPrinterCtorFn IA64TargetMachine::AsmPrinterCtor = 0;
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeIA64Target() { }
}
// Force static initialization.
extern "C" void LLVMInitializeIA64Target() { }
const TargetAsmInfo *IA64TargetMachine::createTargetAsmInfo() const {
return new IA64TargetAsmInfo(*this);

View File

@ -55,10 +55,8 @@ int MSILTargetMachineModule = 0;
static RegisterTarget<MSILTarget> X("msil", "MSIL backend");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeMSILTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeMSILTarget() { }
bool MSILModule::runOnModule(Module &M) {
ModulePtr = &M;

View File

@ -35,10 +35,8 @@ int MSP430TargetMachineModule = 0;
static RegisterTarget<MSP430TargetMachine>
X("msp430", "MSP430 [experimental]");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeMSP430Target() { }
}
// Force static initialization.
extern "C" void LLVMInitializeMSP430Target() { }
MSP430TargetMachine::MSP430TargetMachine(const Module &M,
const std::string &FS) :

View File

@ -587,8 +587,5 @@ namespace {
} Registrator;
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeMipsAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeMipsAsmPrinter() { }

View File

@ -34,10 +34,8 @@ static RegisterTarget<MipselTargetMachine> Y("mipsel", "Mipsel");
MipsTargetMachine::AsmPrinterCtorFn MipsTargetMachine::AsmPrinterCtor = 0;
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeMipsTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeMipsTarget() { }
const TargetAsmInfo *MipsTargetMachine::
createTargetAsmInfo() const

View File

@ -37,10 +37,8 @@ X("pic16", "PIC16 14-bit [experimental].");
static RegisterTarget<CooperTargetMachine>
Y("cooper", "PIC16 Cooper [experimental].");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializePIC16Target() { }
}
// Force static initialization.
extern "C" void LLVMInitializePIC16Target() { }
// PIC16TargetMachine - Traditional PIC16 Machine.
PIC16TargetMachine::PIC16TargetMachine(const Module &M, const std::string &FS,

View File

@ -1185,8 +1185,5 @@ namespace {
extern "C" int PowerPCAsmPrinterForceLink;
int PowerPCAsmPrinterForceLink = 0;
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializePowerPCAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializePowerPCAsmPrinter() { }

View File

@ -35,10 +35,8 @@ X("ppc32", "PowerPC 32");
static RegisterTarget<PPC64TargetMachine>
Y("ppc64", "PowerPC 64");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializePowerPCTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializePowerPCTarget() { }
// No assembler printer by default
PPCTargetMachine::AsmPrinterCtorFn PPCTargetMachine::AsmPrinterCtor = 0;

View File

@ -362,8 +362,5 @@ namespace {
} Registrator;
}
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeSparcAsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeSparcAsmPrinter() { }

View File

@ -25,10 +25,8 @@ static RegisterTarget<SparcTargetMachine> X("sparc", "SPARC");
SparcTargetMachine::AsmPrinterCtorFn SparcTargetMachine::AsmPrinterCtor = 0;
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeSparcTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeSparcTarget() { }
const TargetAsmInfo *SparcTargetMachine::createTargetAsmInfo() const {
// FIXME: Handle Solaris subtarget someday :)

View File

@ -47,8 +47,5 @@ namespace {
extern "C" int X86AsmPrinterForceLink;
int X86AsmPrinterForceLink = 0;
// Force static initialization when called from
// llvm/InitializeAllAsmPrinters.h
namespace llvm {
void InitializeX86AsmPrinter() { }
}
// Force static initialization.
extern "C" void LLVMInitializeX86AsmPrinter() { }

View File

@ -36,10 +36,8 @@ X("x86", "32-bit X86: Pentium-Pro and above");
static RegisterTarget<X86_64TargetMachine>
Y("x86-64", "64-bit X86: EM64T and AMD64");
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeX86Target() { }
}
// Force static initialization.
extern "C" void LLVMInitializeX86Target() { }
// No assembler printer by default
X86TargetMachine::AsmPrinterCtorFn X86TargetMachine::AsmPrinterCtor = 0;

View File

@ -31,10 +31,8 @@ namespace {
RegisterTarget<XCoreTargetMachine> X("xcore", "XCore");
}
// Force static initialization when called from llvm/InitializeAllTargets.h
namespace llvm {
void InitializeXCoreTarget() { }
}
// Force static initialization.
extern "C" void LLVMInitializeXCoreTarget() { }
const TargetAsmInfo *XCoreTargetMachine::createTargetAsmInfo() const {
return new XCoreTargetAsmInfo(*this);