如何使用LLVM 3.4构建coreutils

时间:2014-11-11 12:59:15

标签: llvm gnu-coreutils

我正在尝试使用LLVM 3.4工具链构建GNU Coreutils 8.23。一个非常重要的方面是我还需要所有coreutils的LLVM字节码。因此,我需要在CFLAGS中加入-emit-llvm。因此,我从coreutils Makefile的LINK变量中删除了$(CFLAGS)。然后,我运行以下命令:

make CC=/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang 
CCLD=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link 
IGNORE_UNUSED_LIBRARIES_CFLAGS= CFLAGS="-emit-llvm -S" 
VERBOSE=1 AM_CFLAGS= AM_LDFLAGS= 
AR=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ar 
RANLIB=/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-ranlib

我收到以下错误:

/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: src/libver.a:1:2:    error: expected integer
!<arch>
 ^
/home/user/llvm-3.4.2/build/Release+Asserts/bin/llvm-link: error loading file 'src/libver.a'

有关如何使其发挥作用的任何想法?

2 个答案:

答案 0 :(得分:1)

试试这个。

export CC="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang"
export CXX="/home/user/llvm-3.4.2/build/Release+Asserts/bin/clang++" 

确保这是编译器工具链所在的位置。

然后在coreutils目录中运行./configure(在此运行./bootstrap之前,如果您还没有运行它)。运行./configure检查clang是否可以正确编译并创建具有正确配置的Makefile

然后按照指示执行makemake install

答案 1 :(得分:0)

llvm-link无法读取lib文件'.a'。 一个可能的非正式黑客可能是找出生成这个lib的Makefile,然后让

AR = llvm-link, ar option = -o(i.e. change ar rv to llvm-link -o), 

并在编译时禁用ranlib命令(如果使用llvm-link则不需要ranlib)。

然后生成的'.a'文件是一个拼接的bc文件,这个'.a'文件应该由你正在调用的llvm-link命令接受