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

Timur Iskhodzhanov timurrrr at google.com
Tue Oct 15 05:29:48 PDT 2013


FYI this broke the build on Windows

FAILED: cmd.exe /c cd . && "C:\Program Files (x86)\CMake
2.8\bin\cmake.exe" -E vs_link_dll
C:\PROGRA~2\MICROS~2.0\VC\bin\link.exe /nologo
tools\lto\CMakeFiles\LTO.dir\LTODisassembler.cpp.obj
tools\lto\CMakeFiles\LTO.dir\lto.cpp.obj  /out:bin\LTO.dll
/implib:lib\LTO.imp /pdb:bin\LTO.pdb /dll /version:0.0 /STACK:10000000
/machine:X86  /INCREMENTAL:NO /DEF:tools\lto\lto.exports.def
/DEF:tools\lto\lto.exports.def  lib\LLVMX86CodeGen.lib
lib\LLVMX86AsmParser.lib lib\LLVMX86Disassembler.lib lib\LLVMLTO.lib
lib\LLVMMCDisassembler.lib lib\LLVMAsmPrinter.lib
lib\LLVMSelectionDAG.lib lib\LLVMX86Desc.lib lib\LLVMBitReader.lib
lib\LLVMBitWriter.lib lib\LLVMLinker.lib lib\LLVMipo.lib
lib\LLVMMCParser.lib lib\LLVMCodeGen.lib lib\LLVMX86AsmPrinter.lib
lib\LLVMX86Info.lib lib\LLVMVectorize.lib lib\LLVMObjCARCOpts.lib
lib\LLVMScalarOpts.lib lib\LLVMX86Utils.lib lib\LLVMInstCombine.lib
lib\LLVMTransformUtils.lib lib\LLVMipa.lib lib\LLVMAnalysis.lib
lib\LLVMTarget.lib lib\LLVMCore.lib lib\LLVMMC.lib lib\LLVMObject.lib
lib\LLVMSupport.lib kernel32.lib user32.lib gdi32.lib winspool.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib
&& cd .
   Creating library lib\LTO.imp and object lib\LTO.exp

lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllDisassemblers referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllAsmPrinters referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllAsmParsers referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllTargetMCs referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllTargets referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
lto.cpp.obj : error LNK2019: unresolved external symbol
_LLVMInitializeAllTargetInfos referenced in function "void __cdecl
lto_initialize(void)" (?lto_initialize@@YAXXZ)
bin\LTO.dll : fatal error LNK1120: 6 unresolved externals

