ARM/RaspberryPi的LLVM构建选项

Jon*_*rie 5 llvm raspberry-pi raspbian

我正在寻求澄清Raspbian上LLVM 3.2的最佳构建选项

我已经获取了3.2的LLVM源代码,我的配置是:

cd llvm-3.2.src
./configure --build=armv6-unknown-linux-gnueabi \
--host=armv6-unknown-linux-gnueabi \
--target=armv6-unknown-linux-gnueabi --with-cpu=arm1176jzf-s \
--with-float=hard --with-abi=aapcs-vfp --with-fpu=neon \
--enable-targets=arm --enable-optimized --enable-assertions
make REQUIRES_RTTI=1
sudo make install
Run Code Online (Sandbox Code Playgroud)

我听说需要花费很多时间来构建.它已经运行了几个小时,很高兴让它运行.

这是一个长期构建项目,所以如果需要,我没有任何关于重做构建的疑虑:)

SK-*_*gic 8

我建议为Raspbian交叉编译LLVM.在Pi上构建它需要很长时间.

首先,使用工作root fs debootstrap(或者,只是克隆现有的Raspbian安装或解压缩下载的图像).您可能需要将一些绝对符号链接替换为relative,注意构建错误.

确保你有一个工作和最近足够的clang安装(不要忘记使用ARM目标支持构建它).

然后,使用以下CMake工具链定义交叉编译LLVM(在此阶段,您不应该根据您的根fs进行chroot!):


set(toolchain_dir /path/to/your/chroot-raspbian-armhf/ )
set(toolchain_bin_dir ${toolchain_dir}/usr/bin)
set(toolchain_inc_dir ${toolchain_dir}/usr/include) # was /include
set(toolchain_lib_dir ${toolchain_dir}/usr/lib)

set(CMAKE_SYSTEM_NAME Linux CACHE INTERNAL "system name")
set(CMAKE_SYSTEM_PROCESSOR arm CACHE INTERNAL "processor")
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_C_FLAGS "-O2 -integrated-as -target armv6-linux-gnueabihf -mfloat-abi=hard --sysroot=${toolchain_dir}" CACHE INTERNAL "c compiler flags")
set(CMAKE_CXX_FLAGS "-O2 -integrated-as -target armv6-linux-gnueabihf -mfloat-abi=hard --sysroot=${toolchain_dir}" CACHE INTERNAL "cxx compiler flags")

set(link_flags "-L${toolchain_lib_dir} -ldl")

set(CMAKE_EXE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "exe link flags")
set(CMAKE_MODULE_LINKER_FLAGS ${link_flags} CACHE INTERNAL "module link flags")
set(CMAKE_SHARED_LINKER_FLAGS ${link_flags} CACHE INTERNAL "shared link flags")
set(CMAKE_FIND_ROOT_PATH ${toolchain_lib_dir} CACHE INTERNAL "cross root directory")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE INTERNAL "")
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY CACHE INTERNAL "")
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY CACHE INTERNAL "")
Run Code Online (Sandbox Code Playgroud)

(使用cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/the/file/above.txt)

请注意,目标应该是armv6-linux-gnueabihf,而不是armv6-linux-gnueabi.