CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # This tool creates a shared library from the LLVM libraries. Generating this
  2. # library is enabled by setting LLVM_BUILD_LLVM_DYLIB=yes on the CMake
  3. # commandline. By default the shared library only exports the LLVM C API.
  4. # You can configure which libraries from LLVM you want to include in the shared
  5. # library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited list of
  6. # LLVM components. All compoenent names handled by llvm-config are valid.
  7. if(NOT DEFINED LLVM_DYLIB_COMPONENTS)
  8. set(LLVM_DYLIB_COMPONENTS
  9. ${LLVM_TARGETS_TO_BUILD}
  10. Analysis
  11. BitReader
  12. BitWriter
  13. CodeGen
  14. Core
  15. DebugInfoDWARF
  16. DebugInfoPDB
  17. ExecutionEngine
  18. IPA
  19. IPO
  20. IRReader
  21. InstCombine
  22. Instrumentation
  23. Interpreter
  24. Linker
  25. MCDisassembler
  26. MCJIT
  27. ObjCARCOpts
  28. Object
  29. ScalarOpts
  30. Support
  31. Target
  32. TransformUtils
  33. Vectorize
  34. native
  35. )
  36. endif()
  37. add_definitions( -DLLVM_VERSION_INFO=\"${PACKAGE_VERSION}\" )
  38. set(SOURCES
  39. libllvm.cpp
  40. )
  41. llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS})
  42. if(NOT DEFINED LLVM_DYLIB_EXPORTED_SYMBOL_FILE)
  43. if( WIN32 AND NOT CYGWIN )
  44. message(FATAL_ERROR "Auto-generation not implemented for Win32 without GNU utils. Please specify LLVM_EXPORTED_SYMBOL_FILE.")
  45. endif()
  46. # To get the export list for a single llvm library:
  47. # nm ${LIB_PATH} | awk "/T _LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_PATH}.exports
  48. set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/libllvm.exports)
  49. if (NOT LLVM_DYLIB_EXPORT_ALL)
  50. foreach (lib ${LIB_NAMES})
  51. set(LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
  52. set(LIB_NAME ${LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${lib})
  53. set(LIB_PATH ${LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
  54. set(LIB_EXPORTS_PATH ${LIB_NAME}.exports)
  55. list(APPEND LLVM_DYLIB_REQUIRED_EXPORTS ${LIB_EXPORTS_PATH})
  56. add_custom_command(OUTPUT ${LIB_EXPORTS_PATH}
  57. COMMAND nm ${LIB_PATH} | awk "/T _LLVM/ || /T LLVM/ { print $3 }" | sort -u | sed -e "s/^_//g" > ${LIB_EXPORTS_PATH}
  58. WORKING_DIRECTORY ${LIB_DIR}
  59. DEPENDS ${lib}
  60. COMMENT "Generating Export list for ${lib}..."
  61. VERBATIM )
  62. endforeach ()
  63. endif()
  64. if (LLVM_DYLIB_EXPORT_ALL)
  65. add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE}
  66. COMMAND echo \"LLVM*\" > ${LLVM_EXPORTED_SYMBOL_FILE} && echo \"_Z*llvm*\" >> ${LLVM_EXPORTED_SYMBOL_FILE}
  67. WORKING_DIRECTORY ${LIB_DIR}
  68. DEPENDS ${LLVM_DYLIB_REQUIRED_EXPORTS}
  69. COMMENT "Generating combined export list...")
  70. else()
  71. add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE}
  72. COMMAND cat ${LLVM_DYLIB_REQUIRED_EXPORTS} > ${LLVM_EXPORTED_SYMBOL_FILE}
  73. WORKING_DIRECTORY ${LIB_DIR}
  74. DEPENDS ${LLVM_DYLIB_REQUIRED_EXPORTS}
  75. COMMENT "Generating combined export list...")
  76. endif()
  77. add_custom_target(libLLVMExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE})
  78. else()
  79. set(LLVM_EXPORTED_SYMBOL_FILE ${LLVM_DYLIB_EXPORTED_SYMBOL_FILE})
  80. add_custom_target(libLLVMExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE})
  81. endif()
  82. add_llvm_library(LLVM SHARED ${SOURCES})
  83. list(REMOVE_DUPLICATES LIB_NAMES)
  84. if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf"
  85. # GNU ld doesn't resolve symbols in the version script.
  86. set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive)
  87. elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
  88. set(LIB_NAMES -Wl,-all_load ${LIB_NAMES})
  89. endif()
  90. target_link_libraries(LLVM PRIVATE ${LIB_NAMES})
  91. add_dependencies(LLVM libLLVMExports)
  92. if (APPLE)
  93. set_property(TARGET LLVM APPEND_STRING PROPERTY
  94. LINK_FLAGS
  95. " -compatibility_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR} -current_version ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}")
  96. endif()