Commit Graph

54 Commits

Author SHA1 Message Date
Chandler Carruth
c58247da70 Remove yet another buried and hidden implicit dependency: every single
sub-library for the targets depended on the core target CodeGen library.
This completely undermined the careful work to separate the those
libraries, especially the MC-layer ones. This surfaced as circular
dependencies when the libraries were built as shared libraries where
CMake doesn't allow cycles.

This should fix PR10537. I'll watch the bots to see if there is fallout
on other platforms.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136565 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-30 08:47:05 +00:00
Chandler Carruth
2e1513d9cd Make my attempt to build up global deps variables actually utilize
globally scoped constructs. Also, round-trip these dependencies through
the LLVMConfig.cmake.in file thata is used by CMake-based clients of
"installed" (or built) LLVM trees.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136543 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-29 23:52:01 +00:00
Chandler Carruth
ac03e736c7 Rewrite the CMake build to use explicit dependencies between libraries,
specified in the same file that the library itself is created. This is
more idiomatic for CMake builds, and also allows us to correctly specify
dependencies that are missed due to bugs in the GenLibDeps perl script,
or change from compiler to compiler. On Linux, this returns CMake to
a place where it can relably rebuild several targets of LLVM.

I have tried not to change the dependencies from the ones in the current
auto-generated file. The only places I've really diverged are in places
where I was seeing link failures, and added a dependency. The goal of
this patch is not to start changing the dependencies, merely to move
them into the correct location, and an explicit form that we can control
and change when necessary.

This also removes a serialization point in the build because we don't
have to scan all the libraries before we begin building various tools.
We no longer have a step of the build that regenerates a file inside the
source tree. A few other associated cleanups fall out of this.

This isn't really finished yet though. After talking to dgregor he urged
switching to a single CMake macro to construct libraries with both
sources and dependencies in the arguments. Migrating from the two macros
to that style will be a follow-up patch.

Also, llvm-config is still generated with GenLibDeps.pl, which means it
still has slightly buggy dependencies. The internal CMake
'llvm-config-like' macro uses the correct explicitly specified
dependencies however. A future patch will switch llvm-config generation
(when using CMake) to be based on these deps as well.

This may well break Windows. I'm getting a machine set up now to dig
into any failures there. If anyone can chime in with problems they see
or ideas of how to solve them for Windows, much appreciated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136433 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-29 00:14:25 +00:00
Chandler Carruth
b35552d440 Clean up a pile of hacks in our CMake build relating to TableGen.
The first problem to fix is to stop creating synthetic *Table_gen
targets next to all of the LLVM libraries. These had no real effect as
CMake specifies that add_custom_command(OUTPUT ...) directives (what the
'tablegen(...)' stuff expands to) are implicitly added as dependencies
to all the rules in that CMakeLists.txt.

These synthetic rules started to cause problems as we started more and
more heavily using tablegen files from *subdirectories* of the one where
they were generated. Within those directories, the set of tablegen
outputs was still available and so these synthetic rules added them as
dependencies of those subdirectories. However, they were no longer
properly associated with the custom command to generate them. Most of
the time this "just worked" because something would get to the parent
directory first, and run tablegen there. Once run, the files existed and
the build proceeded happily. However, as more and more subdirectories
have started using this, the probability of this failing to happen has
increased. Recently with the MC refactorings, it became quite common for
me when touching a large enough number of targets.

To add insult to injury, several of the backends *tried* to fix this by
adding explicit dependencies back to the parent directory's tablegen
rules, but those dependencies didn't work as expected -- they weren't
forming a linear chain, they were adding another thread in the race.

This patch removes these synthetic rules completely, and adds a much
simpler function to declare explicitly that a collection of tablegen'ed
files are referenced by other libraries. From that, we can add explicit
dependencies from the smaller libraries (such as every architectures
Desc library) on this and correctly form a linear sequence. All of the
backends are updated to use it, sometimes replacing the existing attempt
at adding a dependency, sometimes adding a previously missing dependency
edge.

Please let me know if this causes any problems, but it fixes a rather
persistent and problematic source of build flakiness on our end.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136023 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-26 00:09:08 +00:00
Oscar Fuentes
d7808d23ad While building a LLVM target, put the current source directory on the
header search path.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135952 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-25 20:17:01 +00:00
Oscar Fuentes
ddfb69cd47 CMake: generalize the system that creates custom targets for
tablegenning to all libraries and executables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135908 91177308-0d34-0410-b5e6-96231b3b80d8
2011-07-25 14:11:55 +00:00
Nick Lewycky
bcffb1fbb8 Rename profile_rt.so to libprofile_rt.so under configure+make (it already was
under cmake).

Add libprofile_rt.a so that we can tell clang to link against it in --coverage
mode. Also turn it on by default in cmake builds.