2013/10/15 Anders Waldenborg <anders at 0x63.nu>:
> Author: andersg
> Date: Tue Oct 15 07:08:59 2013
> New Revision: 192690
>
> URL: http://llvm.org/viewvc/llvm-project?rev=192690&view=rev
> Log:
> 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.
>
>
> Added:
>     llvm/trunk/lib/Target/AllTargetsBindings/
>     llvm/trunk/lib/Target/AllTargetsBindings/AllTargetsBindings.cpp
>     llvm/trunk/lib/Target/AllTargetsBindings/CMakeLists.txt
>     llvm/trunk/lib/Target/AllTargetsBindings/LLVMBuild.txt
>     llvm/trunk/lib/Target/AllTargetsBindings/Makefile
> Modified:
>     llvm/trunk/include/llvm-c/Target.h
>     llvm/trunk/lib/Target/CMakeLists.txt
>     llvm/trunk/lib/Target/LLVMBuild.txt
>     llvm/trunk/lib/Target/Makefile
>
> Modified: llvm/trunk/include/llvm-c/Target.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Target.h?rev=192690&r1=192689&r2=192690&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm-c/Target.h (original)
> +++ llvm/trunk/include/llvm-c/Target.h Tue Oct 15 07:08:59 2013
> @@ -71,62 +71,37 @@ typedef struct LLVMStructLayout *LLVMStr
>    void LLVMInitialize##TargetName##Disassembler(void);
>  #include "llvm/Config/Disassemblers.def"
>  #undef LLVM_DISASSEMBLER  /* Explicit undef to make SWIG happier */
> -
> +
>  /** LLVMInitializeAllTargetInfos - The main program should call this function if
>      it wants access to all available targets that LLVM is configured to
>      support. */
> -static inline void LLVMInitializeAllTargetInfos(void) {
> -#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
> -#include "llvm/Config/Targets.def"
> -#undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
> -}
> +void LLVMInitializeAllTargetInfos(void);
>
>  /** 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(void) {
> -#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
> -#include "llvm/Config/Targets.def"
> -#undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
> -}
> +void LLVMInitializeAllTargets(void);
>
>  /** LLVMInitializeAllTargetMCs - The main program should call this function if
>      it wants access to all available target MC that LLVM is configured to
>      support. */
> -static inline void LLVMInitializeAllTargetMCs(void) {
> -#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
> -#include "llvm/Config/Targets.def"
> -#undef LLVM_TARGET  /* Explicit undef to make SWIG happier */
> -}
> -
> +void LLVMInitializeAllTargetMCs(void);
> +
>  /** LLVMInitializeAllAsmPrinters - The main program should call this function if
>      it wants all asm printers that LLVM is configured to support, to make them
>      available via the TargetRegistry. */
> -static inline 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 */
> -}
> -
> +void LLVMInitializeAllAsmPrinters(void);
> +
>  /** LLVMInitializeAllAsmParsers - The main program should call this function if
>      it wants all asm parsers that LLVM is configured to support, to make them
>      available via the TargetRegistry. */
> -static inline 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 */
> -}
> -
> +void LLVMInitializeAllAsmParsers(void);
> +
>  /** LLVMInitializeAllDisassemblers - The main program should call this function
>      if it wants all disassemblers that LLVM is configured to support, to make
>      them available via the TargetRegistry. */
> -static inline void LLVMInitializeAllDisassemblers(void) {
> -#define LLVM_DISASSEMBLER(TargetName) \
> -  LLVMInitialize##TargetName##Disassembler();
> -#include "llvm/Config/Disassemblers.def"
> -#undef LLVM_DISASSEMBLER  /* Explicit undef to make SWIG happier */
> -}
> -
> +void LLVMInitializeAllDisassemblers(void);
> +
>  /** 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. */
>
> Added: llvm/trunk/lib/Target/AllTargetsBindings/AllTargetsBindings.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AllTargetsBindings/AllTargetsBindings.cpp?rev=192690&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/AllTargetsBindings/AllTargetsBindings.cpp (added)
> +++ llvm/trunk/lib/Target/AllTargetsBindings/AllTargetsBindings.cpp Tue Oct 15 07:08:59 2013
> @@ -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();
> +}
>
> Added: llvm/trunk/lib/Target/AllTargetsBindings/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AllTargetsBindings/CMakeLists.txt?rev=192690&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/AllTargetsBindings/CMakeLists.txt (added)
> +++ llvm/trunk/lib/Target/AllTargetsBindings/CMakeLists.txt Tue Oct 15 07:08:59 2013
> @@ -0,0 +1,3 @@
> +add_llvm_library(LLVMAllTargetsBindings
> +  AllTargetsBindings.cpp
> +  )
>
> Added: llvm/trunk/lib/Target/AllTargetsBindings/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AllTargetsBindings/LLVMBuild.txt?rev=192690&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/AllTargetsBindings/LLVMBuild.txt (added)
> +++ llvm/trunk/lib/Target/AllTargetsBindings/LLVMBuild.txt Tue Oct 15 07:08:59 2013
> @@ -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
>
> Added: llvm/trunk/lib/Target/AllTargetsBindings/Makefile
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AllTargetsBindings/Makefile?rev=192690&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/AllTargetsBindings/Makefile (added)
> +++ llvm/trunk/lib/Target/AllTargetsBindings/Makefile Tue Oct 15 07:08:59 2013
> @@ -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
>
> Modified: llvm/trunk/lib/Target/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CMakeLists.txt?rev=192690&r1=192689&r2=192690&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/CMakeLists.txt Tue Oct 15 07:08:59 2013
> @@ -14,3 +14,5 @@ foreach(t ${LLVM_TARGETS_TO_BUILD})
>    message(STATUS "Targeting ${t}")
>    add_subdirectory(${t})
>  endforeach()
> +
> +add_subdirectory("AllTargetsBindings")
>
> Modified: llvm/trunk/lib/Target/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/LLVMBuild.txt?rev=192690&r1=192689&r2=192690&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/LLVMBuild.txt (original)
> +++ llvm/trunk/lib/Target/LLVMBuild.txt Tue Oct 15 07:08:59 2013
> @@ -16,7 +16,7 @@
>  ;===------------------------------------------------------------------------===;
>
>  [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)
>  ; with the best execution engine (the native JIT, if available, or the
> @@ -47,10 +47,3 @@ name = Target
>  parent = Libraries
>  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
>
> Modified: llvm/trunk/lib/Target/Makefile
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Makefile?rev=192690&r1=192689&r2=192690&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Makefile (original)
> +++ llvm/trunk/lib/Target/Makefile Tue Oct 15 07:08:59 2013
> @@ -15,6 +15,6 @@ BUILD_ARCHIVE = 1
>  # value for PARALLEL_DIRS which must be set before Makefile.rules is included
>  include $(LEVEL)/Makefile.config
>
> -PARALLEL_DIRS := $(TARGETS_TO_BUILD)
> +PARALLEL_DIRS := $(TARGETS_TO_BUILD) AllTargetsBindings
>
>  include $(LLVM_SRC_ROOT)/Makefile.rules
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list