Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 1 | =================== |
| 2 | LLVM Makefile Guide |
| 3 | =================== |
| 4 | |
| 5 | .. contents:: |
| 6 | :local: |
| 7 | |
| 8 | Introduction |
| 9 | ============ |
| 10 | |
| 11 | This document provides *usage* information about the LLVM makefile system. While |
| 12 | loosely patterned after the BSD makefile system, LLVM has taken a departure from |
| 13 | BSD in order to implement additional features needed by LLVM. Although makefile |
| 14 | systems, such as ``automake``, were attempted at one point, it has become clear |
| 15 | that the features needed by LLVM and the ``Makefile`` norm are too great to use |
| 16 | a more limited tool. Consequently, LLVM requires simply GNU Make 3.79, a widely |
| 17 | portable makefile processor. LLVM unabashedly makes heavy use of the features of |
| 18 | GNU Make so the dependency on GNU Make is firm. If you're not familiar with |
| 19 | ``make``, it is recommended that you read the `GNU Makefile Manual |
| 20 | <http://www.gnu.org/software/make/manual/make.html>`_. |
| 21 | |
| 22 | While this document is rightly part of the `LLVM Programmer's |
| 23 | Manual <ProgrammersManual.html>`_, it is treated separately here because of the |
| 24 | volume of content and because it is often an early source of bewilderment for |
| 25 | new developers. |
| 26 | |
| 27 | General Concepts |
| 28 | ================ |
| 29 | |
| 30 | The LLVM Makefile System is the component of LLVM that is responsible for |
| 31 | building the software, testing it, generating distributions, checking those |
| 32 | distributions, installing and uninstalling, etc. It consists of a several files |
| 33 | throughout the source tree. These files and other general concepts are described |
| 34 | in this section. |
| 35 | |
| 36 | Projects |
| 37 | -------- |
| 38 | |
| 39 | The LLVM Makefile System is quite generous. It not only builds its own software, |
| 40 | but it can build yours too. Built into the system is knowledge of the |
| 41 | ``llvm/projects`` directory. Any directory under ``projects`` that has both a |
| 42 | ``configure`` script and a ``Makefile`` is assumed to be a project that uses the |
| 43 | LLVM Makefile system. Building software that uses LLVM does not require the |
| 44 | LLVM Makefile System nor even placement in the ``llvm/projects`` |
| 45 | directory. However, doing so will allow your project to get up and running |
| 46 | quickly by utilizing the built-in features that are used to compile LLVM. LLVM |
| 47 | compiles itself using the same features of the makefile system as used for |
| 48 | projects. |
| 49 | |
Stephen Hines | 36b5688 | 2014-04-23 16:57:46 -0700 | [diff] [blame] | 50 | For further details, consult the `Projects <Projects.html>`_ page. |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 51 | |
| 52 | Variable Values |
| 53 | --------------- |
| 54 | |
| 55 | To use the makefile system, you simply create a file named ``Makefile`` in your |
| 56 | directory and declare values for certain variables. The variables and values |
| 57 | that you select determine what the makefile system will do. These variables |
| 58 | enable rules and processing in the makefile system that automatically Do The |
Dmitri Gribenko | a048c23 | 2012-12-23 18:46:11 +0000 | [diff] [blame] | 59 | Right Thing (C). |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 60 | |
| 61 | Including Makefiles |
| 62 | ------------------- |
| 63 | |
| 64 | Setting variables alone is not enough. You must include into your Makefile |
| 65 | additional files that provide the rules of the LLVM Makefile system. The various |
| 66 | files involved are described in the sections that follow. |
| 67 | |
| 68 | ``Makefile`` |
| 69 | ^^^^^^^^^^^^ |
| 70 | |
| 71 | Each directory to participate in the build needs to have a file named |
| 72 | ``Makefile``. This is the file first read by ``make``. It has three |
| 73 | sections: |
| 74 | |
| 75 | #. Settable Variables --- Required that must be set first. |
| 76 | #. ``include $(LEVEL)/Makefile.common`` --- include the LLVM Makefile system. |
| 77 | #. Override Variables --- Override variables set by the LLVM Makefile system. |
| 78 | |
| 79 | .. _$(LEVEL)/Makefile.common: |
| 80 | |
| 81 | ``Makefile.common`` |
| 82 | ^^^^^^^^^^^^^^^^^^^ |
| 83 | |
| 84 | Every project must have a ``Makefile.common`` file at its top source |
| 85 | directory. This file serves three purposes: |
| 86 | |
| 87 | #. It includes the project's configuration makefile to obtain values determined |
| 88 | by the ``configure`` script. This is done by including the |
| 89 | `$(LEVEL)/Makefile.config`_ file. |
| 90 | |
| 91 | #. It specifies any other (static) values that are needed throughout the |
| 92 | project. Only values that are used in all or a large proportion of the |
| 93 | project's directories should be placed here. |
| 94 | |
| 95 | #. It includes the standard rules for the LLVM Makefile system, |
| 96 | `$(LLVM_SRC_ROOT)/Makefile.rules`_. This file is the *guts* of the LLVM |
| 97 | ``Makefile`` system. |
| 98 | |
| 99 | .. _$(LEVEL)/Makefile.config: |
| 100 | |
| 101 | ``Makefile.config`` |
| 102 | ^^^^^^^^^^^^^^^^^^^ |
| 103 | |
| 104 | Every project must have a ``Makefile.config`` at the top of its *build* |
| 105 | directory. This file is **generated** by the ``configure`` script from the |
| 106 | pattern provided by the ``Makefile.config.in`` file located at the top of the |
| 107 | project's *source* directory. The contents of this file depend largely on what |
| 108 | configuration items the project uses, however most projects can get what they |
| 109 | need by just relying on LLVM's configuration found in |
| 110 | ``$(LLVM_OBJ_ROOT)/Makefile.config``. |
| 111 | |
| 112 | .. _$(LLVM_SRC_ROOT)/Makefile.rules: |
| 113 | |
| 114 | ``Makefile.rules`` |
| 115 | ^^^^^^^^^^^^^^^^^^ |
| 116 | |
| 117 | This file, located at ``$(LLVM_SRC_ROOT)/Makefile.rules`` is the heart of the |
| 118 | LLVM Makefile System. It provides all the logic, dependencies, and rules for |
| 119 | building the targets supported by the system. What it does largely depends on |
| 120 | the values of ``make`` `variables`_ that have been set *before* |
| 121 | ``Makefile.rules`` is included. |
| 122 | |
| 123 | Comments |
| 124 | ^^^^^^^^ |
| 125 | |
| 126 | User ``Makefile``\s need not have comments in them unless the construction is |
| 127 | unusual or it does not strictly follow the rules and patterns of the LLVM |
| 128 | makefile system. Makefile comments are invoked with the pound (``#``) character. |
| 129 | The ``#`` character and any text following it, to the end of the line, are |
| 130 | ignored by ``make``. |
| 131 | |
| 132 | Tutorial |
| 133 | ======== |
| 134 | |
| 135 | This section provides some examples of the different kinds of modules you can |
| 136 | build with the LLVM makefile system. In general, each directory you provide will |
| 137 | build a single object although that object may be composed of additionally |
| 138 | compiled components. |
| 139 | |
| 140 | Libraries |
| 141 | --------- |
| 142 | |
| 143 | Only a few variable definitions are needed to build a regular library. |
| 144 | Normally, the makefile system will build all the software into a single |
| 145 | ``libname.o`` (pre-linked) object. This means the library is not searchable and |
| 146 | that the distinction between compilation units has been dissolved. Optionally, |
| 147 | you can ask for a shared library (.so) or archive library (.a) built. Archive |
| 148 | libraries are the default. For example: |
| 149 | |
| 150 | .. code-block:: makefile |
| 151 | |
| 152 | LIBRARYNAME = mylib |
| 153 | SHARED_LIBRARY = 1 |
Nuno Lopes | e946a9c | 2013-09-13 15:01:54 +0000 | [diff] [blame] | 154 | BUILD_ARCHIVE = 1 |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 155 | |
| 156 | says to build a library named ``mylib`` with both a shared library |
| 157 | (``mylib.so``) and an archive library (``mylib.a``) version. The contents of all |
| 158 | the libraries produced will be the same, they are just constructed differently. |
| 159 | Note that you normally do not need to specify the sources involved. The LLVM |
| 160 | Makefile system will infer the source files from the contents of the source |
| 161 | directory. |
| 162 | |
| 163 | The ``LOADABLE_MODULE=1`` directive can be used in conjunction with |
| 164 | ``SHARED_LIBRARY=1`` to indicate that the resulting shared library should be |
| 165 | openable with the ``dlopen`` function and searchable with the ``dlsym`` function |
| 166 | (or your operating system's equivalents). While this isn't strictly necessary on |
| 167 | Linux and a few other platforms, it is required on systems like HP-UX and |
| 168 | Darwin. You should use ``LOADABLE_MODULE`` for any shared library that you |
Bill Wendling | 0a8512a | 2013-10-28 21:43:11 +0000 | [diff] [blame] | 169 | intend to be loaded into an tool via the ``-load`` option. :ref:`Pass |
Bill Wendling | f39819d | 2013-10-28 21:43:54 +0000 | [diff] [blame] | 170 | documentation <writing-an-llvm-pass-makefile>` has an example of why you might |
Bill Wendling | 0a8512a | 2013-10-28 21:43:11 +0000 | [diff] [blame] | 171 | want to do this. |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 172 | |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 173 | Loadable Modules |
| 174 | ^^^^^^^^^^^^^^^^ |
| 175 | |
| 176 | In some situations, you need to create a loadable module. Loadable modules can |
| 177 | be loaded into programs like ``opt`` or ``llc`` to specify additional passes to |
| 178 | run or targets to support. Loadable modules are also useful for debugging a |
| 179 | pass or providing a pass with another package if that pass can't be included in |
| 180 | LLVM. |
| 181 | |
| 182 | LLVM provides complete support for building such a module. All you need to do is |
| 183 | use the ``LOADABLE_MODULE`` variable in your ``Makefile``. For example, to build |
| 184 | a loadable module named ``MyMod`` that uses the LLVM libraries ``LLVMSupport.a`` |
| 185 | and ``LLVMSystem.a``, you would specify: |
| 186 | |
| 187 | .. code-block:: makefile |
| 188 | |
| 189 | LIBRARYNAME := MyMod |
| 190 | LOADABLE_MODULE := 1 |
| 191 | LINK_COMPONENTS := support system |
| 192 | |
| 193 | Use of the ``LOADABLE_MODULE`` facility implies several things: |
| 194 | |
| 195 | #. There will be no "``lib``" prefix on the module. This differentiates it from |
| 196 | a standard shared library of the same name. |
| 197 | |
| 198 | #. The `SHARED_LIBRARY`_ variable is turned on. |
| 199 | |
| 200 | #. The `LINK_LIBS_IN_SHARED`_ variable is turned on. |
| 201 | |
| 202 | A loadable module is loaded by LLVM via the facilities of libtool's libltdl |
| 203 | library which is part of ``lib/System`` implementation. |
| 204 | |
| 205 | Tools |
| 206 | ----- |
| 207 | |
| 208 | For building executable programs (tools), you must provide the name of the tool |
| 209 | and the names of the libraries you wish to link with the tool. For example: |
| 210 | |
| 211 | .. code-block:: makefile |
| 212 | |
| 213 | TOOLNAME = mytool |
| 214 | USEDLIBS = mylib |
| 215 | LINK_COMPONENTS = support system |
| 216 | |
| 217 | says that we are to build a tool name ``mytool`` and that it requires three |
| 218 | libraries: ``mylib``, ``LLVMSupport.a`` and ``LLVMSystem.a``. |
| 219 | |
Dmitri Gribenko | a048c23 | 2012-12-23 18:46:11 +0000 | [diff] [blame] | 220 | Note that two different variables are used to indicate which libraries are |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 221 | linked: ``USEDLIBS`` and ``LLVMLIBS``. This distinction is necessary to support |
| 222 | projects. ``LLVMLIBS`` refers to the LLVM libraries found in the LLVM object |
| 223 | directory. ``USEDLIBS`` refers to the libraries built by your project. In the |
| 224 | case of building LLVM tools, ``USEDLIBS`` and ``LLVMLIBS`` can be used |
| 225 | interchangeably since the "project" is LLVM itself and ``USEDLIBS`` refers to |
| 226 | the same place as ``LLVMLIBS``. |
| 227 | |
| 228 | Also note that there are two different ways of specifying a library: with a |
| 229 | ``.a`` suffix and without. Without the suffix, the entry refers to the re-linked |
| 230 | (.o) file which will include *all* symbols of the library. This is |
| 231 | useful, for example, to include all passes from a library of passes. If the |
| 232 | ``.a`` suffix is used then the library is linked as a searchable library (with |
| 233 | the ``-l`` option). In this case, only the symbols that are unresolved *at |
| 234 | that point* will be resolved from the library, if they exist. Other |
| 235 | (unreferenced) symbols will not be included when the ``.a`` syntax is used. Note |
| 236 | that in order to use the ``.a`` suffix, the library in question must have been |
Nuno Lopes | e946a9c | 2013-09-13 15:01:54 +0000 | [diff] [blame] | 237 | built with the ``BUILD_ARCHIVE`` option set. |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 238 | |
| 239 | JIT Tools |
| 240 | ^^^^^^^^^ |
| 241 | |
| 242 | Many tools will want to use the JIT features of LLVM. To do this, you simply |
| 243 | specify that you want an execution 'engine', and the makefiles will |
| 244 | automatically link in the appropriate JIT for the host or an interpreter if none |
| 245 | is available: |
| 246 | |
| 247 | .. code-block:: makefile |
| 248 | |
| 249 | TOOLNAME = my_jit_tool |
| 250 | USEDLIBS = mylib |
| 251 | LINK_COMPONENTS = engine |
| 252 | |
| 253 | Of course, any additional libraries may be listed as other components. To get a |
| 254 | full understanding of how this changes the linker command, it is recommended |
| 255 | that you: |
| 256 | |
| 257 | .. code-block:: bash |
| 258 | |
| 259 | % cd examples/Fibonacci |
| 260 | % make VERBOSE=1 |
| 261 | |
| 262 | Targets Supported |
| 263 | ================= |
| 264 | |
| 265 | This section describes each of the targets that can be built using the LLVM |
| 266 | Makefile system. Any target can be invoked from any directory but not all are |
| 267 | applicable to a given directory (e.g. "check", "dist" and "install" will always |
| 268 | operate as if invoked from the top level directory). |
| 269 | |
| 270 | ================= =============== ================== |
| 271 | Target Name Implied Targets Target Description |
| 272 | ================= =============== ================== |
| 273 | ``all`` \ Compile the software recursively. Default target. |
| 274 | ``all-local`` \ Compile the software in the local directory only. |
| 275 | ``check`` \ Change to the ``test`` directory in a project and run the test suite there. |
| 276 | ``check-local`` \ Run a local test suite. Generally this is only defined in the ``Makefile`` of the project's ``test`` directory. |
| 277 | ``clean`` \ Remove built objects recursively. |
| 278 | ``clean-local`` \ Remove built objects from the local directory only. |
| 279 | ``dist`` ``all`` Prepare a source distribution tarball. |
| 280 | ``dist-check`` ``all`` Prepare a source distribution tarball and check that it builds. |
| 281 | ``dist-clean`` ``clean`` Clean source distribution tarball temporary files. |
| 282 | ``install`` ``all`` Copy built objects to installation directory. |
| 283 | ``preconditions`` ``all`` Check to make sure configuration and makefiles are up to date. |
| 284 | ``printvars`` ``all`` Prints variables defined by the makefile system (for debugging). |
| 285 | ``tags`` \ Make C and C++ tags files for emacs and vi. |
| 286 | ``uninstall`` \ Remove built objects from installation directory. |
| 287 | ================= =============== ================== |
| 288 | |
| 289 | .. _all: |
| 290 | |
| 291 | ``all`` (default) |
| 292 | ----------------- |
| 293 | |
| 294 | When you invoke ``make`` with no arguments, you are implicitly instructing it to |
| 295 | seek the ``all`` target (goal). This target is used for building the software |
| 296 | recursively and will do different things in different directories. For example, |
| 297 | in a ``lib`` directory, the ``all`` target will compile source files and |
| 298 | generate libraries. But, in a ``tools`` directory, it will link libraries and |
| 299 | generate executables. |
| 300 | |
| 301 | ``all-local`` |
| 302 | ------------- |
| 303 | |
| 304 | This target is the same as `all`_ but it operates only on the current directory |
| 305 | instead of recursively. |
| 306 | |
| 307 | ``check`` |
| 308 | --------- |
| 309 | |
| 310 | This target can be invoked from anywhere within a project's directories but |
| 311 | always invokes the `check-local`_ target in the project's ``test`` directory, if |
| 312 | it exists and has a ``Makefile``. A warning is produced otherwise. If |
| 313 | `TESTSUITE`_ is defined on the ``make`` command line, it will be passed down to |
| 314 | the invocation of ``make check-local`` in the ``test`` directory. The intended |
| 315 | usage for this is to assist in running specific suites of tests. If |
| 316 | ``TESTSUITE`` is not set, the implementation of ``check-local`` should run all |
| 317 | normal tests. It is up to the project to define what different values for |
Sean Silva | ac99eed | 2012-11-14 21:09:30 +0000 | [diff] [blame] | 318 | ``TESTSUTE`` will do. See the :doc:`Testing Guide <TestingGuide>` for further |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 319 | details. |
| 320 | |
| 321 | ``check-local`` |
| 322 | --------------- |
| 323 | |
| 324 | This target should be implemented by the ``Makefile`` in the project's ``test`` |
| 325 | directory. It is invoked by the ``check`` target elsewhere. Each project is |
| 326 | free to define the actions of ``check-local`` as appropriate for that |
Dmitri Gribenko | 55c6f0c | 2013-01-18 19:27:43 +0000 | [diff] [blame] | 327 | project. The LLVM project itself uses the :doc:`Lit <CommandGuide/lit>` testing |
| 328 | tool to run a suite of feature and regression tests. Other projects may choose |
| 329 | to use :program:`lit` or any other testing mechanism. |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 330 | |
| 331 | ``clean`` |
| 332 | --------- |
| 333 | |
| 334 | This target cleans the build directory, recursively removing all things that the |
| 335 | Makefile builds. The cleaning rules have been made guarded so they shouldn't go |
| 336 | awry (via ``rm -f $(UNSET_VARIABLE)/*`` which will attempt to erase the entire |
Dmitri Gribenko | a048c23 | 2012-12-23 18:46:11 +0000 | [diff] [blame] | 337 | directory structure). |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 338 | |
| 339 | ``clean-local`` |
| 340 | --------------- |
| 341 | |
| 342 | This target does the same thing as ``clean`` but only for the current (local) |
| 343 | directory. |
| 344 | |
| 345 | ``dist`` |
| 346 | -------- |
| 347 | |
| 348 | This target builds a distribution tarball. It first builds the entire project |
| 349 | using the ``all`` target and then tars up the necessary files and compresses |
| 350 | it. The generated tarball is sufficient for a casual source distribution, but |
| 351 | probably not for a release (see ``dist-check``). |
| 352 | |
| 353 | ``dist-check`` |
| 354 | -------------- |
| 355 | |
| 356 | This target does the same thing as the ``dist`` target but also checks the |
| 357 | distribution tarball. The check is made by unpacking the tarball to a new |
| 358 | directory, configuring it, building it, installing it, and then verifying that |
| 359 | the installation results are correct (by comparing to the original build). This |
| 360 | target can take a long time to run but should be done before a release goes out |
| 361 | to make sure that the distributed tarball can actually be built into a working |
| 362 | release. |
| 363 | |
| 364 | ``dist-clean`` |
| 365 | -------------- |
| 366 | |
| 367 | This is a special form of the ``clean`` clean target. It performs a normal |
| 368 | ``clean`` but also removes things pertaining to building the distribution. |
| 369 | |
| 370 | ``install`` |
| 371 | ----------- |
| 372 | |
| 373 | This target finalizes shared objects and executables and copies all libraries, |
| 374 | headers, executables and documentation to the directory given with the |
| 375 | ``--prefix`` option to ``configure``. When completed, the prefix directory will |
| 376 | have everything needed to **use** LLVM. |
| 377 | |
| 378 | The LLVM makefiles can generate complete **internal** documentation for all the |
| 379 | classes by using ``doxygen``. By default, this feature is **not** enabled |
| 380 | because it takes a long time and generates a massive amount of data (>100MB). If |
| 381 | you want this feature, you must configure LLVM with the --enable-doxygen switch |
| 382 | and ensure that a modern version of doxygen (1.3.7 or later) is available in |
| 383 | your ``PATH``. You can download doxygen from `here |
| 384 | <http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc>`_. |
| 385 | |
| 386 | ``preconditions`` |
| 387 | ----------------- |
| 388 | |
| 389 | This utility target checks to see if the ``Makefile`` in the object directory is |
| 390 | older than the ``Makefile`` in the source directory and copies it if so. It also |
| 391 | reruns the ``configure`` script if that needs to be done and rebuilds the |
| 392 | ``Makefile.config`` file similarly. Users may overload this target to ensure |
| 393 | that sanity checks are run *before* any building of targets as all the targets |
| 394 | depend on ``preconditions``. |
| 395 | |
| 396 | ``printvars`` |
| 397 | ------------- |
| 398 | |
| 399 | This utility target just causes the LLVM makefiles to print out some of the |
| 400 | makefile variables so that you can double check how things are set. |
| 401 | |
| 402 | ``reconfigure`` |
| 403 | --------------- |
| 404 | |
| 405 | This utility target will force a reconfigure of LLVM or your project. It simply |
| 406 | runs ``$(PROJ_OBJ_ROOT)/config.status --recheck`` to rerun the configuration |
| 407 | tests and rebuild the configured files. This isn't generally useful as the |
| 408 | makefiles will reconfigure themselves whenever its necessary. |
| 409 | |
| 410 | ``spotless`` |
| 411 | ------------ |
| 412 | |
| 413 | .. warning:: |
| 414 | |
| 415 | Use with caution! |
| 416 | |
| 417 | This utility target, only available when ``$(PROJ_OBJ_ROOT)`` is not the same as |
| 418 | ``$(PROJ_SRC_ROOT)``, will completely clean the ``$(PROJ_OBJ_ROOT)`` directory |
| 419 | by removing its content entirely and reconfiguring the directory. This returns |
| 420 | the ``$(PROJ_OBJ_ROOT)`` directory to a completely fresh state. All content in |
| 421 | the directory except configured files and top-level makefiles will be lost. |
| 422 | |
| 423 | ``tags`` |
| 424 | -------- |
| 425 | |
| 426 | This target will generate a ``TAGS`` file in the top-level source directory. It |
| 427 | is meant for use with emacs, XEmacs, or ViM. The TAGS file provides an index of |
| 428 | symbol definitions so that the editor can jump you to the definition |
| 429 | quickly. |
| 430 | |
| 431 | ``uninstall`` |
| 432 | ------------- |
| 433 | |
| 434 | This target is the opposite of the ``install`` target. It removes the header, |
| 435 | library and executable files from the installation directories. Note that the |
| 436 | directories themselves are not removed because it is not guaranteed that LLVM is |
| 437 | the only thing installing there (e.g. ``--prefix=/usr``). |
| 438 | |
| 439 | .. _variables: |
| 440 | |
| 441 | Variables |
| 442 | ========= |
| 443 | |
| 444 | Variables are used to tell the LLVM Makefile System what to do and to obtain |
| 445 | information from it. Variables are also used internally by the LLVM Makefile |
| 446 | System. Variable names that contain only the upper case alphabetic letters and |
| 447 | underscore are intended for use by the end user. All other variables are |
| 448 | internal to the LLVM Makefile System and should not be relied upon nor |
| 449 | modified. The sections below describe how to use the LLVM Makefile |
| 450 | variables. |
| 451 | |
| 452 | Control Variables |
| 453 | ----------------- |
| 454 | |
| 455 | Variables listed in the table below should be set *before* the inclusion of |
| 456 | `$(LEVEL)/Makefile.common`_. These variables provide input to the LLVM make |
| 457 | system that tell it what to do for the current directory. |
| 458 | |
| 459 | ``BUILD_ARCHIVE`` |
| 460 | If set to any value, causes an archive (.a) library to be built. |
| 461 | |
| 462 | ``BUILT_SOURCES`` |
| 463 | Specifies a set of source files that are generated from other source |
| 464 | files. These sources will be built before any other target processing to |
| 465 | ensure they are present. |
| 466 | |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 467 | ``CONFIG_FILES`` |
| 468 | Specifies a set of configuration files to be installed. |
| 469 | |
| 470 | ``DEBUG_SYMBOLS`` |
| 471 | If set to any value, causes the build to include debugging symbols even in |
| 472 | optimized objects, libraries and executables. This alters the flags |
| 473 | specified to the compilers and linkers. Debugging isn't fun in an optimized |
| 474 | build, but it is possible. |
| 475 | |
| 476 | ``DIRS`` |
| 477 | Specifies a set of directories, usually children of the current directory, |
| 478 | that should also be made using the same goal. These directories will be |
| 479 | built serially. |
| 480 | |
| 481 | ``DISABLE_AUTO_DEPENDENCIES`` |
| 482 | If set to any value, causes the makefiles to **not** automatically generate |
| 483 | dependencies when running the compiler. Use of this feature is discouraged |
| 484 | and it may be removed at a later date. |
| 485 | |
| 486 | ``ENABLE_OPTIMIZED`` |
| 487 | If set to 1, causes the build to generate optimized objects, libraries and |
| 488 | executables. This alters the flags specified to the compilers and |
| 489 | linkers. Generally debugging won't be a fun experience with an optimized |
| 490 | build. |
| 491 | |
| 492 | ``ENABLE_PROFILING`` |
| 493 | If set to 1, causes the build to generate both optimized and profiled |
| 494 | objects, libraries and executables. This alters the flags specified to the |
| 495 | compilers and linkers to ensure that profile data can be collected from the |
| 496 | tools built. Use the ``gprof`` tool to analyze the output from the profiled |
| 497 | tools (``gmon.out``). |
| 498 | |
| 499 | ``DISABLE_ASSERTIONS`` |
| 500 | If set to 1, causes the build to disable assertions, even if building a |
| 501 | debug or profile build. This will exclude all assertion check code from the |
| 502 | build. LLVM will execute faster, but with little help when things go |
| 503 | wrong. |
| 504 | |
| 505 | ``EXPERIMENTAL_DIRS`` |
| 506 | Specify a set of directories that should be built, but if they fail, it |
| 507 | should not cause the build to fail. Note that this should only be used |
| 508 | temporarily while code is being written. |
| 509 | |
| 510 | ``EXPORTED_SYMBOL_FILE`` |
| 511 | Specifies the name of a single file that contains a list of the symbols to |
| 512 | be exported by the linker. One symbol per line. |
| 513 | |
| 514 | ``EXPORTED_SYMBOL_LIST`` |
| 515 | Specifies a set of symbols to be exported by the linker. |
| 516 | |
| 517 | ``EXTRA_DIST`` |
| 518 | Specifies additional files that should be distributed with LLVM. All source |
| 519 | files, all built sources, all Makefiles, and most documentation files will |
| 520 | be automatically distributed. Use this variable to distribute any files that |
| 521 | are not automatically distributed. |
| 522 | |
| 523 | ``KEEP_SYMBOLS`` |
| 524 | If set to any value, specifies that when linking executables the makefiles |
| 525 | should retain debug symbols in the executable. Normally, symbols are |
| 526 | stripped from the executable. |
| 527 | |
| 528 | ``LEVEL`` (required) |
| 529 | Specify the level of nesting from the top level. This variable must be set |
| 530 | in each makefile as it is used to find the top level and thus the other |
| 531 | makefiles. |
| 532 | |
| 533 | ``LIBRARYNAME`` |
| 534 | Specify the name of the library to be built. (Required For Libraries) |
| 535 | |
| 536 | ``LINK_COMPONENTS`` |
| 537 | When specified for building a tool, the value of this variable will be |
| 538 | passed to the ``llvm-config`` tool to generate a link line for the |
| 539 | tool. Unlike ``USEDLIBS`` and ``LLVMLIBS``, not all libraries need to be |
| 540 | specified. The ``llvm-config`` tool will figure out the library dependencies |
| 541 | and add any libraries that are needed. The ``USEDLIBS`` variable can still |
| 542 | be used in conjunction with ``LINK_COMPONENTS`` so that additional |
| 543 | project-specific libraries can be linked with the LLVM libraries specified |
| 544 | by ``LINK_COMPONENTS``. |
| 545 | |
| 546 | .. _LINK_LIBS_IN_SHARED: |
| 547 | |
| 548 | ``LINK_LIBS_IN_SHARED`` |
| 549 | By default, shared library linking will ignore any libraries specified with |
| 550 | the `LLVMLIBS`_ or `USEDLIBS`_. This prevents shared libs from including |
| 551 | things that will be in the LLVM tool the shared library will be loaded |
| 552 | into. However, sometimes it is useful to link certain libraries into your |
| 553 | shared library and this option enables that feature. |
| 554 | |
| 555 | .. _LLVMLIBS: |
| 556 | |
| 557 | ``LLVMLIBS`` |
| 558 | Specifies the set of libraries from the LLVM ``$(ObjDir)`` that will be |
| 559 | linked into the tool or library. |
| 560 | |
| 561 | ``LOADABLE_MODULE`` |
| 562 | If set to any value, causes the shared library being built to also be a |
| 563 | loadable module. Loadable modules can be opened with the dlopen() function |
| 564 | and searched with dlsym (or the operating system's equivalent). Note that |
| 565 | setting this variable without also setting ``SHARED_LIBRARY`` will have no |
| 566 | effect. |
| 567 | |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 568 | ``NO_INSTALL`` |
| 569 | Specifies that the build products of the directory should not be installed |
| 570 | but should be built even if the ``install`` target is given. This is handy |
| 571 | for directories that build libraries or tools that are only used as part of |
| 572 | the build process, such as code generators (e.g. ``tblgen``). |
| 573 | |
| 574 | ``OPTIONAL_DIRS`` |
Dmitri Gribenko | a048c23 | 2012-12-23 18:46:11 +0000 | [diff] [blame] | 575 | Specify a set of directories that may be built, if they exist, but it is |
| 576 | not an error for them not to exist. |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 577 | |
| 578 | ``PARALLEL_DIRS`` |
| 579 | Specify a set of directories to build recursively and in parallel if the |
| 580 | ``-j`` option was used with ``make``. |
| 581 | |
| 582 | .. _SHARED_LIBRARY: |
| 583 | |
| 584 | ``SHARED_LIBRARY`` |
| 585 | If set to any value, causes a shared library (``.so``) to be built in |
| 586 | addition to any other kinds of libraries. Note that this option will cause |
| 587 | all source files to be built twice: once with options for position |
| 588 | independent code and once without. Use it only where you really need a |
| 589 | shared library. |
| 590 | |
| 591 | ``SOURCES`` (optional) |
| 592 | Specifies the list of source files in the current directory to be |
| 593 | built. Source files of any type may be specified (programs, documentation, |
| 594 | config files, etc.). If not specified, the makefile system will infer the |
| 595 | set of source files from the files present in the current directory. |
| 596 | |
| 597 | ``SUFFIXES`` |
| 598 | Specifies a set of filename suffixes that occur in suffix match rules. Only |
| 599 | set this if your local ``Makefile`` specifies additional suffix match |
| 600 | rules. |
| 601 | |
| 602 | ``TARGET`` |
| 603 | Specifies the name of the LLVM code generation target that the current |
| 604 | directory builds. Setting this variable enables additional rules to build |
| 605 | ``.inc`` files from ``.td`` files. |
| 606 | |
| 607 | .. _TESTSUITE: |
| 608 | |
| 609 | ``TESTSUITE`` |
| 610 | Specifies the directory of tests to run in ``llvm/test``. |
| 611 | |
| 612 | ``TOOLNAME`` |
| 613 | Specifies the name of the tool that the current directory should build. |
| 614 | |
| 615 | ``TOOL_VERBOSE`` |
| 616 | Implies ``VERBOSE`` and also tells each tool invoked to be verbose. This is |
| 617 | handy when you're trying to see the sub-tools invoked by each tool invoked |
| 618 | by the makefile. For example, this will pass ``-v`` to the GCC compilers |
| 619 | which causes it to print out the command lines it uses to invoke sub-tools |
| 620 | (compiler, assembler, linker). |
| 621 | |
| 622 | .. _USEDLIBS: |
| 623 | |
| 624 | ``USEDLIBS`` |
| 625 | Specifies the list of project libraries that will be linked into the tool or |
| 626 | library. |
| 627 | |
| 628 | ``VERBOSE`` |
| 629 | Tells the Makefile system to produce detailed output of what it is doing |
| 630 | instead of just summary comments. This will generate a LOT of output. |
| 631 | |
| 632 | Override Variables |
| 633 | ------------------ |
| 634 | |
| 635 | Override variables can be used to override the default values provided by the |
| 636 | LLVM makefile system. These variables can be set in several ways: |
| 637 | |
| 638 | * In the environment (e.g. setenv, export) --- not recommended. |
| 639 | * On the ``make`` command line --- recommended. |
| 640 | * On the ``configure`` command line. |
| 641 | * In the Makefile (only *after* the inclusion of `$(LEVEL)/Makefile.common`_). |
| 642 | |
| 643 | The override variables are given below: |
| 644 | |
| 645 | ``AR`` (defaulted) |
| 646 | Specifies the path to the ``ar`` tool. |
| 647 | |
| 648 | ``PROJ_OBJ_DIR`` |
| 649 | The directory into which the products of build rules will be placed. This |
| 650 | might be the same as `PROJ_SRC_DIR`_ but typically is not. |
| 651 | |
| 652 | .. _PROJ_SRC_DIR: |
| 653 | |
| 654 | ``PROJ_SRC_DIR`` |
| 655 | The directory which contains the source files to be built. |
| 656 | |
| 657 | ``BUILD_EXAMPLES`` |
| 658 | If set to 1, build examples in ``examples`` and (if building Clang) |
| 659 | ``tools/clang/examples`` directories. |
| 660 | |
| 661 | ``BZIP2`` (configured) |
| 662 | The path to the ``bzip2`` tool. |
| 663 | |
| 664 | ``CC`` (configured) |
| 665 | The path to the 'C' compiler. |
| 666 | |
| 667 | ``CFLAGS`` |
| 668 | Additional flags to be passed to the 'C' compiler. |
| 669 | |
Patrik Hagglund | 6c440fc | 2013-02-04 08:15:53 +0000 | [diff] [blame] | 670 | ``CPPFLAGS`` |
| 671 | Additional flags passed to the C/C++ preprocessor. |
| 672 | |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 673 | ``CXX`` |
| 674 | Specifies the path to the C++ compiler. |
| 675 | |
| 676 | ``CXXFLAGS`` |
| 677 | Additional flags to be passed to the C++ compiler. |
| 678 | |
| 679 | ``DATE`` (configured) |
| 680 | Specifies the path to the ``date`` program or any program that can generate |
| 681 | the current date and time on its standard output. |
| 682 | |
| 683 | ``DOT`` (configured) |
| 684 | Specifies the path to the ``dot`` tool or ``false`` if there isn't one. |
| 685 | |
| 686 | ``ECHO`` (configured) |
| 687 | Specifies the path to the ``echo`` tool for printing output. |
| 688 | |
| 689 | ``EXEEXT`` (configured) |
| 690 | Provides the extension to be used on executables built by the makefiles. |
| 691 | The value may be empty on platforms that do not use file extensions for |
| 692 | executables (e.g. Unix). |
| 693 | |
| 694 | ``INSTALL`` (configured) |
| 695 | Specifies the path to the ``install`` tool. |
| 696 | |
| 697 | ``LDFLAGS`` (configured) |
| 698 | Allows users to specify additional flags to pass to the linker. |
| 699 | |
| 700 | ``LIBS`` (configured) |
| 701 | The list of libraries that should be linked with each tool. |
| 702 | |
| 703 | ``LIBTOOL`` (configured) |
| 704 | Specifies the path to the ``libtool`` tool. This tool is renamed ``mklib`` |
| 705 | by the ``configure`` script. |
| 706 | |
| 707 | ``LLVMAS`` (defaulted) |
| 708 | Specifies the path to the ``llvm-as`` tool. |
| 709 | |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 710 | ``LLVMGCC`` (defaulted) |
| 711 | Specifies the path to the LLVM version of the GCC 'C' Compiler. |
| 712 | |
| 713 | ``LLVMGXX`` (defaulted) |
| 714 | Specifies the path to the LLVM version of the GCC C++ Compiler. |
| 715 | |
| 716 | ``LLVMLD`` (defaulted) |
| 717 | Specifies the path to the LLVM bitcode linker tool |
| 718 | |
| 719 | ``LLVM_OBJ_ROOT`` (configured) |
| 720 | Specifies the top directory into which the output of the build is placed. |
| 721 | |
| 722 | ``LLVM_SRC_ROOT`` (configured) |
| 723 | Specifies the top directory in which the sources are found. |
| 724 | |
| 725 | ``LLVM_TARBALL_NAME`` (configured) |
| 726 | Specifies the name of the distribution tarball to create. This is configured |
| 727 | from the name of the project and its version number. |
| 728 | |
| 729 | ``MKDIR`` (defaulted) |
| 730 | Specifies the path to the ``mkdir`` tool that creates directories. |
| 731 | |
| 732 | ``ONLY_TOOLS`` |
| 733 | If set, specifies the list of tools to build. |
| 734 | |
| 735 | ``PLATFORMSTRIPOPTS`` |
| 736 | The options to provide to the linker to specify that a stripped (no symbols) |
| 737 | executable should be built. |
| 738 | |
| 739 | ``RANLIB`` (defaulted) |
| 740 | Specifies the path to the ``ranlib`` tool. |
| 741 | |
| 742 | ``RM`` (defaulted) |
| 743 | Specifies the path to the ``rm`` tool. |
| 744 | |
| 745 | ``SED`` (defaulted) |
| 746 | Specifies the path to the ``sed`` tool. |
| 747 | |
| 748 | ``SHLIBEXT`` (configured) |
| 749 | Provides the filename extension to use for shared libraries. |
| 750 | |
| 751 | ``TBLGEN`` (defaulted) |
| 752 | Specifies the path to the ``tblgen`` tool. |
| 753 | |
| 754 | ``TAR`` (defaulted) |
| 755 | Specifies the path to the ``tar`` tool. |
| 756 | |
| 757 | ``ZIP`` (defaulted) |
| 758 | Specifies the path to the ``zip`` tool. |
| 759 | |
| 760 | Readable Variables |
| 761 | ------------------ |
| 762 | |
| 763 | Variables listed in the table below can be used by the user's Makefile but |
| 764 | should not be changed. Changing the value will generally cause the build to go |
| 765 | wrong, so don't do it. |
| 766 | |
| 767 | ``bindir`` |
| 768 | The directory into which executables will ultimately be installed. This |
| 769 | value is derived from the ``--prefix`` option given to ``configure``. |
| 770 | |
| 771 | ``BuildMode`` |
| 772 | The name of the type of build being performed: Debug, Release, or |
| 773 | Profile. |
| 774 | |
| 775 | ``bytecode_libdir`` |
| 776 | The directory into which bitcode libraries will ultimately be installed. |
| 777 | This value is derived from the ``--prefix`` option given to ``configure``. |
| 778 | |
| 779 | ``ConfigureScriptFLAGS`` |
| 780 | Additional flags given to the ``configure`` script when reconfiguring. |
| 781 | |
| 782 | ``DistDir`` |
| 783 | The *current* directory for which a distribution copy is being made. |
| 784 | |
| 785 | .. _Echo: |
| 786 | |
| 787 | ``Echo`` |
| 788 | The LLVM Makefile System output command. This provides the ``llvm[n]`` |
| 789 | prefix and starts with ``@`` so the command itself is not printed by |
| 790 | ``make``. |
| 791 | |
| 792 | ``EchoCmd`` |
| 793 | Same as `Echo`_ but without the leading ``@``. |
| 794 | |
| 795 | ``includedir`` |
| 796 | The directory into which include files will ultimately be installed. This |
| 797 | value is derived from the ``--prefix`` option given to ``configure``. |
| 798 | |
| 799 | ``libdir`` |
| 800 | The directory into which native libraries will ultimately be installed. |
| 801 | This value is derived from the ``--prefix`` option given to |
| 802 | ``configure``. |
| 803 | |
| 804 | ``LibDir`` |
| 805 | The configuration specific directory into which libraries are placed before |
| 806 | installation. |
| 807 | |
| 808 | ``MakefileConfig`` |
| 809 | Full path of the ``Makefile.config`` file. |
| 810 | |
| 811 | ``MakefileConfigIn`` |
| 812 | Full path of the ``Makefile.config.in`` file. |
| 813 | |
| 814 | ``ObjDir`` |
| 815 | The configuration and directory specific directory where build objects |
| 816 | (compilation results) are placed. |
| 817 | |
| 818 | ``SubDirs`` |
| 819 | The complete list of sub-directories of the current directory as |
| 820 | specified by other variables. |
| 821 | |
| 822 | ``Sources`` |
| 823 | The complete list of source files. |
| 824 | |
| 825 | ``sysconfdir`` |
| 826 | The directory into which configuration files will ultimately be |
| 827 | installed. This value is derived from the ``--prefix`` option given to |
| 828 | ``configure``. |
| 829 | |
| 830 | ``ToolDir`` |
| 831 | The configuration specific directory into which executables are placed |
| 832 | before they are installed. |
| 833 | |
| 834 | ``TopDistDir`` |
| 835 | The top most directory into which the distribution files are copied. |
| 836 | |
| 837 | ``Verb`` |
| 838 | Use this as the first thing on your build script lines to enable or disable |
| 839 | verbose mode. It expands to either an ``@`` (quiet mode) or nothing (verbose |
| 840 | mode). |
| 841 | |
| 842 | Internal Variables |
| 843 | ------------------ |
| 844 | |
| 845 | Variables listed below are used by the LLVM Makefile System and considered |
| 846 | internal. You should not use these variables under any circumstances. |
| 847 | |
| 848 | .. code-block:: makefile |
| 849 | |
| 850 | Archive |
| 851 | AR.Flags |
| 852 | BaseNameSources |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 853 | BCLinkLib |
| 854 | C.Flags |
| 855 | Compile.C |
| 856 | CompileCommonOpts |
| 857 | Compile.CXX |
| 858 | ConfigStatusScript |
| 859 | ConfigureScript |
| 860 | CPP.Flags |
| 861 | CPP.Flags |
| 862 | CXX.Flags |
| 863 | DependFiles |
| 864 | DestArchiveLib |
| 865 | DestBitcodeLib |
| 866 | DestModule |
| 867 | DestSharedLib |
| 868 | DestTool |
| 869 | DistAlways |
| 870 | DistCheckDir |
| 871 | DistCheckTop |
| 872 | DistFiles |
| 873 | DistName |
| 874 | DistOther |
| 875 | DistSources |
| 876 | DistSubDirs |
| 877 | DistTarBZ2 |
| 878 | DistTarGZip |
| 879 | DistZip |
| 880 | ExtraLibs |
| 881 | FakeSources |
| 882 | INCFiles |
| 883 | InternalTargets |
| 884 | LD.Flags |
| 885 | LibName.A |
| 886 | LibName.BC |
| 887 | LibName.LA |
| 888 | LibName.O |
| 889 | LibTool.Flags |
| 890 | Link |
| 891 | LinkModule |
| 892 | LLVMLibDir |
| 893 | LLVMLibsOptions |
| 894 | LLVMLibsPaths |
| 895 | LLVMToolDir |
| 896 | LLVMUsedLibs |
| 897 | LocalTargets |
| 898 | Module |
Bill Wendling | 9059390 | 2012-06-20 04:20:39 +0000 | [diff] [blame] | 899 | ObjectsLO |
| 900 | ObjectsO |
| 901 | ObjMakefiles |
| 902 | ParallelTargets |
| 903 | PreConditions |
| 904 | ProjLibsOptions |
| 905 | ProjLibsPaths |
| 906 | ProjUsedLibs |
| 907 | Ranlib |
| 908 | RecursiveTargets |
| 909 | SrcMakefiles |
| 910 | Strip |
| 911 | StripWarnMsg |
| 912 | TableGen |
| 913 | TDFiles |
| 914 | ToolBuildPath |
| 915 | TopLevelTargets |
| 916 | UserTargets |