Oscar, this touches a change you made for EXCLUDE_FROM_ALL support -- I think
I've done the right thing, but please let me know (or fix and commit) if not!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130470 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-29 02:12:06 +00:00
Oscar Fuentes
ab92d1e1c2 Honor LLVM_BUILD_RUNTIME.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130199 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-26 14:55:27 +00:00
Oscar Fuentes
e7510c2e96 Rename LLVMConfig.cmake to LLVM-Config.cmake. The *Config.cmake naming
scheme is used by the functionality related to find_package.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128889 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-05 17:02:48 +00:00
Oscar Fuentes
23f0bfeda9 Fixed the build of Clang's unit tests on MinGW. Also removed some
unnecesary conditionals and introduced a new convenience function.

The problem was that the list of libraries for Clang's unit tests was
<clang libraries> <system libraries> <llvm libraries>. As the llvm
libraries references symbols defined on the system libraries, those
were reported as undefined.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128484 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-29 20:51:08 +00:00
Oscar Fuentes
89234e1e28 Removed workaround for unspecified build problem on MinGW.
Tested that MinGW/MSYS builds fine without that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128033 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-21 22:53:51 +00:00
Oscar Fuentes
879d3a98a2 Whe we build a shared library, add its list of used libraries to the
link command.

Fixed a pair of IF expressions too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127546 91177308-0d34-0410-b5e6-96231b3b80d8
2011-03-12 16:48:54 +00:00
Oscar Fuentes
50b284666f CMake: remove unnecessary variable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126224 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-22 15:40:20 +00:00
Oscar Fuentes
0b85d07d46 Put targets on folders, if the IDE supports the feature.
Requires CMake 2.8.3 or newer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126092 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-20 22:06:10 +00:00
Oscar Fuentes
00d78f1348 Use explicit add_subdirectory's for LLVM target sublibraries instead
of testing for its presence at cmake time.

This way the build automatically regenerates the makefiles when a svn
update brings in a new sublibrary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126068 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-20 02:55:27 +00:00
Oscar Fuentes
6d857ca4d7 Move library stuff out of the toplevel CMakeLists.txt file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125968 91177308-0d34-0410-b5e6-96231b3b80d8
2011-02-18 22:06:14 +00:00
Oscar Fuentes
711042839c Fixes file extension for loadable modules on OS X.
Patch by Wesley Peck!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122395 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-22 08:30:17 +00:00
NAKAMURA Takumi
51c06bf6ad Add dependency to "make check".
cmake/modules/AddLLVM.cmake: Add empty "phony" target in add_llvm_loadable_module() even if loadable module were not supported.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121455 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-10 02:15:36 +00:00
Oscar Fuentes
01a575e2fc Loadable modules are not supported on Cygwin. PR 6655.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117130 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-22 19:03:24 +00:00
Oscar Fuentes
00a9618458 When building shared libraries, link to required system libraries.
PR 8375

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116479 91177308-0d34-0410-b5e6-96231b3b80d8
2010-10-14 15:54:41 +00:00
Oscar Fuentes
066de857f8 Reverting "CMake: Don't include tools, unittets, or examples as
available targets unless LLVM_INCLUDE_X is ON. LLVM_BUILD_X implies
LLVM_INCLUDE_X"

It breaks the configuration phase when cmake is invoked without
parameters, it is too complex for the purpose and introduces an
incovenience for the user (as both LLVM_BUILD_X and LLVM_INCLUDE_X
must set to OFF for not including X on the build)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114795 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-25 20:25:25 +00:00
Michael J. Spencer
4b794c9a99 CMake: Don't include tools, unittets, or examples as available targets
unless LLVM_INCLUDE_X is ON. LLVM_BUILD_X implies LLVM_INCLUDE_X

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114747 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-24 19:10:51 +00:00
Michael J. Spencer
3a210e2d30 Revert "CMake: Get rid of LLVMLibDeps.cmake and export the libraries normally."
This reverts commit r113632

Conflicts:

	cmake/modules/AddLLVM.cmake

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113819 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-13 23:59:48 +00:00
Michael J. Spencer
1c4e934666 CMake: Fix mingw32 build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113676 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-11 02:13:39 +00:00
Michael J. Spencer
4e9c939312 CMake: Get rid of LLVMLibDeps.cmake and export the libraries normally.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113632 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-10 21:14:25 +00:00
Oscar Fuentes
7be498e6e2 CMake: Do not try to install a target before it is defined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89636 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-23 00:32:42 +00:00
Oscar Fuentes
b8352de551 CMake: generate targets for tools and examples even when
LLVM_BUILD_TOOLS or LLVM_BUILD_EXAMPLES are OFF.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89635 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-23 00:21:43 +00:00
Douglas Gregor
8781416858 CMake: Add Darwin-specific linker flags for building loadable modules
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86684 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10 15:30:33 +00:00
Oscar Fuentes
c5e1ae1313 CMake: Support for building llvm loadable modules.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86656 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10 02:45:37 +00:00
Benjamin Kramer
0bbbf7ecae Fix the MSVC build again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79186 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-16 09:44:27 +00:00
Oscar Fuentes
69e973d79b CMake: Hopefully this will fix the build on VS. I can't replicate the
failure with VS 9.0, nmake and cmake 2.6.4. The buildbot output does
not show the patch level of cmake, it just says 2.6.

