X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FMakefileGuide.html;h=c13e06fb1f08217620c37273ff143dbc618156e2;hb=b627eab0402edabb19c702fd1f04c6c59ee2b339;hp=54f6b22f6d9fd732a4e5fe013b06830882a7530f;hpb=004ba03a466f0f66e45d88320495ea8c949665f4;p=oota-llvm.git diff --git a/docs/MakefileGuide.html b/docs/MakefileGuide.html index 54f6b22f6d9..c13e06fb1f0 100644 --- a/docs/MakefileGuide.html +++ b/docs/MakefileGuide.html @@ -30,7 +30,8 @@
  1. Libraries
      -
    1. Bytecode Modules
    2. +
    3. Bytecode Modules
    4. +
    5. Loadable Modules
  2. Tools @@ -237,7 +238,7 @@ LIBRARYNAME = mylib SHARED_LIBRARY = 1 ARCHIVE_LIBRARY = 1 - DONT_BUILT_RELINKED = 1 + DONT_BUILD_RELINKED = 1

    says to build a library named "mylib" with both a shared library (mylib.so) and an archive library (mylib.a) version but @@ -259,7 +260,7 @@ -

    +

    In some situations, it is desireable to build a single bytecode module from a variety of sources, instead of an archive, shared library, or bytecode @@ -279,6 +280,40 @@

    + + +
    +

    In some situations, you need to create a loadable module. Loadable modules + can be loaded into programs like opt or llc to specify + additional passes to run or targets to support. Loadable modules are also + useful for debugging a pass or providing a pass with another package if that + pass can't be included in LLVM.

    +

    LLVM provides complete support for building such a module. All you need to + do is use the LOADABLE_MODULE variable in your Makefile. For example, to + build a loadable module named MyMod that uses the LLVM libraries + LLVMSupport.a and LLVMSystem.a, you would specify:

    +
    
    +     LIBRARYNAME := MyMod
    +     LOADABLE_MODULE := 1
    +     LINK_COMPONENTS := support system
    +  
    +

    Use of the LOADABLE_MODULE facility implies several things:

    +
      +
    1. There will be no "lib" prefix on the module. This differentiates it from + a standard shared library of the same name.
    2. +
    3. The SHARED_LIBRARY variable is turned + on.
    4. +
    5. The LINK_LIBS_IN_SHARED variable + is turned on.
    6. +
    7. The DONT_BUILD_RELINKED variable + is turned on.
    8. +
    +

    A loadable module is loaded by LLVM via the facilities of libtool's libltdl + library which is part of lib/System implementation.

    +
    +
    @@ -288,7 +323,7 @@
    
           TOOLNAME = mytool
           USEDLIBS = mylib
    -      LLVMLIBS = LLVMSupport.a LLVMSystem.a
    +      LINK_COMPONENTS = support system
       

    says that we are to build a tool name mytool and that it requires three libraries: mylib, LLVMSupport.a and @@ -317,36 +352,22 @@

    -

    Many tools will want to use the JIT features of LLVM. However, getting the - right set of libraries to link with is tedious, platform specific, and error - prone. Additionally, the JIT has special linker switch options that it needs. - Consequently, to make it easier to build tools that use the JIT, you can - use a special value for the LLVMLIBS variable:

    +

    Many tools will want to use the JIT features of LLVM. To do this, you + simply specify that you want an execution 'engine', and the makefiles will + automatically link in the appropriate JIT for the host or an interpreter + if none is available:

    
           TOOLNAME = my_jit_tool
           USEDLIBS = mylib
    -      LLVMLIBS = JIT
    +      LINK_COMPONENTS = engine
       
    -

    Using a value of JIT for LLVMLIBS tells the makefile - system to construct a special value for LLVMLIBS that gives the program all - the LLVM libraries needed to run the JIT. Any additional libraries needed can - still be specified with USEDLIBS. To get a full understanding of how - this changes the linker command, it is recommended that you:

    +

    Of course, any additional libraries may be listed as other components. To + get a full understanding of how this changes the linker command, it is + recommended that you:

    
           cd examples/Fibonacci
           make VERBOSE=1
       
    -

    By default, using LLVMLIBS=JIT will link in enough to support JIT - code generation for the architecture on which the tool is linked. If you need - additional target architectures linked in, you may specify them on the command - line or in your Makefile. For example:

    -
    
    -      ENABLE_X86_JIT=1
    -      ENABLE_SPARCV9_JIT=1
    -      ENALBE_PPC_JIT=1
    -  
    -

    will cause the tool to be able to generate code for all three platforms. -

    @@ -662,6 +683,22 @@
    LIBRARYNAME
    Specify the name of the library to be built. (Required For Libraries)
    +
    LINK_COMPONENTS
    +
    When specified for building a tool, the value of this variable will be + passed to the llvm-config tool to generate a link line for the + tool. Unlike USEDLIBS and LLVMLIBS, not all libraries need + to be specified. The llvm-config tool will figure out the library + dependencies and add any libraries that are needed. The USEDLIBS + variable can still be used in conjunction with LINK_COMPONENTS so + that additional project-specific libraries can be linked with the LLVM + libraries specified by LINK_COMPONENTS
    +
    LINK_LIBS_IN_SHARED
    +
    By default, shared library linking will ignore any libraries specified + with the LLVMLIBS or USEDLIBS. + This prevents shared libs from including things that will be in the LLVM + tool the shared library will be loaded into. However, sometimes it is useful + to link certain libraries into your shared library and this option enables + that feature.
    LLVMLIBS
    Specifies the set of libraries from the LLVM $(ObjDir) that will be linked into the tool or library.
    @@ -676,6 +713,12 @@ module can be specified in conjunction with other kinds of library builds or by itself. It constructs from the sources a single linked bytecode file. +
    NO_INSTALL
    +
    Specifies that the build products of the directory should not be + installed but should be built even if the install target is given. + This is handy for directories that build libraries or tools that are only + used as part of the build process, such as code generators (e.g. + tblgen).
    OPTIONAL_DIRS
    Specify a set of directories that may be built, if they exist, but its not an error for them not to exist.
    @@ -747,8 +790,6 @@ not.
    PROJ_SRC_DIR
    The directory which contains the source files to be built.
    -
    BURG
    -
    Specifies the path to the burg tool.
    BZIP2(configured)
    The path to the bzip2 tool.
    CC(configured)
    @@ -778,8 +819,6 @@ executables (e.g. Unix).
    FLEX(configured)
    Specifies the path to the flex tool.
    -
    GCCLD(defaulted)
    -
    Specifies the path to the gccld tool.
    INSTALL(configured)
    Specifies the path to the install tool.
    LDFLAGS(configured)
    @@ -795,6 +834,8 @@
    Specifies the path to the LLVM version of the GCC 'C' Compiler
    LLVMGXX(defaulted)
    Specifies the path to the LLVM version of the GCC C++ Compiler
    +
    LLVMLD(defaulted)
    +
    Specifies the path to the LLVM bytecode linker tool
    LLVM_OBJ_ROOT(configured)
    Specifies the top directory into which the output of the build is @@ -913,7 +954,6 @@ BCCompile.C BCCompile.CXX BCLinkLib - Burg C.Flags Compile.C CompileCommonOpts