[Lldb-commits] [lldb] 94b1bc0 - Re-land "[lldb/CMake] Change how we deal with optional dependencies"
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 20 20:05:39 PST 2019
Author: Jonas Devlieghere
Date: 2019-12-20T20:05:04-08:00
New Revision: 94b1bc0fb86a081caae0a919c0ecdb732a84e8ad
URL: https://github.com/llvm/llvm-project/commit/94b1bc0fb86a081caae0a919c0ecdb732a84e8ad
DIFF: https://github.com/llvm/llvm-project/commit/94b1bc0fb86a081caae0a919c0ecdb732a84e8ad.diff
LOG: Re-land "[lldb/CMake] Change how we deal with optional dependencies"
Recently there has been some discussion about how we deal with optional
dependencies in LLDB. The approach in LLVM is to make things work out of
the box. If the dependency isn't there, we move on silently.
That's not true for LLDB. Unless you explicitly disable the dependency
with LLDB_ENABLE_*, you'll get a configuration-time error. The
historical reason for this is that LLDB's dependencies have a much
broader impact, think about Python for example which is required to run
the test suite.
The current approach can be frustrating from a user experience
perspective. Sometimes you just want to ensure LLDB builds with a change
in clang.
This patch changes the optional dependencies (with the exception of
Python) to a new scheme. The LLDB_ENABLE_* now takes three values: On,
Off or Auto, with the latter being the default. On and Off behave the
same as today, forcing the dependency to be enabled or disabled. If the
dependency is set to On but is not found, it results in a configuration
time warning. For Auto we detect if the dependency is there and either
enable or disable it depending on whether it's found.
Differential revision: https://reviews.llvm.org/D71306
PS: The reason Python isn't included yet is because it's so pervasive
that I plan on doing that in a separate patch.
Added:
lldb/cmake/modules/FindCursesAndPanel.cmake
Modified:
lldb/cmake/modules/LLDBConfig.cmake
lldb/source/Core/CMakeLists.txt
lldb/test/CMakeLists.txt
Removed:
################################################################################
diff --git a/lldb/cmake/modules/FindCursesAndPanel.cmake b/lldb/cmake/modules/FindCursesAndPanel.cmake
new file mode 100644
index 000000000000..aaadf214bf54
--- /dev/null
+++ b/lldb/cmake/modules/FindCursesAndPanel.cmake
@@ -0,0 +1,24 @@
+#.rst:
+# FindCursesAndPanel
+# -----------
+#
+# Find the curses and panel library as a whole.
+
+if(CURSES_INCLUDE_DIRS AND CURSES_LIBRARIES AND PANEL_LIBRARIES)
+ set(CURSESANDPANEL_FOUND TRUE)
+else()
+ find_package(Curses QUIET)
+ find_library(PANEL_LIBRARIES NAMES panel DOC "The curses panel library" QUIET)
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(CursesAndPanel
+ FOUND_VAR
+ CURSESANDPANEL_FOUND
+ REQUIRED_VARS
+ CURSES_INCLUDE_DIRS
+ CURSES_LIBRARIES
+ PANEL_LIBRARIES)
+ if(CURSES_FOUND AND PANEL_LIBRARIES)
+ mark_as_advanced(CURSES_INCLUDE_DIRS CURSES_LIBRARIES PANEL_LIBRARIES)
+ endif()
+endif()
+
diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
index 16465ded0522..3fc466b8f35c 100644
--- a/lldb/cmake/modules/LLDBConfig.cmake
+++ b/lldb/cmake/modules/LLDBConfig.cmake
@@ -18,39 +18,43 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
"`CMakeFiles'. Please delete them.")
endif()
-set(default_enable_python ON)
-set(default_enable_lua OFF) # Experimental
-set(default_enable_libedit ON)
-set(default_enable_curses ON)
-
-# Temporarily support the old LLDB_DISABLE_* variables
-if (DEFINED LLDB_DISABLE_PYTHON)
- if (LLDB_DISABLE_PYTHON)
- set(default_enable_python OFF)
- endif()
+set(LLDB_LINKER_SUPPORTS_GROUPS OFF)
+if (LLVM_COMPILER_IS_GCC_COMPATIBLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
+ # The Darwin linker doesn't understand --start-group/--end-group.
+ set(LLDB_LINKER_SUPPORTS_GROUPS ON)
endif()
-if(DEFINED LLVM_ENABLE_LIBEDIT AND NOT LLVM_ENABLE_LIBEDIT)
- set(default_disable_libedit ON)
-endif()
+macro(add_optional_dependency variable description package found)
+ set(${variable} "Auto" CACHE STRING "${description} On, Off or Auto (default)")
+ string(TOUPPER "${${variable}}" ${variable})
+
+ if("${${variable}}" STREQUAL "AUTO")
+ set(maybe_required)
+ elseif(${${variable}})
+ set(maybe_required REQUIRED)
+ else()
+ set(${variable} OFF PARENT_SCOPE)
+ return()
+ endif()
+
+ find_package(${package} ${maybe_required})
+ set(${variable} "${${found}}")
+endmacro()
+
+add_optional_dependency(LLDB_ENABLE_LIBEDIT "Enable editline support." LibEdit libedit_FOUND)
+add_optional_dependency(LLDB_ENABLE_CURSES "Enable curses support." CursesAndPanel CURSESANDPANEL_FOUND)
+add_optional_dependency(LLDB_ENABLE_LZMA "Enable LZMA compression support." LibLZMA LIBLZMA_FOUND)
+add_optional_dependency(LLDB_ENABLE_LUA "Enable Lua scripting support." Lua LUA_FOUND)
-if(CMAKE_SYSTEM_NAME MATCHES "Windows")
- set(default_enable_libedit OFF)
- set(default_enable_curses OFF)
-elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
+set(default_enable_python ON)
+
+if(CMAKE_SYSTEM_NAME MATCHES "Android")
set(default_enable_python OFF)
- set(default_enable_lua OFF)
- set(default_enable_libedit OFF)
- set(default_enable_curses OFF)
elseif(IOS)
set(default_enable_python OFF)
- set(default_enable_lua OFF)
endif()
option(LLDB_ENABLE_PYTHON "Enable Python scripting integration." ${default_enable_python})
-option(LLDB_ENABLE_PYTHON "Enable Lua scripting integration." ${default_enable_lua})
-option(LLDB_ENABLE_LIBEDIT "Enable the use of editline." ${default_enable_libedit})
-option(LLDB_ENABLE_CURSES "Enable Curses integration." ${default_enable_curses})
option(LLDB_RELOCATABLE_PYTHON "Use the PYTHONHOME environment variable to locate Python." OFF)
option(LLDB_USE_SYSTEM_SIX "Use six.py shipped with system and do not install a copy of it" OFF)
option(LLDB_USE_ENTITLEMENTS "When codesigning, use entitlements if available" ON)
@@ -113,15 +117,9 @@ if ((NOT MSVC) OR MSVC12)
add_definitions( -DHAVE_ROUND )
endif()
-if (LLDB_ENABLE_LUA)
- find_package(Lua REQUIRED)
-endif()
-
+# Check if we libedit capable of handling wide characters (built with
+# '--enable-widec').
if (LLDB_ENABLE_LIBEDIT)
- find_package(LibEdit REQUIRED)
-
- # Check if we libedit capable of handling wide characters (built with
- # '--enable-widec').
set(CMAKE_REQUIRED_LIBRARIES ${libedit_LIBRARIES})
set(CMAKE_REQUIRED_INCLUDES ${libedit_INCLUDE_DIRS})
check_symbol_exists(el_winsertstr histedit.h LLDB_EDITLINE_USE_WCHAR)
@@ -137,7 +135,6 @@ if (LLDB_ENABLE_LIBEDIT)
set(CMAKE_EXTRA_INCLUDE_FILES)
endif()
-
# On Windows, we can't use the normal FindPythonLibs module that comes with CMake,
# for a number of reasons.
# 1) Prior to MSVC 2015, it is only possible to embed Python if python itself was
@@ -398,12 +395,9 @@ endif()
set(LLDB_VERSION "${LLDB_VERSION_MAJOR}.${LLDB_VERSION_MINOR}.${LLDB_VERSION_PATCH}${LLDB_VERSION_SUFFIX}")
message(STATUS "LLDB version: ${LLDB_VERSION}")
-find_package(LibLZMA)
-cmake_dependent_option(LLDB_ENABLE_LZMA "Support LZMA compression" ON "LIBLZMA_FOUND" OFF)
if (LLDB_ENABLE_LZMA)
include_directories(${LIBLZMA_INCLUDE_DIRS})
endif()
-llvm_canonicalize_cmake_booleans(LLDB_ENABLE_LZMA)
include_directories(BEFORE
${CMAKE_CURRENT_BINARY_DIR}/include
@@ -493,14 +487,6 @@ else()
set(LLDB_CAN_USE_DEBUGSERVER OFF)
endif()
-if (LLDB_ENABLE_CURSES)
- find_package(Curses REQUIRED)
- find_library(CURSES_PANEL_LIBRARY NAMES panel DOC "The curses panel library")
- if (NOT CURSES_PANEL_LIBRARY)
- message(FATAL_ERROR "A required curses' panel library not found.")
- endif ()
-endif ()
-
if ((CMAKE_SYSTEM_NAME MATCHES "Android") AND LLVM_BUILD_STATIC AND
((ANDROID_ABI MATCHES "armeabi") OR (ANDROID_ABI MATCHES "mips")))
add_definitions(-DANDROID_USE_ACCEPT_WORKAROUND)
diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt
index ff2355a39275..c4be006d1a11 100644
--- a/lldb/source/Core/CMakeLists.txt
+++ b/lldb/source/Core/CMakeLists.txt
@@ -10,7 +10,7 @@ set(LLDB_CURSES_LIBS)
set(LLDB_LIBEDIT_LIBS)
if (LLDB_ENABLE_CURSES)
- list(APPEND LLDB_CURSES_LIBS ${CURSES_LIBRARIES} ${CURSES_PANEL_LIBRARY})
+ list(APPEND LLDB_CURSES_LIBS ${CURSES_LIBRARIES} ${PANEL_LIBRARIES})
if(LLVM_ENABLE_TERMINFO AND HAVE_TERMINFO)
list(APPEND LLDB_CURSES_LIBS ${TERMINFO_LIBS})
endif()
@@ -103,5 +103,5 @@ if (LLDB_ENABLE_LIBEDIT)
endif()
if (LLDB_ENABLE_CURSES)
- target_include_directories(lldbCore PRIVATE ${CURSES_INCLUDE_DIR})
+ target_include_directories(lldbCore PRIVATE ${CURSES_INCLUDE_DIRS})
endif()
diff --git a/lldb/test/CMakeLists.txt b/lldb/test/CMakeLists.txt
index b22ef6b79d50..4d9dfa561782 100644
--- a/lldb/test/CMakeLists.txt
+++ b/lldb/test/CMakeLists.txt
@@ -145,6 +145,7 @@ endif()
llvm_canonicalize_cmake_booleans(
LLDB_ENABLE_PYTHON
LLDB_ENABLE_LUA
+ LLDB_ENABLE_LZMA
LLVM_ENABLE_ZLIB
LLVM_ENABLE_SHARED_LIBS
LLDB_IS_64_BITS)
More information about the lldb-commits
mailing list