Sadly, parallel builds are broken due to recent changes on LLVM Target
libraries and its auxiliaries (TargetInfo, AsmPrinter, AsmParser). I
have a patch for stablishing the correct dependencies, but cmake is
buggy and generates makefiles that can't handle them.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79180 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-16 07:44:02 +00:00
Oscar Fuentes
b78829ee38 CMake: Revert r79144. It reverted a change necessary for correct
parallel builds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79177 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-16 05:16:43 +00:00
Benjamin Kramer
04ef5428cd Revert 78996. It was breaking MSVC builds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79144 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-15 21:57:01 +00:00
Oscar Fuentes
3d3ed36572 CMake: Builds main LLVM Target library before its sublibraries. This
way we ensure that tablegenned files exist before they are #include'd
by the LLVM Target sublibraries. Required for parallel builds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78996 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-14 05:17:24 +00:00
Oscar Fuentes
d8b1b9a3c1 CMake: Use LLVM_COMMON_DEPENDS on add_llvm_executable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78990 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-14 04:38:57 +00:00
Oscar Fuentes
8e3864f99c CMake: Rely on llvm_config again for obtaining the list of required
libraries for an executable.

Now LLVMConfig uses a new system for sorting library dependencies, as
the list of dependent libraries for each entry of FinalLibDeps.txt no
longer is topologically sorted.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78787 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-12 04:05:26 +00:00
Douglas Gregor
343beeb386 Reinstate target dependencies on Table_gen targets in CMake
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74003 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-23 21:05:21 +00:00
Douglas Gregor
8756a8db5b CMake: remove support for llvm-config-generated dependencies in the build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73979 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-23 18:30:17 +00:00
Douglas Gregor
bb3231f7c4 Eliminate some unused code in CMa'e add_llvm_target. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73970 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-23 17:58:51 +00:00
Douglas Gregor
7e9e36a23e Eliminate object-relinking support from CMake. Fixes PR 4429 and
cleans up the CMake-based build system a bit. Started by a patch from
Xerxes Rånby.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73969 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-23 17:57:35 +00:00
Oscar Fuentes
af0f65fe6a CMake: New variable LLVM_LIBDIR_SUFFIX.
Patch by Ingmar Vanhassel!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73216 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-12 02:49:53 +00:00
Douglas Gregor
8eeb96d2d5 CMake: Use explicit dependencies for Xcode (as well as MSVC), to make
the CMake-generated Xcode project build properly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72883 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-04 19:53:37 +00:00
Oscar Fuentes
1a53cbfb4a CMake: Set LIBS on llvm-config so we can query the system libraries
used by CMake with --ldflags.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72470 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-27 15:49:33 +00:00
Oscar Fuentes
db917fe8aa CMake: Use libdl only when available. Fixes build on FreeBSD.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72311 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-23 02:37:24 +00:00
Oscar Fuentes
69b20fd6f9 CMake: Use pthread library when requested and available.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71116 91177308-0d34-0410-b5e6-96231b3b80d8
2009-05-06 20:42:04 +00:00
Eli Friedman
56e6d644d0 Fix a link issue I ran into trying compiling LLVM on MinGW with CMake.
Hopefully this doesn't break anyone else's build... it shouldn't unless 
the MinGW variable means something other than compiling with MinGW.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60273 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-30 02:42:05 +00:00
Oscar Fuentes
50925fbed4 CMake: Adds header and TableGen files to Visual Studio solution. A new
dummy library, `llvm_headers_do_not_build', is created for containing
all header and TableGen files under include/llvm.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59346 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-15 02:08:08 +00:00
Oscar Fuentes
1bbdd4645b CMake: Fixed dependencies of .cpp source files on .td and tablegenned
files.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59325 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-14 22:06:14 +00:00
Oscar Fuentes
578f6cf6d0 CMake: Removed unnecessary library path setting that was breaking the
build on OS X.

Fix by Jjgod Jiang!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59048 91177308-0d34-0410-b5e6-96231b3b80d8
2008-11-11 16:56:52 +00:00
Oscar Fuentes
bcc1db5f0a CMake: Support for LLVM_USED_LIBS variable, which is the cmake
counterpart of USED_LIBS.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58178 91177308-0d34-0410-b5e6-96231b3b80d8
2008-10-26 00:51:05 +00:00