X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=cmake%2Fmodules%2FAddLLVM.cmake;h=6087094e8351bedca22087ca407141894d3acea6;hb=912225e18559a73228099330a4c253fdccf9fa3d;hp=52864d2e95d97f24193078879eb9aaea0b9af37d;hpb=1c4e934666b3fa672a3dd8f933671da4b95447db;p=oota-llvm.git diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 52864d2e95d..6087094e835 100755 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -1,35 +1,23 @@ include(LLVMProcessSources) - -function(get_system_libs return_var) - # Returns in `return_var' a list of system libraries used by LLVM. - if( NOT MSVC ) - if( MINGW ) - set(system_libs ${system_libs} imagehlp psapi) - elseif( CMAKE_HOST_UNIX ) - if( HAVE_LIBDL ) - set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) - endif() - if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD ) - set(system_libs ${system_libs} pthread) - endif() - endif( MINGW ) - endif( NOT MSVC ) - set(${return_var} ${system_libs} PARENT_SCOPE) -endfunction(get_system_libs) +include(LLVM-Config) macro(add_llvm_library name) llvm_process_sources( ALL_FILES ${ARGN} ) add_library( ${name} ${ALL_FILES} ) - set( llvm_libs ${llvm_libs} ${name} PARENT_SCOPE) - set( llvm_lib_targets ${llvm_lib_targets} ${name} PARENT_SCOPE ) + set_property( GLOBAL APPEND PROPERTY LLVM_LIBS ${name} ) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) endif( LLVM_COMMON_DEPENDS ) - if (LLVM_COMMON_LIBS) - target_link_libraries(${name} ${LLVM_COMMON_LIBS}) + + if( BUILD_SHARED_LIBS ) + llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) endif() + + # Ensure that the system libraries always comes last on the + # list. Without this, linking the unit tests on MinGW fails. + link_system_libs( ${name} ) + install(TARGETS ${name} - EXPORT LLVM LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) # The LLVM Target library shall be built before its sublibraries @@ -39,18 +27,30 @@ macro(add_llvm_library name) if( CURRENT_LLVM_TARGET ) add_dependencies(${name} ${CURRENT_LLVM_TARGET}) endif() + set_target_properties(${name} PROPERTIES FOLDER "Libraries") endmacro(add_llvm_library name) macro(add_llvm_loadable_module name) - if( NOT LLVM_ON_UNIX ) + if( NOT LLVM_ON_UNIX OR CYGWIN ) message(STATUS "Loadable modules not supported on this platform. ${name} ignored.") + # Add empty "phony" target + add_custom_target(${name}) else() llvm_process_sources( ALL_FILES ${ARGN} ) - add_library( ${name} MODULE ${ALL_FILES} ) + if (MODULE) + set(libkind MODULE) + else() + set(libkind SHARED) + endif() + + add_library( ${name} ${libkind} ${ALL_FILES} ) set_target_properties( ${name} PROPERTIES PREFIX "" ) + llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) + link_system_libs( ${name} ) + if (APPLE) # Darwin-specific linker flags for loadable modules. set_target_properties(${name} PROPERTIES @@ -58,10 +58,11 @@ ${name} ignored.") endif() install(TARGETS ${name} - EXPORT LLVM LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) endif() + + set_target_properties(${name} PROPERTIES FOLDER "Loadable modules") endmacro(add_llvm_loadable_module name) @@ -73,23 +74,12 @@ macro(add_llvm_executable name) add_executable(${name} ${ALL_FILES}) endif() set(EXCLUDE_FROM_ALL OFF) - if( LLVM_USED_LIBS ) - foreach(lib ${LLVM_USED_LIBS}) - target_link_libraries( ${name} ${lib} ) - endforeach(lib) - endif( LLVM_USED_LIBS ) + target_link_libraries( ${name} ${LLVM_USED_LIBS} ) + llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) if( LLVM_COMMON_DEPENDS ) add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) endif( LLVM_COMMON_DEPENDS ) - if (LLVM_COMMON_LIBS) - target_link_libraries(${name} ${LLVM_COMMON_LIBS}) - endif() - if( NOT MINGW ) - get_system_libs(llvm_system_libs) - if( llvm_system_libs ) - target_link_libraries(${name} ${llvm_system_libs}) - endif() - endif() + link_system_libs( ${name} ) endmacro(add_llvm_executable name) @@ -102,6 +92,7 @@ macro(add_llvm_tool name) if( LLVM_BUILD_TOOLS ) install(TARGETS ${name} RUNTIME DESTINATION bin) endif() + set_target_properties(${name} PROPERTIES FOLDER "Tools") endmacro(add_llvm_tool name) @@ -114,9 +105,16 @@ macro(add_llvm_example name) if( LLVM_BUILD_EXAMPLES ) install(TARGETS ${name} RUNTIME DESTINATION examples) endif() + set_target_properties(${name} PROPERTIES FOLDER "Examples") endmacro(add_llvm_example name) +macro(add_llvm_utility name) + add_llvm_executable(${name} ${ARGN}) + set_target_properties(${name} PROPERTIES FOLDER "Utils") +endmacro(add_llvm_utility name) + + macro(add_llvm_target target_name) if( TABLEGEN_OUTPUT ) add_custom_target(${target_name}Table_gen @@ -127,64 +125,7 @@ macro(add_llvm_target target_name) add_llvm_library(LLVM${target_name} ${ARGN} ${TABLEGEN_OUTPUT}) if ( TABLEGEN_OUTPUT ) add_dependencies(LLVM${target_name} ${target_name}Table_gen) + set_target_properties(${target_name}Table_gen PROPERTIES FOLDER "Tablegenning") endif (TABLEGEN_OUTPUT) - set(CURRENT_LLVM_TARGET LLVM${target_name} PARENT_SCOPE) + set( CURRENT_LLVM_TARGET LLVM${target_name} ) endmacro(add_llvm_target) - -macro(llvm_get_target_libraries return_var) - set( link_components ${ARGN} ) - foreach(c ${link_components}) - # add codegen, asmprinter, asmparser, disassembler - list(FIND LLVM_TARGETS_TO_BUILD ${c} idx) - if( NOT idx LESS 0 ) - list(FIND llvm_libs "LLVM${c}CodeGen" idx) - if( NOT idx LESS 0 ) - list(APPEND expanded_components "LLVM${c}CodeGen") - else() - list(FIND llvm_libs "LLVM${c}" idx) - if( NOT idx LESS 0 ) - list(APPEND expanded_components "LLVM${c}") - else() - message(FATAL_ERROR "Target ${c} is not in the set of libraries.") - endif() - endif() - list(FIND llvm_libs "LLVM${c}AsmPrinter" asmidx) - if( NOT asmidx LESS 0 ) - list(APPEND expanded_components "LLVM${c}AsmPrinter") - endif() - list(FIND llvm_libs "LLVM${c}AsmParser" asmidx) - if( NOT asmidx LESS 0 ) - list(APPEND expanded_components "LLVM${c}AsmParser") - endif() - list(FIND llvm_libs "LLVM${c}Info" asmidx) - if( NOT asmidx LESS 0 ) - list(APPEND expanded_components "LLVM${c}Info") - endif() - list(FIND llvm_libs "LLVM${c}Disassembler" asmidx) - if( NOT asmidx LESS 0 ) - list(APPEND expanded_components "LLVM${c}Disassembler") - endif() - elseif( c STREQUAL "native" ) - list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen") - elseif( c STREQUAL "nativecodegen" ) - list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen") - elseif( c STREQUAL "backend" ) - # same case as in `native'. - elseif( c STREQUAL "engine" OR c STREQUAL "jit") - # TODO: as we assume we are on X86, this is `jit'. - list(APPEND expanded_components "LLVMJIT") - elseif( c STREQUAL "interpreter" ) - list(APPEND expanded_components "LLVMInterpreter") - elseif( c STREQUAL "all" ) - list(APPEND expanded_components ${llvm_libs}) - else( NOT idx LESS 0 ) - list(APPEND expanded_components LLVM${c}) - endif( NOT idx LESS 0 ) - endforeach(c) - set(${return_var} ${expanded_components}) -endmacro(llvm_get_target_libraries) - -macro(add_llvm_link_components target_name) - llvm_get_target_libraries(target_libs ${ARGN}) - target_link_libraries(${target_name} ${target_libs}) -endmacro()