clang+llvm+linux x86平台交叉编译arm64

下载工具链

#! /bin/bash
workPATH=`pwd`/toolchain
mkdir -p $workPATH
cd $workPATH

URL_LLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz"
URL_GCC_LINARO="http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
URL_SYSROOT="http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu.tar.xz"

FILENAME_LLVM="clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz"
FILENAME_GCC_LINARO="gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
FILENAME_SYSROOT="sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu.tar.xz"

wget ${URL_LLVM} -O ${FILENAME_LLVM}
wget ${URL_GCC_LINARO} -O ${FILENAME_GCC_LINARO}
wget ${URL_SYSROOT} -O ${FILENAME_SYSROOT}

tar -xvf ${FILENAME_LLVM}
tar -xvf ${FILENAME_GCC_LINARO}
tar -xvf ${FILENAME_SYSROOT}

cmake交叉编译文件 toolchain.cmake

clang 加上 -v 可以查看编译的详细信息

SET(ARCH aarch64)
SET(COMPILER CLANG)
SET(CMAKE_SYSTEM_NAME Linux )
SET(CMAKE_SYSTEM_PROCESSOR arm)

SET (CMAKE_C_COMPILER_WORKS 1)
SET (CMAKE_CXX_COMPILER_WORKS 1)

SET(triple aarch64-linux-gnu) 
SET(CMAKE_C_COMPILER_TARGET ${triple})
SET(CMAKE_CXX_COMPILER_TARGET ${triple})

SET(GCC_LINARO_TOOLCHAIN_ROOT "/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu")
SET(CMAKE_SYSROOT  "/***/sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu")

SET(CLANG_TOOLCHAIN_ROOT /***/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04)

SET(CMAKE_C_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang CACHE PATH "CMake C compiler")
SET (CMAKE_C_FLAGS                "${CMAKE_C_FLAGS} -Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG          "${CMAKE_C_FLAGS_DEBUG} -g")
SET (CMAKE_C_FLAGS_MINSIZEREL     "${CMAKE_C_FLAGS_MINSIZEREL} -Os -DNDEBUG")
SET (CMAKE_CEASE                  "${CMAKE_CEASE} -O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O2 -g")

SET(CMAKE_CXX_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang++ CACHE PATH "CMake C++ compiler")
SET (CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -Wall")
SET (CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} -g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} -O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g")

set(CMAKE_AR ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-ar CACHE PATH "cross compiler ar")
set(CMAKE_RANLIB ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-ranlib CACHE PATH "cross compiler ranlib")
set(CMAKE_LINKER ${CLANG_TOOLCHAIN_ROOT}/bin/ld.lld CACHE PATH "cross compiler linker")
set(CMAKE_NM ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-nm CACHE PATH "cross compiler nm")
set(CMAKE_OBJDUMP ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-objdump CACHE PATH "cross compiler objdump")

set(CMAKE_C_FLAGS           "${MAKE_C_FLAGS} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}")
set(CMAKE_CXX_FLAGS         "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}")

# set(CMAKE_EXE_LINKER_FLAGS      "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")
# set(CMAKE_STATIC_LINKER_FLAGS   "${CMAKE_STATIC_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")
# set(CMAKE_SHARED_LINKER_FLAGS   "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")

#clang需要指定路径
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/aarch64-linux-gnu)
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1)
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include)
include_directories(/***/gl/include)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -fuse-ld=${CMAKE_LINKER} -fuse-ld=${CMAKE_LINKER}--sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}" CACHE INTERNAL "" FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=${CMAKE_LINKER}  --sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}" CACHE INTERNAL "" FORCE)

SET(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
1. 安装llvm-toolchain-7和clang-7 在x86机器上安装llvm-toolchain-7和clang-7: ``` sudo apt-get install llvm-toolchain-7 clang-7 ``` 2. 下载llvm测试套件 下载llvm测试套件: ``` svn co http://llvm.org/svn/llvm-project/test-suite/trunk llvm-test-suite ``` 3. 配置交叉编译环境 为了交叉编译arm,需要配置交叉编译环境。假设arm交叉编译器的路径为`/usr/bin/arm-linux-gnueabihf-`,则可以设置以下环境变量: ``` export CC=clang-7 export CXX=clang++-7 export PATH=/usr/bin:$PATH export LLVM_CONFIG=/usr/bin/llvm-config-7 export AR=/usr/bin/arm-linux-gnueabihf-ar export AS=/usr/bin/arm-linux-gnueabihf-as export LD=/usr/bin/arm-linux-gnueabihf-ld export NM=/usr/bin/arm-linux-gnueabihf-nm export OBJCOPY=/usr/bin/arm-linux-gnueabihf-objcopy export OBJDUMP=/usr/bin/arm-linux-gnueabihf-objdump export RANLIB=/usr/bin/arm-linux-gnueabihf-ranlib export READELF=/usr/bin/arm-linux-gnueabihf-readelf export STRIP=/usr/bin/arm-linux-gnueabihf-strip ``` 4. 编译llvm测试套件 进入llvm-test-suite目录,运行以下命令编译测试套件: ``` make LLVM_SRC_ROOT=/usr/lib/llvm-7 LLVM_BIN_ROOT=/usr/bin/ TARGETS=ARM ``` 其中,`LLVM_SRC_ROOT`和`LLVM_BIN_ROOT`分别指向llvmclang的安装路径,`TARGETS`指定编译的目标平台为ARM。 5. 运行测试 编译完成后,在`llvm-test-suite/SingleSource`目录下可以找到编译好的测试程序。将测试程序拷贝到arm平台上运行,并比较结果。 注意:在arm平台上运行测试程序时,需要将测试程序的可执行权限设置为可执行。可以使用`chmod +x <program>`命令进行设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值