Add AllTargetsBindings sublibrary instead of having static inlines in the llvm-c headers.

This new library will be linked in when using the "all-targets"
component and contains the LLVMInitializeAll* functions.

This means that those functions will exist as real symbols in
the shared library, and can therefore can be called from
bindings that are using ffi the shared library.

llvm-svn: 192690
This commit is contained in:
Anders Waldenborg 2013-10-15 12:08:59 +00:00
parent 14b9924c7b
commit 1d9cb434b3
8 changed files with 106 additions and 45 deletions

View File

@ -71,62 +71,37 @@ typedef struct LLVMStructLayout *LLVMStructLayoutRef;
void LLVMInitialize##TargetName##Disassembler(void); void LLVMInitialize##TargetName##Disassembler(void);
#include "llvm/Config/Disassemblers.def" #include "llvm/Config/Disassemblers.def"
#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */ #undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
/** LLVMInitializeAllTargetInfos - The main program should call this function if /** LLVMInitializeAllTargetInfos - The main program should call this function if
it wants access to all available targets that LLVM is configured to it wants access to all available targets that LLVM is configured to
support. */ support. */
static inline void LLVMInitializeAllTargetInfos(void) { void LLVMInitializeAllTargetInfos(void);
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
#include "llvm/Config/Targets.def"
#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeAllTargets - The main program should call this function if it /** LLVMInitializeAllTargets - The main program should call this function if it
wants to link in all available targets that LLVM is configured to wants to link in all available targets that LLVM is configured to
support. */ support. */
static inline void LLVMInitializeAllTargets(void) { void LLVMInitializeAllTargets(void);
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
#include "llvm/Config/Targets.def"
#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeAllTargetMCs - The main program should call this function if /** LLVMInitializeAllTargetMCs - The main program should call this function if
it wants access to all available target MC that LLVM is configured to it wants access to all available target MC that LLVM is configured to
support. */ support. */
static inline void LLVMInitializeAllTargetMCs(void) { void LLVMInitializeAllTargetMCs(void);
#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
#include "llvm/Config/Targets.def"
#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeAllAsmPrinters - The main program should call this function if /** LLVMInitializeAllAsmPrinters - The main program should call this function if
it wants all asm printers that LLVM is configured to support, to make them it wants all asm printers that LLVM is configured to support, to make them
available via the TargetRegistry. */ available via the TargetRegistry. */
static inline void LLVMInitializeAllAsmPrinters(void) { void LLVMInitializeAllAsmPrinters(void);
#define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
#include "llvm/Config/AsmPrinters.def"
#undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeAllAsmParsers - The main program should call this function if /** LLVMInitializeAllAsmParsers - The main program should call this function if
it wants all asm parsers that LLVM is configured to support, to make them it wants all asm parsers that LLVM is configured to support, to make them
available via the TargetRegistry. */ available via the TargetRegistry. */
static inline void LLVMInitializeAllAsmParsers(void) { void LLVMInitializeAllAsmParsers(void);
#define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
#include "llvm/Config/AsmParsers.def"
#undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeAllDisassemblers - The main program should call this function /** LLVMInitializeAllDisassemblers - The main program should call this function
if it wants all disassemblers that LLVM is configured to support, to make if it wants all disassemblers that LLVM is configured to support, to make
them available via the TargetRegistry. */ them available via the TargetRegistry. */
static inline void LLVMInitializeAllDisassemblers(void) { void LLVMInitializeAllDisassemblers(void);
#define LLVM_DISASSEMBLER(TargetName) \
LLVMInitialize##TargetName##Disassembler();
#include "llvm/Config/Disassemblers.def"
#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
}
/** LLVMInitializeNativeTarget - The main program should call this function to /** LLVMInitializeNativeTarget - The main program should call this function to
initialize the native target corresponding to the host. This is useful initialize the native target corresponding to the host. This is useful
for JIT applications to ensure that the target gets linked in correctly. */ for JIT applications to ensure that the target gets linked in correctly. */

View File

@ -0,0 +1,42 @@
//===-- AllTargetsBindings.cpp --------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the llvm-c functions for initialization of
// different aspects of all configured targets.
//
//===----------------------------------------------------------------------===//
#include "llvm-c/Target.h"
#include "llvm/Support/TargetSelect.h"
using namespace llvm;
void LLVMInitializeAllTargetInfos(void) {
InitializeAllTargetInfos();
}
void LLVMInitializeAllTargets(void) {
InitializeAllTargets();
}
void LLVMInitializeAllTargetMCs(void) {
InitializeAllTargetMCs();
}
void LLVMInitializeAllAsmPrinters(void) {
InitializeAllAsmPrinters();
}
void LLVMInitializeAllAsmParsers(void) {
InitializeAllAsmParsers();
}
void LLVMInitializeAllDisassemblers(void) {
InitializeAllDisassemblers();
}

View File

@ -0,0 +1,3 @@
add_llvm_library(LLVMAllTargetsBindings
AllTargetsBindings.cpp
)

View File

@ -0,0 +1,32 @@
;===- ./lib/Target/LLVMBuild.txt -------------------------------*- Conf -*--===;
;
; The LLVM Compiler Infrastructure
;
; This file is distributed under the University of Illinois Open Source
; License. See LICENSE.TXT for details.
;
;===------------------------------------------------------------------------===;
;
; This is an LLVMBuild description file for the components in this subdirectory.
;
; For more information on the LLVMBuild system, please see:
;
; http://llvm.org/docs/LLVMBuild.html
;
;===------------------------------------------------------------------------===;
; This is a special group whose required libraries are extended (by llvm-build)
; with every built target, which makes it easy for tools to include every
; target.
[component_0]
type = LibraryGroup
name = all-targets
parent = Libraries
; This is the actual library built in this directory.
; It just contains the llvm-c bindings LLVMInitializeAllTarget* functions
[component_1]
type = Library
name = AllTargetsBindings
parent = Libraries
add_to_library_groups = all-targets

View File

@ -0,0 +1,14 @@
#===- lib/Target/AllTargetsBindings/Makefile ---------------*- Makefile -*-===##
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
LEVEL = ../../..
LIBRARYNAME = LLVMAllTargetsBindings
BUILD_ARCHIVE = 1
include $(LEVEL)/Makefile.common

View File

@ -14,3 +14,5 @@ foreach(t ${LLVM_TARGETS_TO_BUILD})
message(STATUS "Targeting ${t}") message(STATUS "Targeting ${t}")
add_subdirectory(${t}) add_subdirectory(${t})
endforeach() endforeach()
add_subdirectory("AllTargetsBindings")

View File

@ -16,7 +16,7 @@
;===------------------------------------------------------------------------===; ;===------------------------------------------------------------------------===;
[common] [common]
subdirectories = AArch64 ARM CppBackend Hexagon MSP430 NVPTX Mips PowerPC R600 Sparc SystemZ X86 XCore subdirectories = AArch64 ARM CppBackend Hexagon MSP430 NVPTX Mips PowerPC R600 Sparc SystemZ X86 XCore AllTargetsBindings
; This is a special group whose required libraries are extended (by llvm-build) ; This is a special group whose required libraries are extended (by llvm-build)
; with the best execution engine (the native JIT, if available, or the ; with the best execution engine (the native JIT, if available, or the
@ -47,10 +47,3 @@ name = Target
parent = Libraries parent = Libraries
required_libraries = Core MC Support required_libraries = Core MC Support
; This is a special group whose required libraries are extended (by llvm-build)
; with every built target, which makes it easy for tools to include every
; target.
[component_4]
type = LibraryGroup
name = all-targets
parent = Libraries

View File

@ -15,6 +15,6 @@ BUILD_ARCHIVE = 1
# value for PARALLEL_DIRS which must be set before Makefile.rules is included # value for PARALLEL_DIRS which must be set before Makefile.rules is included
include $(LEVEL)/Makefile.config include $(LEVEL)/Makefile.config
PARALLEL_DIRS := $(TARGETS_TO_BUILD) PARALLEL_DIRS := $(TARGETS_TO_BUILD) AllTargetsBindings
include $(LLVM_SRC_ROOT)/Makefile.rules include $(LLVM_SRC_ROOT)/Makefile.rules