X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=cmake%2Fmodules%2FAddLLVM.cmake;h=bf2a482df35ea1679a3fab87c0967be371902447;hb=a147660147bb4f60cdf7a05218b212196ecc278e;hp=84f3216d6bc45cd73ef59827da28472f056c6a16;hpb=e5b90ccacc6aa8735dcbc1915d29c2c9db289671;p=oota-llvm.git diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 84f3216d6bc..bf2a482df35 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -26,7 +26,9 @@ function(llvm_update_compile_flags name) # LLVM_REQUIRES_RTTI is an internal flag that individual # targets can use to force RTTI + set(LLVM_CONFIG_HAS_RTTI YES CACHE INTERNAL "") if(NOT (LLVM_REQUIRES_RTTI OR LLVM_ENABLE_RTTI)) + set(LLVM_CONFIG_HAS_RTTI NO CACHE INTERNAL "") list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_RTTI=0) if (LLVM_COMPILER_IS_GCC_COMPATIBLE) list(APPEND LLVM_COMPILE_FLAGS "-fno-rtti") @@ -191,7 +193,7 @@ endfunction(add_link_opts) # Note: Don't set variables CMAKE_*_OUTPUT_DIRECTORY any more, # or a certain builder, for eaxample, msbuild.exe, would be confused. function(set_output_directory target) - cmake_parse_arguments(ARG "" "BINARY_DIR;LIBRARY_DIR;" "" ${ARGN}) + cmake_parse_arguments(ARG "" "BINARY_DIR;LIBRARY_DIR" "" ${ARGN}) # module_dir -- corresponding to LIBRARY_OUTPUT_DIRECTORY. # It affects output of add_library(MODULE). @@ -322,10 +324,12 @@ endfunction(set_windows_version_resource_properties) # Same semantics as target_link_libraries(). # ADDITIONAL_HEADERS # May specify header files for IDE generators. +# SONAME +# Should set SONAME link flags and create symlinks # ) function(llvm_add_library name) cmake_parse_arguments(ARG - "MODULE;SHARED;STATIC;DISABLE_LLVM_LINK_LLVM_DYLIB" + "MODULE;SHARED;STATIC;DISABLE_LLVM_LINK_LLVM_DYLIB;SONAME" "OUTPUT_NAME" "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS" ${ARGN}) @@ -430,11 +434,6 @@ function(llvm_add_library name) PREFIX "" ) endif() - - set_target_properties(${name} - PROPERTIES - SOVERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} - VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}) endif() if(ARG_MODULE OR ARG_SHARED) @@ -449,6 +448,24 @@ function(llvm_add_library name) endif() endif() + if(ARG_SHARED AND UNIX) + if(NOT APPLE AND ARG_SONAME) + get_target_property(output_name ${name} OUTPUT_NAME) + if(${output_name} STREQUAL "output_name-NOTFOUND") + set(output_name ${name}) + endif() + set(library_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}) + set(api_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}) + set_target_properties(${name} PROPERTIES OUTPUT_NAME ${library_name}) + llvm_install_library_symlink(${api_name} ${library_name} SHARED + COMPONENT ${name} + ALWAYS_GENERATE) + llvm_install_library_symlink(${output_name} ${library_name} SHARED + COMPONENT ${name} + ALWAYS_GENERATE) + endif() + endif() + # Add the explicit dependency information for this library. # # It would be nice to verify that we have the dependencies for this library @@ -781,7 +798,7 @@ endmacro() # enable or disable building it with everything else. # Additional parameter can be specified as the name of directory. macro(add_llvm_external_project name) - add_llvm_subdirectory(LLVM TOOL ${name}) + add_llvm_subdirectory(LLVM TOOL ${name} ${ARGN}) endmacro() macro(add_llvm_tool_subdirectory name) @@ -1040,6 +1057,41 @@ function(add_lit_testsuites project directory) endif() endfunction() +function(llvm_install_library_symlink name dest type) + cmake_parse_arguments(ARG "ALWAYS_GENERATE" "COMPONENT" "" ${ARGN}) + foreach(path ${CMAKE_MODULE_PATH}) + if(EXISTS ${path}/LLVMInstallSymlink.cmake) + set(INSTALL_SYMLINK ${path}/LLVMInstallSymlink.cmake) + break() + endif() + endforeach() + + set(component ${ARG_COMPONENT}) + if(NOT component) + set(component ${name}) + endif() + + set(full_name ${CMAKE_${type}_LIBRARY_PREFIX}${name}${CMAKE_${type}_LIBRARY_SUFFIX}) + set(full_dest ${CMAKE_${type}_LIBRARY_PREFIX}${dest}${CMAKE_${type}_LIBRARY_SUFFIX}) + + set(output_dir lib${LLVM_LIBDIR_SUFFIX}) + if(WIN32 AND "${type}" STREQUAL "SHARED") + set(output_dir bin) + endif() + + install(SCRIPT ${INSTALL_SYMLINK} + CODE "install_symlink(${full_name} ${full_dest} ${output_dir})" + COMPONENT ${component}) + + if (NOT CMAKE_CONFIGURATION_TYPES AND NOT ARG_ALWAYS_GENERATE) + add_custom_target(install-${name} + DEPENDS ${name} ${dest} install-${dest} + COMMAND "${CMAKE_COMMAND}" + -DCMAKE_INSTALL_COMPONENT=${name} + -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + endif() +endfunction() + function(llvm_install_symlink name dest) cmake_parse_arguments(ARG "ALWAYS_GENERATE" "" "" ${ARGN}) foreach(path ${CMAKE_MODULE_PATH}) @@ -1048,7 +1100,7 @@ function(llvm_install_symlink name dest) break() endif() endforeach() - + if(ARG_ALWAYS_GENERATE) set(component ${dest}) else() @@ -1112,4 +1164,3 @@ function(add_llvm_tool_symlink name dest) endif() endif() endfunction() -