From 8a86db2908622d92ad08b0d36d4fd1e75b43647f Mon Sep 17 00:00:00 2001 From: xwx1135370 Date: Tue, 18 Jul 2023 16:40:23 +0800 Subject: [PATCH] * Embed libedit and ncurses for linux and mac (Update Readme and add options) Issue: https://gitee.com/openharmony/third_party_llvm-project/issues/I7LIV0 Test: LLDB enables libedit and ncurses testing Signed-off-by: xwx1135370 --- lldb/README_zh.md | 44 +++++++++++++++++++++++++- llvm-build/README.md | 3 ++ llvm-build/build.py | 73 ++++++++++++++++++++++++++++++++------------ 3 files changed, 100 insertions(+), 20 deletions(-) diff --git a/lldb/README_zh.md b/lldb/README_zh.md index 4b0db70195a7..064bffae1cc7 100644 --- a/lldb/README_zh.md +++ b/lldb/README_zh.md @@ -1312,6 +1312,48 @@ LLDB支持使用`history `命令处理会话中命令的历史记 (lldb) history -s 2 -e 3 ``` +### 3.16.5 命令自动联想补齐 + +LLDB支持输入命令起始字符,按`Tab`键实现命令自动联想补齐。 + +> 说明 +> +> - 需要通过编译LLVM工程时添加`--build-libedit`参数使能此功能。建议和`--build-ncurses`参数一起使用。 +> - 命令自动联想补齐功能适配平台有:Linux, Mac x86-64 和 M1。 + +- 输入pl,按`Tab`键实现命令自动联想。(LLDB命令中包含多个以"pl"开头的命令) + + ``` + (lldb) pl + Available completions: + platform -- Commands to manage and create platforms. + plugin -- Commands for managing LLDB plugins. + (lldb) pl + ``` + +- 输入his,按`Tab`键实现命令自动补全。(LLDB命令中仅包含一个以"his"开头的命令) + + ``` + (lldb) history + 0: history + ``` + +### 3.16.6 图形化界面 + +LLDB支持使用`gui`命令进入图形化调试界面。 + +> 说明 +> +> - 需要通过编译LLVM工程时添加`--build-ncurses`参数使能此功能。 +> +> - 图形化调试界面适配平台有:Linux, Mac x86-64 和 M1。 + +- 进入图形化调试界面。 + + ``` + (lldb) gui + ``` + # 4. windows平台远程调试 ## 4.1 可执行文件调试 @@ -1792,7 +1834,7 @@ script lldb_python.main() ``` ### 5.2.1 查看参数 - + 查看脚本使用的 `lldb-server` 启动和连接参数: ``` diff --git a/llvm-build/README.md b/llvm-build/README.md index f7be8cf15d39..4ee131959712 100644 --- a/llvm-build/README.md +++ b/llvm-build/README.md @@ -59,6 +59,9 @@ build.py options: --no-lto # disable LTO optimization when build toolchain --build-instrumented # enable instrument pgo when build toolchain --xunit-xml-output # specify LLVM unit test XML report path +--build-python # build python (not using prebuilt one, currently effective for Windows) +--build-ncurses # build ncurses tool for linux, Mac x86-64 or M1 +--build-libedit # build libedit tool for linux, Mac x86-64 or M1 --no-build # optional, skip some targets windows libs diff --git a/llvm-build/build.py b/llvm-build/build.py index 8a4df49f85a2..1c0399716e1d 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -54,6 +54,8 @@ class BuildConfig(): self.no_build_riscv64 = args.skip_build or args.no_build_riscv64 self.no_build_mipsel = args.skip_build or args.no_build_mipsel self.no_build_x86_64 = args.skip_build or args.no_build_x86_64 + self.build_ncurses = args.build_ncurses + self.build_libedit = args.build_libedit self.discover_paths() @@ -170,6 +172,18 @@ class BuildConfig(): default=False, help='Build Python (not using prebuilt one, currently effective for Windows)') + parser.add_argument( + '--build-ncurses', + action='store_true', + default=False, + help='Build ncurses tool for Linux, Mac x86-64 or M1') + + parser.add_argument( + '--build-libedit', + action='store_true', + default=False, + help='Build libedit tool for Linux, Mac x86-64 or M1') + def parse_args(self): parser = argparse.ArgumentParser(description='Process some integers.') @@ -490,14 +504,18 @@ class LlvmCore(BuildUtils): llvm_defines['COMPILER_RT_BUILD_LIBFUZZER'] = 'OFF' llvm_defines['LLVM_BUILD_EXTERNAL_COMPILER_RT'] = 'ON' llvm_defines['LLVM_ENABLE_ZSTD'] = 'OFF' - llvm_defines['LibEdit_LIBRARIES'] = os.path.join(self.get_prebuilts_dir('libedit'), 'lib', 'libedit.0.dylib') - libncurse = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libncurses.6.dylib') - libpanel = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libpanel.6.dylib') - libform = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libform.6.dylib') - ncurses_libs = ';'.join([libncurse, libpanel, libform]) - llvm_defines['CURSES_LIBRARIES'] = ncurses_libs - llvm_defines['PANEL_LIBRARIES'] = ncurses_libs llvm_defines['LLDB_PYTHON_EXT_SUFFIX'] = '.dylib' + if self.build_config.build_ncurses: + libncurse = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libncurses.6.dylib') + libpanel = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libpanel.6.dylib') + libform = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libform.6.dylib') + ncurses_libs = ';'.join([libncurse, libpanel, libform]) + llvm_defines['CURSES_LIBRARIES'] = ncurses_libs + llvm_defines['PANEL_LIBRARIES'] = ncurses_libs + + if self.build_config.build_libedit: + llvm_defines['LibEdit_LIBRARIES'] = os.path.join(self.get_prebuilts_dir('libedit'), 'lib', 'libedit.0.dylib') + def llvm_compile_linux_defines(self, llvm_defines, @@ -520,14 +538,17 @@ class LlvmCore(BuildUtils): llvm_defines['COMPILER_RT_BUILD_ORC'] = 'OFF' llvm_defines['LIBUNWIND_USE_COMPILER_RT'] = 'ON' llvm_defines['LLVM_BINUTILS_INCDIR'] = '/usr/include' - llvm_defines['LibEdit_LIBRARIES'] = os.path.join(self.get_prebuilts_dir('libedit'), 'lib', 'libedit.so.0.0.68') - libncurse = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libncurses.so.6.3') - libpanel = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libpanel.so.6.3') - libform = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libform.so.6.3') - ncurses_libs = ';'.join([libncurse, libpanel, libform]) - llvm_defines['CURSES_LIBRARIES'] = ncurses_libs - llvm_defines['PANEL_LIBRARIES'] = ncurses_libs llvm_defines['LLDB_PYTHON_EXT_SUFFIX'] = '.so' + if self.build_config.build_ncurses: + libncurse = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libncurses.so.6.3') + libpanel = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libpanel.so.6.3') + libform = os.path.join(self.get_prebuilts_dir('ncurses'), 'lib', 'libform.so.6.3') + ncurses_libs = ';'.join([libncurse, libpanel, libform]) + llvm_defines['CURSES_LIBRARIES'] = ncurses_libs + llvm_defines['PANEL_LIBRARIES'] = ncurses_libs + + if self.build_config.build_libedit: + llvm_defines['LibEdit_LIBRARIES'] = os.path.join(self.get_prebuilts_dir('libedit'), 'lib', 'libedit.so.0.0.68') if not build_instrumented and not no_lto and not debug_build: llvm_defines['LLVM_ENABLE_LTO'] = 'Thin' @@ -563,9 +584,14 @@ class LlvmCore(BuildUtils): llvm_defines['LLDB_PYTHON_EXE_RELATIVE_PATH'] = os.path.join('bin', self.build_config.LLDB_PYTHON) llvm_defines['SWIG_EXECUTABLE'] = self.find_program('swig') llvm_defines['LLDB_ENABLE_CURSES'] = 'OFF' - if llvm_defines['LLDB_ENABLE_CURSES'] == 'ON' and llvm_defines['LLDB_ENABLE_LIBEDIT'] == 'ON': - llvm_defines['LibEdit_INCLUDE_DIRS'] = os.path.join(self.get_prebuilts_dir('libedit'), 'include') + + if self.build_config.build_ncurses: + llvm_defines['LLDB_ENABLE_CURSES'] = 'ON' llvm_defines['CURSES_INCLUDE_DIRS'] = os.path.join(self.get_prebuilts_dir('ncurses'), 'include') + if self.build_config.build_libedit: + llvm_defines['LLDB_ENABLE_LIBEDIT'] = 'ON' + llvm_defines['LibEdit_INCLUDE_DIRS'] = os.path.join(self.get_prebuilts_dir('libedit'), 'include') + def llvm_compile(self, build_name, @@ -1706,7 +1732,13 @@ class LlvmPackage(BuildUtils): dylib_name = os.path.basename(lib) subprocess.check_call(["install_name_tool", "-id", "@rpath/%s" % dylib_name, lib]) - library_list = ["libedit", "libncurses", "libpanel", "libform"] + library_list = [] + + if self.build_config.build_ncurses: + library_list.extend(["libncurses", "libpanel", "libform"]) + + if self.build_config.build_libedit: + library_list.append("libedit") # Update LC_LOAD_DYLIB. The lib may already reference other libs. for dependency in dependency_list: @@ -1894,8 +1926,11 @@ def main(): if not build_config.no_build_x86_64: configs.append(('x86_64', build_utils.open_ohos_triple('x86_64'))) - llvm_libs.build_ncurses(llvm_make, llvm_install) - llvm_libs.build_libedit(llvm_make, llvm_install) + if build_config.build_ncurses: + llvm_libs.build_ncurses(llvm_make, llvm_install) + + if build_config.build_libedit: + llvm_libs.build_libedit(llvm_make, llvm_install) if build_config.do_build and need_host: llvm_core.llvm_compile( -- Gitee