diff options
| -rw-r--r-- | lldb/CMakeLists.txt | 82 | ||||
| -rw-r--r-- | lldb/cmake/LLDBDependencies.cmake | 8 | ||||
| -rw-r--r-- | lldb/source/API/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | lldb/source/CMakeLists.txt | 17 | ||||
| -rw-r--r-- | lldb/tools/driver/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | lldb/tools/lldb-mi/CMakeLists.txt | 320 |
6 files changed, 229 insertions, 219 deletions
diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt index a37147c672c..8b6ea3e6316 100644 --- a/lldb/CMakeLists.txt +++ b/lldb/CMakeLists.txt @@ -111,9 +111,6 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) endif() set(LLDB_DISABLE_PYTHON 0 CACHE BOOL "Disables the Python scripting integration.") -if (LLDB_DISABLE_PYTHON) - add_definitions( -DLLDB_DISABLE_PYTHON ) -endif() if ((NOT MSVC) OR MSVC12) add_definitions( -DHAVE_ROUND ) @@ -139,9 +136,10 @@ if (NOT LLDB_DISABLE_PYTHON) endif() endif() if (MSVC) - if (PYTHON_INCLUDE_DIR STREQUAL "" OR PYTHON_LIBRARY STREQUAL "") - message(FATAL_ERROR "Building on MSVC requires manual specification of " - "PYTHON_INCLUDE_DIR and PYTHON_LIBRARY") + if ("${PYTHON_INCLUDE_DIR}" STREQUAL "" OR "${PYTHON_LIBRARY}" STREQUAL "") + message("-- LLDB Embedded python disabled. Embedding python on Windows requires " + "manually specifying PYTHON_INCLUDE_DIR *and* PYTHON_LIBRARY") + set(LLDB_DISABLE_PYTHON 1) else() message("-- Found PythonLibs: ${PYTHON_LIBRARY}") include_directories(${PYTHON_INCLUDE_DIR}) @@ -152,6 +150,12 @@ if (NOT LLDB_DISABLE_PYTHON) endif() endif() +if (LLDB_DISABLE_PYTHON) + unset(PYTHON_INCLUDE_DIR) + unset(PYTHON_LIBRARY) + add_definitions( -DLLDB_DISABLE_PYTHON ) +endif() + include_directories(../clang/include) include_directories("${CMAKE_CURRENT_BINARY_DIR}/../clang/include") @@ -251,12 +255,12 @@ 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" + "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) @@ -270,6 +274,8 @@ macro(add_lldb_library name) set(libkind SHARED) elseif (PARAM_STATIC) set(libkind STATIC) + elseif (PARAM_OBJECT) + set(libkind OBJECT) else () # library type unspecified - controlled by BUILD_SHARED_LIBS unset(libkind) @@ -279,45 +285,43 @@ macro(add_lldb_library name) if (NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif() - llvm_add_library(${name} ${libkind} ${srcs}) - #if (LLVM_COMMON_DEPENDS) - ##add_dependencies(${name} ${LLVM_COMMON_DEPENDS}) - #endif() - if ("${libkind}" STREQUAL "STATIC") - set(lldb_library_keyword ${cmake_2_8_12_INTERFACE}) - else () - set(lldb_library_keyword ${cmake_2_8_12_PUBLIC}) - endif () - - if(LLDB_USED_LIBS) - # The Darwin linker doesn't understand --start-group/--end-group. - if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") - target_link_libraries(${name} ${lldb_library_keyword} - -Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group) - else() - target_link_libraries(${name} ${lldb_library_keyword} ${LLDB_USED_LIBS}) + if (PARAM_OBJECT) + add_library(${name} ${libkind} ${srcs}) + else() + llvm_add_library(${name} ${libkind} ${srcs}) + + if (PARAM_STATIC) + set(lldb_library_keyword ${cmake_2_8_12_INTERFACE}) + else () + set(lldb_library_keyword ${cmake_2_8_12_PUBLIC}) + endif () + + if(LLDB_USED_LIBS) + # The Darwin linker doesn't understand --start-group/--end-group. + if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin") + target_link_libraries(${name} ${lldb_library_keyword} + -Wl,--start-group ${LLDB_USED_LIBS} -Wl,--end-group) + else() + target_link_libraries(${name} ${lldb_library_keyword} ${LLDB_USED_LIBS}) + endif() endif() - endif() - target_link_libraries(${name} ${lldb_library_keyword} ${CLANG_USED_LIBS}) - target_link_libraries(${name} ${lldb_library_keyword} ${LLVM_USED_LIBS}) - llvm_config(${name} ${LLVM_LINK_COMPONENTS}) - target_link_libraries(${name} ${lldb_library_keyword} ${LLVM_COMMON_LIBS}) - if (LLVM_COMMON_DEPENDS) - add_dependencies(${name} ${LLVM_COMMON_DEPENDS}) + + target_link_libraries(${name} ${lldb_library_keyword} ${CLANG_USED_LIBS}) + target_link_libraries(${name} ${lldb_library_keyword} ${LLVM_USED_LIBS}) + llvm_config(${name} ${LLVM_LINK_COMPONENTS}) + target_link_libraries(${name} ${lldb_library_keyword} ${LLVM_COMMON_LIBS}) + + install(TARGETS ${name} + LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} + ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) 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. - set (LLDB_DEPENDENCIES - libclang - ) - add_dependencies(${name} ${LLDB_DEPENDENCIES}) + add_dependencies(${name} libclang) - install(TARGETS ${name} - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} - ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) set_target_properties(${name} PROPERTIES FOLDER "lldb libraries") endmacro(add_lldb_library) diff --git a/lldb/cmake/LLDBDependencies.cmake b/lldb/cmake/LLDBDependencies.cmake index 0fd25a08c78..82e0ed044ce 100644 --- a/lldb/cmake/LLDBDependencies.cmake +++ b/lldb/cmake/LLDBDependencies.cmake @@ -55,14 +55,6 @@ set( LLDB_USED_LIBS lldbPluginInstrumentationRuntimeAddressSanitizer ) -# Need to export the API in the liblldb.dll for Windows -# The lldbAPI source files are added directly in liblldb -if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows" ) - list(APPEND LLDB_USED_LIBS - lldbAPI - ) -endif () - # Windows-only libraries if ( CMAKE_SYSTEM_NAME MATCHES "Windows" ) list(APPEND LLDB_USED_LIBS diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt index 65ce88e4b97..a6f4349b7b7 100644 --- a/lldb/source/API/CMakeLists.txt +++ b/lldb/source/API/CMakeLists.txt @@ -1,10 +1,25 @@ set(LLVM_NO_RTTI 1) if ( CMAKE_SYSTEM_NAME MATCHES "Windows" ) -add_definitions( -DEXPORT_LIBLLDB ) + add_definitions( -DEXPORT_LIBLLDB ) endif() -add_lldb_library(lldbAPI +# An OBJECT library is a special type of CMake library that produces +# no archive, has no link interface, and no link inputs. It is like +# a regular archive, just without the physical output. To link against +# an OBJECT library, you reference it in the *source* file list of a +# library using the special syntax $<TARGET_OBJECTS:lldbAPI>. This will +# cause every object file to be passed to the linker independently, as +# opposed to a single archive being passed to the linker. +# +# This is *extremely* important on Windows. lldbAPI exports all of the +# SB classes using __declspec(dllexport). Unfortunately for technical +# reasons it is not possible (well, extremely difficult) to get the linker +# to propagate a __declspec(dllexport) attribute from a symbol in an +# object file in an archive to a DLL that links against that archive. +# The solution to this is for the DLL to link the object file directly. +# So lldbAPI must be an OBJECT library. +add_lldb_library(lldbAPI OBJECT SBAddress.cpp SBAttachInfo.cpp SBBlock.cpp diff --git a/lldb/source/CMakeLists.txt b/lldb/source/CMakeLists.txt index cd5730f1b5b..93ed716e5f1 100644 --- a/lldb/source/CMakeLists.txt +++ b/lldb/source/CMakeLists.txt @@ -43,29 +43,26 @@ include(../cmake/LLDBDependencies.cmake) add_lldb_library(liblldb SHARED lldb.cpp lldb-log.cpp + $<TARGET_OBJECTS:lldbAPI> ${LLDB_WRAP_PYTHON} ${LLDB_VERS_GENERATED_FILE} ) +set_target_properties(liblldb + PROPERTIES + VERSION ${LLDB_VERSION} + ) if ( CMAKE_SYSTEM_NAME MATCHES "Windows" ) - target_link_libraries(liblldb PRIVATE lldbAPI) - # Only MSVC has the ABI compatibility and avoids using FindPythonLibs, + # Only MSVC has the ABI compatibility problem and avoids using FindPythonLibs, # so only it needs to explicitly link against ${PYTHON_LIBRARY} - if (MSVC) + if (MSVC AND NOT LLDB_DISABLE_PYTHON) target_link_libraries(liblldb PRIVATE ${PYTHON_LIBRARY}) endif() - - set_target_properties(liblldb - PROPERTIES - OUTPUT_NAME liblldb - VERSION ${LLDB_VERSION} - ) else() set_target_properties(liblldb PROPERTIES OUTPUT_NAME lldb - VERSION ${LLDB_VERSION} ) endif() diff --git a/lldb/tools/driver/CMakeLists.txt b/lldb/tools/driver/CMakeLists.txt index 30d6fef9c27..aa6db8c4ffd 100644 --- a/lldb/tools/driver/CMakeLists.txt +++ b/lldb/tools/driver/CMakeLists.txt @@ -5,7 +5,7 @@ add_lldb_executable(lldb ) if ( CMAKE_SYSTEM_NAME MATCHES "Windows" ) -add_definitions( -DIMPORT_LIBLLDB ) + add_definitions( -DIMPORT_LIBLLDB ) endif() target_link_libraries(lldb liblldb) diff --git a/lldb/tools/lldb-mi/CMakeLists.txt b/lldb/tools/lldb-mi/CMakeLists.txt index 68c2a9f3203..08f67050df7 100644 --- a/lldb/tools/lldb-mi/CMakeLists.txt +++ b/lldb/tools/lldb-mi/CMakeLists.txt @@ -1,165 +1,167 @@ set(LLVM_NO_RTTI 1) if ( CMAKE_SYSTEM_NAME MATCHES "Windows" ) -add_lldb_executable(lldb-mi - Driver.cpp - ../../source/Host/windows/getopt/GetOptInc.cpp - MICmdArgContext.cpp - MICmdArgSet.cpp - MICmdArgValBase.cpp - MICmdArgValConsume.cpp - MICmdArgValFile.cpp - MICmdArgValListBase.cpp - MICmdArgValListOfN.cpp - MICmdArgValNumber.cpp - MICmdArgValOptionLong.cpp - MICmdArgValOptionShort.cpp - MICmdArgValString.cpp - MICmdArgValThreadGrp.cpp - MICmdBase.cpp - MICmdCommands.cpp - MICmdCmd.cpp - MICmdCmdBreak.cpp - MICmdCmdData.cpp - MICmdCmdEnviro.cpp - MICmdCmdExec.cpp - MICmdCmdFile.cpp - MICmdCmdGdbInfo.cpp - MICmdCmdGdbSet.cpp - MICmdCmdGdbThread.cpp - MICmdCmdMiscellanous.cpp - MICmdCmdStack.cpp - MICmdCmdSupportInfo.cpp - MICmdCmdSupportList.cpp - MICmdCmdSymbol.cpp - MICmdCmdTarget.cpp - MICmdCmdThread.cpp - MICmdCmdTrace.cpp - MICmdCmdVar.cpp - MICmdData.cpp - MICmdFactory.cpp - MICmdInterpreter.cpp - MICmdInvoker.cpp - MICmdMgr.cpp - MICmdMgrSetCmdDeleteCallback.cpp - MICmnBase.cpp - MICmnLLDBBroadcaster.cpp - MICmnLLDBDebugger.cpp - MICmnLLDBDebuggerHandleEvents.cpp - MICmnLLDBDebugSessionInfo.cpp - MICmnLLDBDebugSessionInfoVarObj.cpp - MICmnLLDBProxySBValue.cpp - MICmnLLDBUtilSBValue.cpp - MICmnLog.cpp - MICmnLogMediumFile.cpp - MICmnMIOutOfBandRecord.cpp - MICmnMIResultRecord.cpp - MICmnMIValue.cpp - MICmnMIValueConst.cpp - MICmnMIValueList.cpp - MICmnMIValueResult.cpp - MICmnMIValueTuple.cpp - MICmnResources.cpp - MICmnStreamStderr.cpp - MICmnStreamStdin.cpp - MICmnStreamStdout.cpp - MICmnThreadMgrStd.cpp - MIDriver.cpp - MIDriverBase.cpp - MIDriverMain.cpp - MIDriverMgr.cpp - MIUtilDateTimeStd.cpp - MIUtilDebug.cpp - MIUtilFileStd.cpp - MIUtilMapIdToVariant.cpp - MIUtilString.cpp - MIUtilSystemLinux.cpp - MIUtilSystemOsx.cpp - MIUtilSystemWindows.cpp - MIUtilTermios.cpp - MIUtilThreadBaseStd.cpp - MIUtilVariant.cpp - Platform.cpp - ) + add_definitions( -DIMPORT_LIBLLDB ) + + add_lldb_executable(lldb-mi + Driver.cpp + ../../source/Host/windows/getopt/GetOptInc.cpp + MICmdArgContext.cpp + MICmdArgSet.cpp + MICmdArgValBase.cpp + MICmdArgValConsume.cpp + MICmdArgValFile.cpp + MICmdArgValListBase.cpp + MICmdArgValListOfN.cpp + MICmdArgValNumber.cpp + MICmdArgValOptionLong.cpp + MICmdArgValOptionShort.cpp + MICmdArgValString.cpp + MICmdArgValThreadGrp.cpp + MICmdBase.cpp + MICmdCommands.cpp + MICmdCmd.cpp + MICmdCmdBreak.cpp + MICmdCmdData.cpp + MICmdCmdEnviro.cpp + MICmdCmdExec.cpp + MICmdCmdFile.cpp + MICmdCmdGdbInfo.cpp + MICmdCmdGdbSet.cpp + MICmdCmdGdbThread.cpp + MICmdCmdMiscellanous.cpp + MICmdCmdStack.cpp + MICmdCmdSupportInfo.cpp + MICmdCmdSupportList.cpp + MICmdCmdSymbol.cpp + MICmdCmdTarget.cpp + MICmdCmdThread.cpp + MICmdCmdTrace.cpp + MICmdCmdVar.cpp + MICmdData.cpp + MICmdFactory.cpp + MICmdInterpreter.cpp + MICmdInvoker.cpp + MICmdMgr.cpp + MICmdMgrSetCmdDeleteCallback.cpp + MICmnBase.cpp + MICmnLLDBBroadcaster.cpp + MICmnLLDBDebugger.cpp + MICmnLLDBDebuggerHandleEvents.cpp + MICmnLLDBDebugSessionInfo.cpp + MICmnLLDBDebugSessionInfoVarObj.cpp + MICmnLLDBProxySBValue.cpp + MICmnLLDBUtilSBValue.cpp + MICmnLog.cpp + MICmnLogMediumFile.cpp + MICmnMIOutOfBandRecord.cpp + MICmnMIResultRecord.cpp + MICmnMIValue.cpp + MICmnMIValueConst.cpp + MICmnMIValueList.cpp + MICmnMIValueResult.cpp + MICmnMIValueTuple.cpp + MICmnResources.cpp + MICmnStreamStderr.cpp + MICmnStreamStdin.cpp + MICmnStreamStdout.cpp + MICmnThreadMgrStd.cpp + MIDriver.cpp + MIDriverBase.cpp + MIDriverMain.cpp + MIDriverMgr.cpp + MIUtilDateTimeStd.cpp + MIUtilDebug.cpp + MIUtilFileStd.cpp + MIUtilMapIdToVariant.cpp + MIUtilString.cpp + MIUtilSystemLinux.cpp + MIUtilSystemOsx.cpp + MIUtilSystemWindows.cpp + MIUtilTermios.cpp + MIUtilThreadBaseStd.cpp + MIUtilVariant.cpp + Platform.cpp + ) else () -add_lldb_executable(lldb-mi - Driver.cpp - MICmdArgContext.cpp - MICmdArgSet.cpp - MICmdArgValBase.cpp - MICmdArgValConsume.cpp - MICmdArgValFile.cpp - MICmdArgValListBase.cpp - MICmdArgValListOfN.cpp - MICmdArgValNumber.cpp - MICmdArgValOptionLong.cpp - MICmdArgValOptionShort.cpp - MICmdArgValString.cpp - MICmdArgValThreadGrp.cpp - MICmdBase.cpp - MICmdCommands.cpp - MICmdCmd.cpp - MICmdCmdBreak.cpp - MICmdCmdData.cpp - MICmdCmdEnviro.cpp - MICmdCmdExec.cpp - MICmdCmdFile.cpp - MICmdCmdGdbInfo.cpp - MICmdCmdGdbSet.cpp - MICmdCmdGdbThread.cpp - MICmdCmdMiscellanous.cpp - MICmdCmdStack.cpp - MICmdCmdSupportInfo.cpp - MICmdCmdSupportList.cpp - MICmdCmdSymbol.cpp - MICmdCmdTarget.cpp - MICmdCmdThread.cpp - MICmdCmdTrace.cpp - MICmdCmdVar.cpp - MICmdData.cpp - MICmdFactory.cpp - MICmdInterpreter.cpp - MICmdInvoker.cpp - MICmdMgr.cpp - MICmdMgrSetCmdDeleteCallback.cpp - MICmnBase.cpp - MICmnLLDBBroadcaster.cpp - MICmnLLDBDebugger.cpp - MICmnLLDBDebuggerHandleEvents.cpp - MICmnLLDBDebugSessionInfo.cpp - MICmnLLDBDebugSessionInfoVarObj.cpp - MICmnLLDBProxySBValue.cpp - MICmnLLDBUtilSBValue.cpp - MICmnLog.cpp - MICmnLogMediumFile.cpp - MICmnMIOutOfBandRecord.cpp - MICmnMIResultRecord.cpp - MICmnMIValue.cpp - MICmnMIValueConst.cpp - MICmnMIValueList.cpp - MICmnMIValueResult.cpp - MICmnMIValueTuple.cpp - MICmnResources.cpp - MICmnStreamStderr.cpp - MICmnStreamStdin.cpp - MICmnStreamStdout.cpp - MICmnThreadMgrStd.cpp - MIDriver.cpp - MIDriverBase.cpp - MIDriverMain.cpp - MIDriverMgr.cpp - MIUtilDateTimeStd.cpp - MIUtilDebug.cpp - MIUtilFileStd.cpp - MIUtilMapIdToVariant.cpp - MIUtilString.cpp - MIUtilSystemLinux.cpp - MIUtilSystemOsx.cpp - MIUtilSystemWindows.cpp - MIUtilTermios.cpp - MIUtilThreadBaseStd.cpp - MIUtilVariant.cpp - Platform.cpp - ) + add_lldb_executable(lldb-mi + Driver.cpp + MICmdArgContext.cpp + MICmdArgSet.cpp + MICmdArgValBase.cpp + MICmdArgValConsume.cpp + MICmdArgValFile.cpp + MICmdArgValListBase.cpp + MICmdArgValListOfN.cpp + MICmdArgValNumber.cpp + MICmdArgValOptionLong.cpp + MICmdArgValOptionShort.cpp + MICmdArgValString.cpp + MICmdArgValThreadGrp.cpp + MICmdBase.cpp + MICmdCommands.cpp + MICmdCmd.cpp + MICmdCmdBreak.cpp + MICmdCmdData.cpp + MICmdCmdEnviro.cpp + MICmdCmdExec.cpp + MICmdCmdFile.cpp + MICmdCmdGdbInfo.cpp + MICmdCmdGdbSet.cpp + MICmdCmdGdbThread.cpp + MICmdCmdMiscellanous.cpp + MICmdCmdStack.cpp + MICmdCmdSupportInfo.cpp + MICmdCmdSupportList.cpp + MICmdCmdSymbol.cpp + MICmdCmdTarget.cpp + MICmdCmdThread.cpp + MICmdCmdTrace.cpp + MICmdCmdVar.cpp + MICmdData.cpp + MICmdFactory.cpp + MICmdInterpreter.cpp + MICmdInvoker.cpp + MICmdMgr.cpp + MICmdMgrSetCmdDeleteCallback.cpp + MICmnBase.cpp + MICmnLLDBBroadcaster.cpp + MICmnLLDBDebugger.cpp + MICmnLLDBDebuggerHandleEvents.cpp + MICmnLLDBDebugSessionInfo.cpp + MICmnLLDBDebugSessionInfoVarObj.cpp + MICmnLLDBProxySBValue.cpp + MICmnLLDBUtilSBValue.cpp + MICmnLog.cpp + MICmnLogMediumFile.cpp + MICmnMIOutOfBandRecord.cpp + MICmnMIResultRecord.cpp + MICmnMIValue.cpp + MICmnMIValueConst.cpp + MICmnMIValueList.cpp + MICmnMIValueResult.cpp + MICmnMIValueTuple.cpp + MICmnResources.cpp + MICmnStreamStderr.cpp + MICmnStreamStdin.cpp + MICmnStreamStdout.cpp + MICmnThreadMgrStd.cpp + MIDriver.cpp + MIDriverBase.cpp + MIDriverMain.cpp + MIDriverMgr.cpp + MIUtilDateTimeStd.cpp + MIUtilDebug.cpp + MIUtilFileStd.cpp + MIUtilMapIdToVariant.cpp + MIUtilString.cpp + MIUtilSystemLinux.cpp + MIUtilSystemOsx.cpp + MIUtilSystemWindows.cpp + MIUtilTermios.cpp + MIUtilThreadBaseStd.cpp + MIUtilVariant.cpp + Platform.cpp + ) endif () target_link_libraries(lldb-mi liblldb) |

