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验证同理。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