1function(lldb_link_common_libs name targetkind)
2  if (NOT LLDB_USED_LIBS)
3    return()
4  endif()
5
6  set(COMPILER_SUPPORTS_GROUPS OFF)
7  if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
8    # The Darwin linker doesn't understand --start-group/--end-group.
9    set(COMPILER_SUPPORTS_GROUPS ON)
10  endif()
11
12  if(${targetkind} MATCHES "SHARED")
13    set(LINK_KEYWORD ${cmake_2_8_12_PUBLIC})
14  endif()
15
16  if(${targetkind} MATCHES "SHARED" OR ${targetkind} MATCHES "EXE")
17    if (COMPILER_SUPPORTS_GROUPS)
18      target_link_libraries(${name} ${LINK_KEYWORD}
19                            -Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group)
20    else()
21      target_link_libraries(${name} ${LINK_KEYWORD} ${LLDB_USED_LIBS})
22    endif()
23  endif()
24endfunction(lldb_link_common_libs)
25
26macro(add_lldb_library name)
27  # only supported parameters to this macro are the optional
28  # MODULE;SHARED;STATIC library type and source files
29  cmake_parse_arguments(PARAM
30    "MODULE;SHARED;STATIC;OBJECT"
31    ""
32    ""
33    ${ARGN})
34  llvm_process_sources(srcs ${PARAM_UNPARSED_ARGUMENTS})
35
36  if (MSVC_IDE OR XCODE)
37    string(REGEX MATCHALL "/[^/]+" split_path ${CMAKE_CURRENT_SOURCE_DIR})
38    list(GET split_path -1 dir)
39    file(GLOB_RECURSE headers
40      ../../include/lldb${dir}/*.h)
41    set(srcs ${srcs} ${headers})
42  endif()
43  if (PARAM_MODULE)
44    set(libkind MODULE)
45  elseif (PARAM_SHARED)
46    set(libkind SHARED)
47  elseif (PARAM_OBJECT)
48    set(libkind OBJECT)
49  else ()
50    # PARAM_STATIC or library type unspecified. BUILD_SHARED_LIBS
51    # does not control the kind of libraries created for LLDB,
52    # only whether or not they link to shared/static LLVM/Clang
53    # libraries.
54    set(libkind STATIC)
55  endif()
56
57  #PIC not needed on Win
58  if (NOT MSVC)
59    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
60  endif()
61
62  if (PARAM_OBJECT)
63    add_library(${name} ${libkind} ${srcs})
64  else()
65    llvm_add_library(${name} ${libkind} ${srcs})
66
67    lldb_link_common_libs(${name} "${libkind}")
68
69
70    target_link_libraries(${name})
71    if (COMPILER_SUPPORTS_GROUPS)
72        target_link_libraries(${name} ${cmake_2_8_12_PUBLIC}
73                    -Wl,--start-group ${CLANG_USED_LIBS} -Wl,--end-group)
74    else()
75        target_link_libraries(${name} ${cmake_2_8_12_PUBLIC} ${CLANG_USED_LIBS})
76    endif()
77    llvm_config(${name} ${LLVM_LINK_COMPONENTS})
78
79    if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "liblldb")
80      if (PARAM_SHARED)
81        install(TARGETS ${name}
82          RUNTIME DESTINATION bin
83          LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
84          ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
85      else()
86        install(TARGETS ${name}
87          LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
88          ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
89      endif()
90    endif()
91  endif()
92
93  # Hack: only some LLDB libraries depend on the clang autogenerated headers,
94  # but it is simple enough to make all of LLDB depend on some of those
95  # headers without negatively impacting much of anything.
96  add_dependencies(${name} libclang)
97
98  set_target_properties(${name} PROPERTIES FOLDER "lldb libraries")
99endmacro(add_lldb_library)
100
101macro(add_lldb_executable name)
102  add_llvm_executable(${name} ${ARGN})
103  set_target_properties(${name} PROPERTIES FOLDER "lldb executables")
104endmacro(add_lldb_executable)
105