OH6.0-Release的lldb三方库编译指南编译文档
1.拷贝
将lldb.sh拷贝到用户的编译目录下
2.修改
1.打开编译脚本lldb.sh
2.修改“用户配置路径”

3.编译
进入目录下,执行编译
chmod +x lldb.sh
./lldb.sh
编译脚本:
#!/bin/bash
set -e
# 用户配置路径
# -----------------------------------------------------------
# 工具链路径
CLANG_BIN="$HOME/opt/native/llvm/bin"
LLVM_BIN="$HOME/opt/native/llvm/bin"
# 系统根目录
SYSROOT_PATH="$HOME/opt/native/sysroot"
# -----------------------------------------------------------
# 临时构建目录(编译完成后自动删除)
WORK_DIR="$(pwd)"
TEMP_DIR="${WORK_DIR}/temp_build"
# 创建临时目录
mkdir -p "${TEMP_DIR}" \
cd "${TEMP_DIR}"
# 编译 libxml2 (armv8)
(
echo "Building libxml2 for armv8..."
LIBXML2_VER="2.9.4"
LIBXML2_TAR="libxml2-${LIBXML2_VER}.tar.gz"
if [ ! -f "${LIBXML2_TAR}" ];then
wget http://xmlsoft.org/sources/${LIBXML2_TAR}
fi
tar -xzf ${LIBXML2_TAR}
cd libxml2-${LIBXML2_VER}
export CC="${CLANG_BIN}/aarch64-unknown-linux-ohos-clang"
export CXX="${CLANG_BIN}/aarch64-unknown-linux-ohos-clang++"
export AR="${LLVM_BIN}/llvm-ar"
export RANLIB="${LLVM_BIN}/llvm-ranlib"
./configure --prefix="${PWD}/../../out/armv8" --host=aarch64-linux --without-python --without-zlib
make -j$(nproc)
make install
make distclean
cd ..
)
# 编译 libxml2 (armv7)
(
echo "Building libxml2 for armv7..."
LIBXML2_VER="2.9.4"
cd libxml2-${LIBXML2_VER}
export CC="${CLANG_BIN}/armv7-unknown-linux-ohos-clang"
export CXX="${CLANG_BIN}/armv7-unknown-linux-ohos-clang++"
export AR="${LLVM_BIN}/llvm-ar"
export RANLIB="${LLVM_BIN}/llvm-ranlib"
./configure --prefix="${PWD}/../../out/armv7" --host=armv7-linux --without-python --without-zlib
make -j$(nproc)
make install
cd ..
)
# 编译 lldb (armv8)
(
unset CC
unset CXX
unset AR
unset RANLIB
echo "Building llvm for armv8..."
LLVM_VER="15.0.4"
pkg="llvm-project-${LLVM_VER}.src"
tar_file="${pkg}.tar.xz"
if [ ! -f "${tar_file}" ];then
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.4/llvm-project-15.0.4.src.tar.xz
fi
tar -xf "${tar_file}"
cd ${pkg}
#本机编译clang lldb工具
mkdir host-build && cd host-build
cmake -S ../llvm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TARGETS_TO_BUILD=X86 \
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
-DLLDB_ENABLE_PYTHON=Off \
-DLLVM_ENABLE_PROJECTS="clang;lldb"
make -j$(nproc) llvm-tblgen clang-tblgen lldb-tblgen
cd ..
#交叉编译armv8
mkdir build && cd build
cmake -S ../llvm \
-DCMAKE_C_COMPILER="${CLANG_BIN}/aarch64-unknown-linux-ohos-clang" \
-DCMAKE_CXX_COMPILER="${CLANG_BIN}/aarch64-unknown-linux-ohos-clang++" \
-DCMAKE_INSTALL_PREFIX=${PWD}/../../../out/armv8 \
-DLLVM_ENABLE_PROJECTS="lldb;clang;lld" \
-DCMAKE_SYSTEM_NAME=Linux \
-DLLVM_TARGETS_TO_BUILD="AArch64" \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TABLEGEN=${PWD}/../host-build/bin/llvm-tblgen \
-DCLANG_TABLEGEN=${PWD}/../host-build/bin/clang-tblgen \
-DLLDB_TABLEGEN=${PWD}/../host-build/bin/lldb-tblgen \
-DLIBXML2_INCLUDE_DIR="$PWD/../../../out/armv8/include\libxml2" \
-DLIBXML2_LIBRARY="$PWD/../../../out/armv8/lib/libxml2.so" \
-DLLDB_ENABLE_PYTHON=0 \
-DLLDB_ENABLE_LIBEDIT=0 \
-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-unknown-linux-ohos \
-DLLVM_HOST_TRIPLE=aarch64-unknown-linux-ohos \
-DLLDB_ENABLE_CURSES=0
make -j$(nproc)
make install
rm -rf *
cmake -S ../llvm \
-DCMAKE_C_COMPILER="${CLANG_BIN}/armv7-unknown-linux-ohos-clang" \
-DCMAKE_CXX_COMPILER="${CLANG_BIN}/armv7-unknown-linux-ohos-clang++" \
-DCMAKE_INSTALL_PREFIX=${PWD}/../../../out/armv7 \
-DLLVM_ENABLE_PROJECTS="lldb;clang;lld" \
-DCMAKE_SYSTEM_NAME=Linux \
-DLLVM_TARGETS_TO_BUILD="ARM" \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_TABLEGEN=${PWD}/../host-build/bin/llvm-tblgen \
-DCLANG_TABLEGEN=${PWD}/../host-build/bin/clang-tblgen \
-DLLDB_TABLEGEN=${PWD}/../host-build/bin/lldb-tblgen \
-DLIBXML2_INCLUDE_DIR="$PWD/../../../out/armv7/include\libxml2" \
-DLIBXML2_LIBRARY="$PWD/../../../out/armv7/lib/libxml2.so" \
-DLLDB_ENABLE_PYTHON=0 \
-DLLDB_ENABLE_LIBEDIT=0 \
-DLLDB_ENABLE_CURSES=0 \
-DLLVM_DEFAULT_TARGET_TRIPLE=arm-unknown-linux-ohos \
-DLLVM_HOST_TRIPLE=arm-unknown-linux-ohos
make -j$(nproc)
make install
)
cd ${PWD}/../out
tar -cvzf armv8.tar.gz armv8/bin/lldb armv8/bin/lldb-server armv8/lib/liblldb.so* armv8/lib/libxml2.so*
tar -cvzf armv7.tar.gz armv7/bin/lldb armv7/bin/lldb-server armv7/lib/liblldb.so* armv7/lib/libxml2.so*
echo "---------------------------------------------------------"
echo "双架构编译完成"
echo "armv8安装路径:${PWD}/../out/armv8"
echo "armv7安装路径:${PWD}/../out/armv7"
echo "临时目录已自动清理"
验证测试:
将/out/下生成的文件压缩后armv7.tar
推送到开发板/data/目录,命令如下:
hdc shell mount -o rw,remount /
hdc file send armv7.tar.gz /data/
hdc进入到data目录解压armv7.tar, cd到armv7目录下,可执行文件在bin下
tar -xvzf armv7.tar.gz
cd 到bin目录下
chmod +x * 可执行权限
export LD_LIBRARY_PATH=/data/armv7/lib 设置临时环境变量
编译测试用例:
/home/kjj/opt/native/llvm/bin/armv7-unknown-linux-ohos-clang test_lldb.c -g -o test_lldb_armv7
/home/kjj/opt/native/llvm/bin/aarch64-unknown-linux-ohos-clang test_lldb.c -g -o test_lldb_armv8

需要有with_debug_info,编译完成后一起推入开发板。
2.开发板上测试 lldb
# ./lldb test_lldb
(lldb) target create "test_lldb"
(lldb) b main

(lldb) run
(lldb) continue

2.开发板上启动 lldb-server
开启两个hdc窗口一个运行lldb 一个运行lldb-server
killall lldb-server
./lldb-server gdbserver 0.0.0.0:12345 /data/armv8/bin/test_lldb &

开发板上启动 lldb调试
./lldb
(lldb) target create /data/armv8/bin/test_lldb
(lldb) gdb-remote 127.0.0.1:12345 # 连接 gdbserver

(lldb) breakpoint set --name main # 设置 main 函数断点
(lldb) continue # 运行到断点处

Armv7验证同理。
更多推荐

所有评论(0)