Oscar Fuentes | 1bbdd46 | 2008-11-14 22:06:14 +0000 | [diff] [blame] | 1 | include(LLVMProcessSources) |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 2 | |
| 3 | function(get_system_libs return_var) |
| 4 | # Returns in `return_var' a list of system libraries used by LLVM. |
| 5 | if( NOT MSVC ) |
| 6 | if( MINGW ) |
| 7 | set(system_libs ${system_libs} imagehlp psapi) |
| 8 | elseif( CMAKE_HOST_UNIX ) |
| 9 | if( HAVE_LIBDL ) |
| 10 | set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) |
| 11 | endif() |
| 12 | if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD ) |
| 13 | set(system_libs ${system_libs} pthread) |
| 14 | endif() |
| 15 | endif( MINGW ) |
| 16 | endif( NOT MSVC ) |
| 17 | set(${return_var} ${system_libs} PARENT_SCOPE) |
| 18 | endfunction(get_system_libs) |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 19 | |
| 20 | macro(add_llvm_library name) |
Oscar Fuentes | 50925fb | 2008-11-15 02:08:08 +0000 | [diff] [blame] | 21 | llvm_process_sources( ALL_FILES ${ARGN} ) |
| 22 | add_library( ${name} ${ALL_FILES} ) |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 23 | set( llvm_libs ${llvm_libs} ${name} PARENT_SCOPE) |
Oscar Fuentes | 1d8e4cf | 2008-09-22 18:21:51 +0000 | [diff] [blame] | 24 | set( llvm_lib_targets ${llvm_lib_targets} ${name} PARENT_SCOPE ) |
| 25 | if( LLVM_COMMON_DEPENDS ) |
| 26 | add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) |
| 27 | endif( LLVM_COMMON_DEPENDS ) |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 28 | if (LLVM_COMMON_LIBS) |
| 29 | target_link_libraries(${name} ${LLVM_COMMON_LIBS}) |
| 30 | endif() |
Oscar Fuentes | 1dc9716 | 2008-10-22 02:56:07 +0000 | [diff] [blame] | 31 | install(TARGETS ${name} |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 32 | EXPORT LLVM |
Oscar Fuentes | af0f65f | 2009-06-12 02:49:53 +0000 | [diff] [blame] | 33 | LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} |
| 34 | ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) |
Oscar Fuentes | b78829e | 2009-08-16 05:16:43 +0000 | [diff] [blame] | 35 | # The LLVM Target library shall be built before its sublibraries |
| 36 | # (asmprinter, etc) because those may use tablegenned files which |
| 37 | # generation is triggered by the main LLVM target library. Necessary |
| 38 | # for parallel builds: |
| 39 | if( CURRENT_LLVM_TARGET ) |
Benjamin Kramer | 0bbbf7e | 2009-08-16 09:44:27 +0000 | [diff] [blame] | 40 | add_dependencies(${name} ${CURRENT_LLVM_TARGET}) |
Oscar Fuentes | b78829e | 2009-08-16 05:16:43 +0000 | [diff] [blame] | 41 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 42 | endmacro(add_llvm_library name) |
| 43 | |
| 44 | |
Oscar Fuentes | c5e1ae1 | 2009-11-10 02:45:37 +0000 | [diff] [blame] | 45 | macro(add_llvm_loadable_module name) |
| 46 | if( NOT LLVM_ON_UNIX ) |
| 47 | message(STATUS "Loadable modules not supported on this platform. |
| 48 | ${name} ignored.") |
| 49 | else() |
Oscar Fuentes | c5e1ae1 | 2009-11-10 02:45:37 +0000 | [diff] [blame] | 50 | llvm_process_sources( ALL_FILES ${ARGN} ) |
| 51 | add_library( ${name} MODULE ${ALL_FILES} ) |
| 52 | set_target_properties( ${name} PROPERTIES PREFIX "" ) |
Douglas Gregor | 8781416 | 2009-11-10 15:30:33 +0000 | [diff] [blame] | 53 | |
| 54 | if (APPLE) |
| 55 | # Darwin-specific linker flags for loadable modules. |
| 56 | set_target_properties(${name} PROPERTIES |
| 57 | LINK_FLAGS "-Wl,-flat_namespace -Wl,-undefined -Wl,suppress") |
| 58 | endif() |
| 59 | |
Oscar Fuentes | c5e1ae1 | 2009-11-10 02:45:37 +0000 | [diff] [blame] | 60 | install(TARGETS ${name} |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 61 | EXPORT LLVM |
Oscar Fuentes | c5e1ae1 | 2009-11-10 02:45:37 +0000 | [diff] [blame] | 62 | LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} |
| 63 | ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) |
| 64 | endif() |
| 65 | endmacro(add_llvm_loadable_module name) |
| 66 | |
| 67 | |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 68 | macro(add_llvm_executable name) |
Oscar Fuentes | 50925fb | 2008-11-15 02:08:08 +0000 | [diff] [blame] | 69 | llvm_process_sources( ALL_FILES ${ARGN} ) |
Oscar Fuentes | b8352de | 2009-11-23 00:21:43 +0000 | [diff] [blame] | 70 | if( EXCLUDE_FROM_ALL ) |
| 71 | add_executable(${name} EXCLUDE_FROM_ALL ${ALL_FILES}) |
| 72 | else() |
| 73 | add_executable(${name} ${ALL_FILES}) |
| 74 | endif() |
| 75 | set(EXCLUDE_FROM_ALL OFF) |
Oscar Fuentes | bcc1db5 | 2008-10-26 00:51:05 +0000 | [diff] [blame] | 76 | if( LLVM_USED_LIBS ) |
| 77 | foreach(lib ${LLVM_USED_LIBS}) |
| 78 | target_link_libraries( ${name} ${lib} ) |
| 79 | endforeach(lib) |
| 80 | endif( LLVM_USED_LIBS ) |
Oscar Fuentes | 1a53cbf | 2009-05-27 15:49:33 +0000 | [diff] [blame] | 81 | get_system_libs(llvm_system_libs) |
| 82 | if( llvm_system_libs ) |
| 83 | target_link_libraries(${name} ${llvm_system_libs}) |
| 84 | endif() |
Oscar Fuentes | d8b1b9a | 2009-08-14 04:38:57 +0000 | [diff] [blame] | 85 | if( LLVM_COMMON_DEPENDS ) |
| 86 | add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) |
| 87 | endif( LLVM_COMMON_DEPENDS ) |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 88 | if (LLVM_COMMON_LIBS) |
| 89 | target_link_libraries(${name} ${LLVM_COMMON_LIBS}) |
| 90 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 91 | endmacro(add_llvm_executable name) |
| 92 | |
| 93 | |
| 94 | macro(add_llvm_tool name) |
| 95 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR}) |
Oscar Fuentes | 7be498e | 2009-11-23 00:32:42 +0000 | [diff] [blame] | 96 | if( NOT LLVM_BUILD_TOOLS ) |
Oscar Fuentes | b8352de | 2009-11-23 00:21:43 +0000 | [diff] [blame] | 97 | set(EXCLUDE_FROM_ALL ON) |
| 98 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 99 | add_llvm_executable(${name} ${ARGN}) |
Oscar Fuentes | 7be498e | 2009-11-23 00:32:42 +0000 | [diff] [blame] | 100 | if( LLVM_BUILD_TOOLS ) |
| 101 | install(TARGETS ${name} RUNTIME DESTINATION bin) |
| 102 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 103 | endmacro(add_llvm_tool name) |
| 104 | |
| 105 | |
| 106 | macro(add_llvm_example name) |
| 107 | # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_EXAMPLES_BINARY_DIR}) |
Oscar Fuentes | 7be498e | 2009-11-23 00:32:42 +0000 | [diff] [blame] | 108 | if( NOT LLVM_BUILD_EXAMPLES ) |
Oscar Fuentes | b8352de | 2009-11-23 00:21:43 +0000 | [diff] [blame] | 109 | set(EXCLUDE_FROM_ALL ON) |
| 110 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 111 | add_llvm_executable(${name} ${ARGN}) |
Oscar Fuentes | 7be498e | 2009-11-23 00:32:42 +0000 | [diff] [blame] | 112 | if( LLVM_BUILD_EXAMPLES ) |
| 113 | install(TARGETS ${name} RUNTIME DESTINATION examples) |
| 114 | endif() |
Oscar Fuentes | 3d01fc7 | 2008-09-22 01:08:49 +0000 | [diff] [blame] | 115 | endmacro(add_llvm_example name) |
Oscar Fuentes | e1ad087 | 2008-09-26 04:40:32 +0000 | [diff] [blame] | 116 | |
| 117 | |
| 118 | macro(add_llvm_target target_name) |
| 119 | if( TABLEGEN_OUTPUT ) |
| 120 | add_custom_target(${target_name}Table_gen |
| 121 | DEPENDS ${TABLEGEN_OUTPUT}) |
| 122 | add_dependencies(${target_name}Table_gen ${LLVM_COMMON_DEPENDS}) |
| 123 | endif( TABLEGEN_OUTPUT ) |
| 124 | include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) |
Douglas Gregor | 7e9e36a | 2009-06-23 17:57:35 +0000 | [diff] [blame] | 125 | add_llvm_library(LLVM${target_name} ${ARGN} ${TABLEGEN_OUTPUT}) |
Douglas Gregor | 343beeb | 2009-06-23 21:05:21 +0000 | [diff] [blame] | 126 | if ( TABLEGEN_OUTPUT ) |
| 127 | add_dependencies(LLVM${target_name} ${target_name}Table_gen) |
| 128 | endif (TABLEGEN_OUTPUT) |
Oscar Fuentes | 69e973d | 2009-08-16 07:44:02 +0000 | [diff] [blame] | 129 | set(CURRENT_LLVM_TARGET LLVM${target_name} PARENT_SCOPE) |
Oscar Fuentes | e1ad087 | 2008-09-26 04:40:32 +0000 | [diff] [blame] | 130 | endmacro(add_llvm_target) |
Michael J. Spencer | 4e9c939 | 2010-09-10 21:14:25 +0000 | [diff] [blame^] | 131 | |
| 132 | macro(llvm_get_target_libraries return_var) |
| 133 | set( link_components ${ARGN} ) |
| 134 | foreach(c ${link_components}) |
| 135 | # add codegen, asmprinter, asmparser, disassembler |
| 136 | list(FIND LLVM_TARGETS_TO_BUILD ${c} idx) |
| 137 | if( NOT idx LESS 0 ) |
| 138 | list(FIND llvm_libs "LLVM${c}CodeGen" idx) |
| 139 | if( NOT idx LESS 0 ) |
| 140 | list(APPEND expanded_components "LLVM${c}CodeGen") |
| 141 | else() |
| 142 | list(FIND llvm_libs "LLVM${c}" idx) |
| 143 | if( NOT idx LESS 0 ) |
| 144 | list(APPEND expanded_components "LLVM${c}") |
| 145 | else() |
| 146 | message(FATAL_ERROR "Target ${c} is not in the set of libraries.") |
| 147 | endif() |
| 148 | endif() |
| 149 | list(FIND llvm_libs "LLVM${c}AsmPrinter" asmidx) |
| 150 | if( NOT asmidx LESS 0 ) |
| 151 | list(APPEND expanded_components "LLVM${c}AsmPrinter") |
| 152 | endif() |
| 153 | list(FIND llvm_libs "LLVM${c}AsmParser" asmidx) |
| 154 | if( NOT asmidx LESS 0 ) |
| 155 | list(APPEND expanded_components "LLVM${c}AsmParser") |
| 156 | endif() |
| 157 | list(FIND llvm_libs "LLVM${c}Info" asmidx) |
| 158 | if( NOT asmidx LESS 0 ) |
| 159 | list(APPEND expanded_components "LLVM${c}Info") |
| 160 | endif() |
| 161 | list(FIND llvm_libs "LLVM${c}Disassembler" asmidx) |
| 162 | if( NOT asmidx LESS 0 ) |
| 163 | list(APPEND expanded_components "LLVM${c}Disassembler") |
| 164 | endif() |
| 165 | elseif( c STREQUAL "native" ) |
| 166 | list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen") |
| 167 | elseif( c STREQUAL "nativecodegen" ) |
| 168 | list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen") |
| 169 | elseif( c STREQUAL "backend" ) |
| 170 | # same case as in `native'. |
| 171 | elseif( c STREQUAL "engine" OR c STREQUAL "jit") |
| 172 | # TODO: as we assume we are on X86, this is `jit'. |
| 173 | list(APPEND expanded_components "LLVMJIT") |
| 174 | elseif( c STREQUAL "interpreter" ) |
| 175 | list(APPEND expanded_components "LLVMInterpreter") |
| 176 | elseif( c STREQUAL "all" ) |
| 177 | list(APPEND expanded_components ${llvm_libs}) |
| 178 | else( NOT idx LESS 0 ) |
| 179 | list(APPEND expanded_components LLVM${c}) |
| 180 | endif( NOT idx LESS 0 ) |
| 181 | endforeach(c) |
| 182 | set(${return_var} ${expanded_components}) |
| 183 | endmacro(llvm_get_target_libraries) |
| 184 | |
| 185 | macro(add_llvm_link_components target_name) |
| 186 | llvm_get_target_libraries(target_libs ${ARGN}) |
| 187 | target_link_libraries(${target_name} ${target_libs}) |
| 188 | endmacro() |