1

I have a project (That works) that I'm trying to compile on my Mac. It uses a variety of things including LLVM, which was the only one I didn't have installed. So I followed the instructions here: http://www.isi.edu/~pedro/Teaching/CSCI565-Spring15/Projects/Project1-LLVM/LLVMInstructions-MacOSX10.9.pdf

This seemed to work, however my makefile required I install LLVM 3.3, while that tutorial is for LLVM 3.5. Now, both before and after installing, when I run make I get the following error:

$ 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

Here's my 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 [email protected] -d $<
    flex [email protected] [email protected]
    clang -o $(bindir)/$@ [email protected] [email protected] -l$(yacclib) -l$(lexlib)
    $(rm) [email protected] [email protected] [email protected]

$(cpptargets): %: %.y
    @echo "compiling cpp yacc file:" $<
    @echo "output file:" $@
    bison -b $@ -d $<
    $(mv) [email protected] [email protected]
    flex [email protected] [email protected]
    clang++ -o $(bindir)/$@ [email protected] [email protected] -l$(yacclib) -l$(lexlib)
    $(rm) [email protected] [email protected] [email protected]

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

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

$(llvmfiles): %: %.ll
    @echo "using llvm to compile file:" $<
    llvm-as $<
    `llvm-config-3.3 --bindir`/llc -disable-cfi [email protected]
    clang [email protected] 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

As a total newbie to LLVM I have no idea why I can't get the compiler to recognize LLVM and use it. Any help would be appreciated. Thanks.

1
  • You most likely need to tell the compiler where the header files are. Look into the -I flag. Commented Apr 12, 2016 at 18:46

1 Answer 1

1

From the llvm-config documentation:

    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

Which is pretty much what you need :)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.