安装&在Mac OS X上使用LLVM进行编译

时间:2016-04-12 18:10:10

标签: c++ macos makefile llvm llvm-clang

我有一个项目(可行),我试图在我的Mac上编译。它使用各种各样的东西,包括LLVM,这是我唯一没有安装过的东西。所以我按照这里的说明进行操作:http://www.isi.edu/~pedro/Teaching/CSCI565-Spring15/Projects/Project1-LLVM/LLVMInstructions-MacOSX10.9.pdf

这似乎有效,但我的makefile需要安装LLVM 3.3,而该教程适用于LLVM 3.5。现在,在安装之前和之后,当我运行make时,我收到以下错误:

$ make
compiling cpp yacc file: expr-codegen.y
output file: expr-codegen
bison -b expr-codegen -d expr-codegen.y
/bin/mv -f expr-codegen.tab.c expr-codegen.tab.cc
flex -oexpr-codegen.lex.cc expr-codegen.lex
clang -g -c decaf-stdlib.c
clang++ -o ./expr-codegen expr-codegen.tab.cc expr-codegen.lex.cc decaf-stdlib.o `llvm-config-3.3 --cppflags --ldflags --libs core jit native` -ly -ll
/bin/sh: llvm-config-3.3: command not found
In file included from expr-codegen.y:6:
./decafdefs.h:5:10: fatal error: 'llvm/IR/DerivedTypes.h' file not found
#include "llvm/IR/DerivedTypes.h"
         ^
1 error generated.
In file included from expr-codegen.lex:2:
./decafdefs.h:5:10: fatal error: 'llvm/IR/DerivedTypes.h' file not found
#include "llvm/IR/DerivedTypes.h"
         ^
1 error generated.
make: *** [expr-codegen] Error 1

这是我的makefile:

lexlib=l
yacclib=y
bindir=.
rm=/bin/rm -f
mv=/bin/mv -f
targets=
#cpptargets=type-inherit decaf-sym
#llvmtargets=factorial
#llvmcpp=sexpr2-codegen expr-codegen
#llvmfiles=rec_add
#llvmcpp=decaf-sym expr-codegen sexpr2-codegen
llvmcpp=expr-codegen

all: $(targets) $(cpptargets) $(llvmfiles) $(llvmcpp)

$(targets): %: %.y
    @echo "compiling yacc file:" $<
    @echo "output file:" $@
    bison -o$@.tab.c -d $<
    flex -o$@.lex.c $@.lex
    clang -o $(bindir)/$@ $@.tab.c $@.lex.c -l$(yacclib) -l$(lexlib)
    $(rm) $@.tab.c $@.tab.h $@.lex.c

$(cpptargets): %: %.y
    @echo "compiling cpp yacc file:" $<
    @echo "output file:" $@
    bison -b $@ -d $<
    $(mv) $@.tab.c $@.tab.cc
    flex -o$@.lex.cc $@.lex
    clang++ -o $(bindir)/$@ $@.tab.cc $@.lex.cc -l$(yacclib) -l$(lexlib)
    $(rm) $@.tab.h $@.tab.cc $@.lex.cc

$(llvmcpp): %: %.y
    @echo "compiling cpp yacc file:" $<
    @echo "output file:" $@
    bison -b $@ -d $<
    $(mv) $@.tab.c $@.tab.cc
    flex -o$@.lex.cc $@.lex
    clang -g -c decaf-stdlib.c
    clang++ -o $(bindir)/$@ $@.tab.cc $@.lex.cc decaf-stdlib.o `llvm-config-3.3 --cppflags --ldflags --libs core jit native` -l$(yacclib) -l$(lexlib)
    $(rm) $@.tab.h $@.tab.cc $@.lex.cc

$(llvmtargets): %: %.ll
    @echo "using llvm to compile file:" $<
    llvm-as $<
    `llvm-config-3.3 --bindir`/llc -disable-cfi $@.bc
    clang $@.s ../decaf-stdlib.c -o $(bindir)/$@

$(llvmfiles): %: %.ll
    @echo "using llvm to compile file:" $<
    llvm-as $<
    `llvm-config-3.3 --bindir`/llc -disable-cfi $@.bc
    clang $@.s decaf-stdlib.c -o $(bindir)/$@

clean:
    $(rm) $(targets) $(cpptargets) $(llvmtargets) $(llvmcpp) $(llvmfiles)
    $(rm) *.tab.h *.tab.c *.lex.c
    $(rm) *.bc *.s *.o
    $(rm) -r *.dSYM

作为LLVM的新手,我不知道为什么我无法让编译器识别LLVM并使用它。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

来自llvm-config文档:

    dzur:~/tmp> llvm-config
usage: llvm-config <OPTION>... [<COMPONENT>...]

Get various configuration information needed to compile programs which use
LLVM.  Typically called from 'configure' scripts.  Examples:
  llvm-config --cxxflags
  llvm-config --ldflags
  llvm-config --libs engine bcreader scalaropts

这几乎是你所需要的:)