summaryrefslogtreecommitdiff
path: root/cmake/modules/AddLLDB.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/AddLLDB.cmake')
-rw-r--r--cmake/modules/AddLLDB.cmake114
1 files changed, 114 insertions, 0 deletions
diff --git a/cmake/modules/AddLLDB.cmake b/cmake/modules/AddLLDB.cmake
new file mode 100644
index 000000000000..672b0a53feaf
--- /dev/null
+++ b/cmake/modules/AddLLDB.cmake
@@ -0,0 +1,114 @@
+function(lldb_link_common_libs name targetkind)
+ if (NOT LLDB_USED_LIBS)
+ return()
+ endif()
+
+ if(${targetkind} MATCHES "SHARED")
+ set(LINK_KEYWORD ${cmake_2_8_12_PUBLIC})
+ endif()
+
+ if(${targetkind} MATCHES "SHARED" OR ${targetkind} MATCHES "EXE")
+ if (LLDB_LINKER_SUPPORTS_GROUPS)
+ target_link_libraries(${name} ${LINK_KEYWORD}
+ -Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group)
+ else()
+ target_link_libraries(${name} ${LINK_KEYWORD} ${LLDB_USED_LIBS})
+ endif()
+ endif()
+endfunction(lldb_link_common_libs)
+
+macro(add_lldb_library name)
+ # only supported parameters to this macro are the optional
+ # MODULE;SHARED;STATIC library type and source files
+ cmake_parse_arguments(PARAM
+ "MODULE;SHARED;STATIC;OBJECT"
+ ""
+ ""
+ ${ARGN})
+ llvm_process_sources(srcs ${PARAM_UNPARSED_ARGUMENTS})
+
+ if (MSVC_IDE OR XCODE)
+ string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
+ list(GET split_path -1 dir)
+ file(GLOB_RECURSE headers
+ ../../include/lldb${dir}/*.h)
+ set(srcs ${srcs} ${headers})
+ endif()
+ if (PARAM_MODULE)
+ set(libkind MODULE)
+ elseif (PARAM_SHARED)
+ set(libkind SHARED)
+ elseif (PARAM_OBJECT)
+ set(libkind OBJECT)
+ else ()
+ # PARAM_STATIC or library type unspecified. BUILD_SHARED_LIBS
+ # does not control the kind of libraries created for LLDB,
+ # only whether or not they link to shared/static LLVM/Clang
+ # libraries.
+ set(libkind STATIC)
+ endif()
+
+ #PIC not needed on Win
+ if (NOT MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+ endif()
+
+ if (PARAM_OBJECT)
+ add_library(${name} ${libkind} ${srcs})
+ else()
+ llvm_add_library(${name} ${libkind} ${srcs})
+
+ lldb_link_common_libs(${name} "${libkind}")
+
+ if (PARAM_SHARED)
+ if (LLDB_LINKER_SUPPORTS_GROUPS)
+ target_link_libraries(${name} ${cmake_2_8_12_PUBLIC}
+ -Wl,--start-group ${CLANG_USED_LIBS} -Wl,--end-group)
+ else()
+ target_link_libraries(${name} ${cmake_2_8_12_PUBLIC} ${CLANG_USED_LIBS})
+ endif()
+ endif()
+ llvm_config(${name} ${LLVM_LINK_COMPONENTS})
+
+ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "liblldb")
+ if (PARAM_SHARED)
+ install(TARGETS ${name}
+ RUNTIME DESTINATION bin
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
+ else()
+ install(TARGETS ${name}
+ LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+ ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
+ endif()
+ endif()
+ endif()
+
+ # Hack: only some LLDB libraries depend on the clang autogenerated headers,
+ # but it is simple enough to make all of LLDB depend on some of those
+ # headers without negatively impacting much of anything.
+ add_dependencies(${name} libclang)
+
+ set_target_properties(${name} PROPERTIES FOLDER "lldb libraries")
+endmacro(add_lldb_library)
+
+macro(add_lldb_executable name)
+ add_llvm_executable(${name} ${ARGN})
+ set_target_properties(${name} PROPERTIES FOLDER "lldb executables")
+endmacro(add_lldb_executable)
+
+# Support appending linker flags to an existing target.
+# This will preserve the existing linker flags on the
+# target, if there are any.
+function(lldb_append_link_flags target_name new_link_flags)
+ # Retrieve existing linker flags.
+ get_target_property(current_link_flags ${target_name} LINK_FLAGS)
+
+ # If we had any linker flags, include them first in the new linker flags.
+ if(current_link_flags)
+ set(new_link_flags "${current_link_flags} ${new_link_flags}")
+ endif()
+
+ # Now set them onto the target.
+ set_target_properties(${target_name} PROPERTIES LINK_FLAGS ${new_link_flags})
+endfunction()