John Criswell | c310f62 | 2003-10-13 16:13:06 +0000 | [diff] [blame] | 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| 2 | |
| 3 | <h1> |
| 4 | <center> |
| 5 | LLVM: Frequently Asked Questions |
| 6 | </center> |
| 7 | </h1> |
| 8 | |
| 9 | <hr> |
| 10 | |
| 11 | <!--=====================================================================--> |
| 12 | <h2> |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 13 | <a name="license">Licenses</a> |
| 14 | </h2> |
| 15 | <!--=====================================================================--> |
| 16 | |
| 17 | <dl compact> |
| 18 | <dt> <b>Why are the LLVM source code and the front-end distributed |
| 19 | under different licenses?</b> |
| 20 | <dd> |
| 21 | The C/C++ front-ends are based on GCC and must be distributed under |
Vikram S. Adve | 0493f34 | 2003-10-25 17:19:21 +0000 | [diff] [blame] | 22 | the GPL. Our aim is to distribute LLVM source code under a <em>much |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 23 | less restrictive</em> license, in particular one that does not |
| 24 | compel users who distribute tools based on modifying the source to |
| 25 | redistribute the modified source code as well. |
Vikram S. Adve | 168da7d | 2003-10-25 17:14:52 +0000 | [diff] [blame] | 26 | <p> |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 27 | <dt><b>Does the Illinois Open Source License really qualify |
| 28 | as an "open source" license?</b> |
Vikram S. Adve | 58433c4 | 2003-10-25 17:22:08 +0000 | [diff] [blame^] | 29 | <dd>The license is |
| 30 | <a href="http://www.opensource.org/licenses/UoI-NCSA.php">certified</a> |
| 31 | by the Open Source Initiative (OSI). |
Vikram S. Adve | 168da7d | 2003-10-25 17:14:52 +0000 | [diff] [blame] | 32 | <p> |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 33 | <dt> <b>Can I modify LLVM source code and redistribute the modified |
| 34 | source?</b> |
| 35 | <dd> |
Vikram S. Adve | 0493f34 | 2003-10-25 17:19:21 +0000 | [diff] [blame] | 36 | Yes. The modified source distribution must retain the |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 37 | copyright notice and follow the three bulletted conditions listed in |
Vikram S. Adve | 6d37679 | 2003-10-25 17:20:38 +0000 | [diff] [blame] | 38 | the <a href="http://llvm.cs.uiuc.edu/releases/1.0/LICENSE.TXT">LLVM license</a>. |
Vikram S. Adve | 168da7d | 2003-10-25 17:14:52 +0000 | [diff] [blame] | 39 | <p> |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 40 | <dt> <b>Can I modify LLVM source code and redistribute binaries or |
Vikram S. Adve | 168da7d | 2003-10-25 17:14:52 +0000 | [diff] [blame] | 41 | other tools based on it, without redistributing the source?</b> |
Vikram S. Adve | 04da65a | 2003-10-25 17:06:55 +0000 | [diff] [blame] | 42 | <dd> |
| 43 | Yes, this is why we distribute LLVM under a less restrictive license |
| 44 | than GPL, as explained in the first question above. |
| 45 | <p> |
| 46 | </dl> |
| 47 | <hr> |
| 48 | |
| 49 | <!--=====================================================================--> |
| 50 | <h2> |
John Criswell | c310f62 | 2003-10-13 16:13:06 +0000 | [diff] [blame] | 51 | <a name="source">Source Code</a> |
| 52 | </h2> |
| 53 | <!--=====================================================================--> |
| 54 | |
| 55 | <dl compact> |
| 56 | <dt> <b>In what language is LLVM written?</b> |
| 57 | <dd> |
| 58 | All of the LLVM tools and libraries are written in C++ with extensive use |
| 59 | of the STL. |
| 60 | <p> |
| 61 | |
| 62 | <dt><b>How portable is the LLVM source code?</b> |
| 63 | <dd> |
| 64 | The LLVM source code should be portable to most modern UNIX-like operating |
| 65 | systems. Most of the code is written in standard C++ with operating |
| 66 | system services abstracted to a support library. The tools required to |
| 67 | build and test LLVM have been ported to a plethora of platforms. |
| 68 | <p> |
| 69 | Some porting problems may exist in the following areas: |
| 70 | <ul> |
| 71 | <li>The GCC front end code is not as portable as the LLVM suite, so it |
| 72 | may not compile as well on unsupported platforms. |
| 73 | |
| 74 | <p> |
| 75 | |
| 76 | <li>The Python test classes are more UNIX-centric than they should be, |
| 77 | so porting to non-UNIX like platforms (i.e. Windows, MacOS 9) will |
| 78 | require some effort. |
| 79 | <p> |
| 80 | |
| 81 | <li>The LLVM build system relies heavily on UNIX shell tools, like the |
| 82 | Bourne Shell and sed. Porting to systems without these tools (MacOS 9, |
| 83 | Plan 9) will require more effort. |
| 84 | </ul> |
| 85 | </dl> |
| 86 | |
| 87 | <hr> |
| 88 | |
| 89 | <!--=====================================================================--> |
| 90 | <h2> |
| 91 | <a name="build">Build Problems</a> |
| 92 | </h2> |
| 93 | <!--=====================================================================--> |
| 94 | |
| 95 | <dl compact> |
| 96 | <dt><b>When I run configure, it finds the wrong C compiler.</b> |
| 97 | <dd> |
| 98 | The <tt>configure</tt> script attempts to locate first <tt>gcc</tt> and |
| 99 | then <tt>cc</tt>, unless it finds compiler paths set in <tt>CC</tt> and |
| 100 | <tt>CXX</tt> for the C and C++ compiler, respectively. |
| 101 | |
| 102 | If <tt>configure</tt> finds the wrong compiler, either adjust your |
| 103 | <tt>PATH</tt> environment variable or set <tt>CC</tt> and <tt>CXX</tt> |
| 104 | explicitly. |
| 105 | <p> |
| 106 | |
| 107 | <dt><b>I compile the code, and I get some error about /localhome</b>. |
| 108 | <dd> |
| 109 | There are several possible causes for this. The first is that you |
| 110 | didn't set a pathname properly when using <tt>configure</tt>, and it |
| 111 | defaulted to a pathname that we use on our research machines. |
| 112 | <p> |
| 113 | Another possibility is that we hardcoded a path in our Makefiles. If |
| 114 | you see this, please email the LLVM bug mailing list with the name of |
| 115 | the offending Makefile and a description of what is wrong with it. |
| 116 | |
| 117 | <dt><b>The <tt>configure</tt> script finds the right C compiler, but it |
| 118 | uses the LLVM linker from a previous build. What do I do?</b> |
| 119 | <dd> |
| 120 | The <tt>configure</tt> script uses the <tt>PATH</tt> to find |
| 121 | executables, so if it's grabbing the wrong linker/assembler/etc, there |
| 122 | are two ways to fix it: |
| 123 | <ol> |
| 124 | <li>Adjust your <tt>PATH</tt> environment variable so that the |
| 125 | correct program appears first in the <tt>PATH</tt>. This may work, |
| 126 | but may not be convenient when you want them <i>first</i> in your |
| 127 | path for other work. |
| 128 | <p> |
| 129 | |
| 130 | <li>Run <tt>configure</tt> with an alternative <tt>PATH</tt> that |
| 131 | is correct. In a Borne compatible shell, the syntax would be: |
| 132 | <p> |
| 133 | <tt>PATH=<the path without the bad program> ./configure ...</tt> |
| 134 | <p> |
| 135 | This is still somewhat inconvenient, but it allows |
| 136 | <tt>configure</tt> to do its work without having to adjust your |
| 137 | <tt>PATH</tt> permanently. |
| 138 | </ol> |
| 139 | |
| 140 | <dt><b>When creating a dynamic library, I get a strange GLIBC error.</b> |
| 141 | <dd> |
| 142 | Under some operating systems (i.e. Linux), libtool does not work correctly |
| 143 | if GCC was compiled with the --disable-shared option. To work around this, |
| 144 | install your own version of GCC that has shared libraries enabled by |
| 145 | default. |
| 146 | <p> |
| 147 | |
| 148 | <dt><b>I've updated my source tree from CVS, and now my build is trying to |
| 149 | use a file/directory that doesn't exist.</b> |
| 150 | <dd> |
| 151 | You need to re-run configure in your object directory. When new Makefiles |
| 152 | are added to the source tree, they have to be copied over to the object |
| 153 | tree in order to be used by the build. |
| 154 | <p> |
| 155 | |
| 156 | <dt><b>I've modified a Makefile in my source tree, but my build tree keeps |
| 157 | using the old version. What do I do?</b> |
| 158 | <dd> |
| 159 | If the Makefile already exists in your object tree, you can just run the |
| 160 | following command in the top level directory of your object tree: |
| 161 | <p> |
| 162 | <tt>./config.status <relative path to Makefile></tt> |
| 163 | <p> |
| 164 | If the Makefile is new, you will have to modify the configure script to copy |
| 165 | it over. |
| 166 | <p> |
| 167 | |
| 168 | <dt><b>I've upgraded to a new version of LLVM, and I get strange build |
| 169 | errors.</b> |
| 170 | <dd> |
| 171 | Sometimes changes to the LLVM source code alters how the build system |
| 172 | works. Changes in libtool, autoconf, or header file dependencies are |
| 173 | especially prone to this sort of problem. |
| 174 | <p> |
| 175 | The best thing to try is to remove the old files and re-build. In most |
| 176 | cases, this takes care of the problem. To do this, just type <tt>make |
| 177 | clean</tt> and then <tt>make</tt> in the directory that fails to build. |
| 178 | <p> |
John Criswell | f08c5d8 | 2003-10-24 22:48:20 +0000 | [diff] [blame] | 179 | |
| 180 | <dt><b>I've built LLVM and am testing it, but the tests freeze.</b> |
| 181 | <dd> |
| 182 | This is most likely occurring because you built a profile or release |
| 183 | (optimized) build of LLVM and have not specified the same information on |
| 184 | the <tt>gmake</tt> command line. |
| 185 | <p> |
| 186 | For example, if you built LLVM with the command: |
| 187 | <p> |
| 188 | <tt>gmake ENABLE_PROFILING=1</tt> |
| 189 | <p> |
| 190 | ...then you must run the tests with the following commands: |
| 191 | <p> |
| 192 | <tt>cd llvm/test<br>gmake ENABLE_PROFILING=1</tt> |
| 193 | <p> |
| 194 | |
| 195 | <dt><b>Why do test results differ when I perform different types of |
| 196 | builds?</b> |
| 197 | <dd> |
| 198 | The LLVM test suite is dependent upon several features of the LLVM tools |
| 199 | and libraries. |
| 200 | <p> |
| 201 | First, the debugging assertions in code are not enabled in optimized or |
| 202 | profiling builds. Hence, tests that used to fail may pass. |
| 203 | <p> |
| 204 | Second, some tests may rely upon debugging options or behavior that is |
| 205 | only available in the debug build. These tests will fail in an optimized |
| 206 | or profile build. |
John Criswell | c310f62 | 2003-10-13 16:13:06 +0000 | [diff] [blame] | 207 | </dl> |
| 208 | <hr> |
| 209 | |
John Criswell | f08c5d8 | 2003-10-24 22:48:20 +0000 | [diff] [blame] | 210 | <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a> |
| 211 | <br> |
| 212 | |
John Criswell | c310f62 | 2003-10-13 16:13:06 +0000 | [diff] [blame] | 213 | </body> |
| 214 | </html> |