Fix lldbplugin to properly build with lldb 3.9. (#11480)
[platform/upstream/coreclr.git] / src / ToolBox / SOS / lldbplugin / CMakeLists.txt
1 project(sosplugin)
2
3 set(CMAKE_INCLUDE_CURRENT_DIR ON)
4
5 # Set the RPATH of sos so that it can find dependencies without needing to set LD_LIBRARY_PATH
6 # For more information: http://www.cmake.org/Wiki/CMake_RPATH_handling.
7 if (CORECLR_SET_RPATH)
8   set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
9   if(CLR_CMAKE_PLATFORM_DARWIN)
10     set(CMAKE_INSTALL_RPATH "@loader_path")
11   else()
12     set(CMAKE_INSTALL_RPATH "\$ORIGIN")
13   endif(CLR_CMAKE_PLATFORM_DARWIN)
14 endif (CORECLR_SET_RPATH)
15
16 add_definitions(-DPAL_STDCPP_COMPAT)
17
18 set(ENABLE_LLDBPLUGIN ${CLR_CMAKE_PLATFORM_UNIX} CACHE BOOL "Enable building the SOS plugin for LLDB.")
19 set(REQUIRE_LLDBPLUGIN ${CLR_CMAKE_PLATFORM_LINUX} CACHE BOOL "Require building the SOS plugin for LLDB.")
20
21 if(SKIP_LLDBPLUGIN)
22     SET(REQUIRE_LLDBPLUGIN false)
23 endif()
24
25 if(CLR_CMAKE_PLATFORM_ARCH_AMD64)
26     add_definitions(-D_TARGET_AMD64_=1)
27     add_definitions(-DDBG_TARGET_64BIT=1)
28     add_definitions(-DDBG_TARGET_AMD64=1)
29     add_definitions(-DDBG_TARGET_WIN64=1)
30     add_definitions(-DBIT64)
31 elseif(CLR_CMAKE_PLATFORM_ARCH_I386)
32     add_definitions(-D_TARGET_X86_=1)
33     add_definitions(-DDBG_TARGET_32BIT=1)
34     add_definitions(-DDBG_TARGET_X86=1)
35 elseif(CLR_CMAKE_PLATFORM_ARCH_ARM)
36     add_definitions(-D_TARGET_ARM_=1)
37     add_definitions(-DDBG_TARGET_32BIT=1)
38     add_definitions(-DDBG_TARGET_ARM=1)
39 elseif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
40     add_definitions(-D_TARGET_ARM64_=1)
41     add_definitions(-DDBG_TARGET_64BIT=1)
42     add_definitions(-DDBG_TARGET_ARM64=1)
43     add_definitions(-DDBG_TARGET_WIN64=1)
44     add_definitions(-DBIT64)
45     SET(REQUIRE_LLDBPLUGIN false)
46 endif()
47
48
49 set(LLVM_HOST_DIR "$ENV{LLVM_HOME}")
50 set(WITH_LLDB_LIBS "${LLVM_HOST_DIR}/lib" CACHE PATH "Path to LLDB libraries")
51 set(WITH_LLDB_INCLUDES "${LLVM_HOST_DIR}/include" CACHE PATH "Path to LLDB headers")
52
53 if(NOT ENABLE_LLDBPLUGIN)
54     return()
55 endif()
56
57 # Check for LLDB library
58 find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATHS "${WITH_LLDB_LIBS}" PATH_SUFFIXES llvm NO_DEFAULT_PATH)
59 find_library(LLDB NAMES LLDB lldb lldb-4.0 lldb-3.9 lldb-3.8 lldb-3.7 lldb-3.6 lldb-3.5 PATH_SUFFIXES llvm)
60 if(LLDB STREQUAL LLDB-NOTFOUND)
61     if(REQUIRE_LLDBPLUGIN)
62         set(MESSAGE_MODE FATAL_ERROR)
63     else()
64         set(MESSAGE_MODE WARNING)
65     endif()
66     message(${MESSAGE_MODE} "Cannot find lldb-3.5, lldb-3.6, lldb-3.8, lldb-3.9 or lldb-4.0. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
67     return()
68 endif()
69
70 message(STATUS "LLDB: ${LLDB}")
71
72 # Check for LLDB headers
73 # Multiple versions of LLDB can install side-by-side, so we need to check for lldb in various locations.
74 # If the file in a directory is found the result is stored in the variable and the search will not be repeated unless the variable is cleared.
75 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "${WITH_LLDB_INCLUDES}" NO_DEFAULT_PATH)
76 find_path(LLDB_H "lldb/API/LLDB.h")
77
78 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.9/include")
79 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.8/include")
80 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.7/include")
81 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.6/include")
82 find_path(LLDB_H "lldb/API/LLDB.h" PATHS "/usr/lib/llvm-3.5/include")
83
84 if(LLDB_H STREQUAL LLDB_H-NOTFOUND)
85     if(REQUIRE_LLDBPLUGIN)
86         message(FATAL_ERROR "Cannot find LLDB.h. Try installing lldb-3.6-dev (or the appropriate package for your platform)")
87     else()
88         message(WARNING "Cannot find LLDB.h Try installing lldb-3.6-dev (or the appropriate package for your platform)")
89     endif()
90     return()
91 endif()
92
93 message(STATUS "LLDB_H: ${LLDB_H}")
94
95 add_compile_options(-Wno-delete-non-virtual-dtor)
96
97 include_directories(inc)
98 include_directories("${LLDB_H}")
99 include_directories(${CLR_DIR}/src/debug/inc)
100 include_directories(${CLR_DIR}/src/inc)
101 include_directories(${CLR_DIR}/src/coreclr/hosts/inc)
102 include_directories(${CLR_DIR}/src/coreclr/hosts/unixcoreruncommon)
103
104 set(SOURCES
105     sosplugin.cpp
106     soscommand.cpp
107     setclrpathcommand.cpp
108     setsostidcommand.cpp
109     services.cpp
110 )
111
112 if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
113     list(APPEND SOURCES
114         coreruncommand.cpp
115         ${CLR_DIR}/src/coreclr/hosts/unixcorerun/corerun.cpp
116         ${CLR_DIR}/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
117     )
118 endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
119
120 _add_library(sosplugin SHARED ${SOURCES})
121 add_dependencies(sosplugin sos)
122
123 if (CLR_CMAKE_PLATFORM_UNIX)
124     target_link_libraries(sosplugin ${LLDB})
125 endif()
126
127 # add the install targets
128 install_clr(sosplugin)