Skip to content
Snippets Groups Projects
Makefile 3.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Very rudimentary Makefile for the llvm tutorial
    # See http://llvm.org/docs/tutorial/
    # See also http://koichitamura.blogspot.de/2011/01/since-i-went-to-held-several-weeks-ago.html
    # for a necessary "fix" (!)
    #
    # This Makefile written by Prof. R. C. Moore, fbi.h-da.de
    
    PROGS := ModuleMaker fibonacci toy2 toy3 toy4 toy5 toy6 toy7 toy8 toy9
    
    # Uncomment only one of the next two lines (choose your c++ compiler)
    # CC=g++
    CC := clang++
    
    # Now, how to compile in LLVM?
    # LLVM VERSION 3.9.1 (2017) and possibly LLVM Version 4
    # The Tutorial (Chapter 3) does it like this:
    # clang++ -g -O3 toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core` -o toy
    # based on that, and some experimentation, we got, for LLVM 3.6...
    # CFLAGS=-std=c++11 `llvm-config --cxxflags --ldflags --system-libs --libs all` -rdynamic -O3
    # Now, for llvm >= 3.7.1, further experience has brought us to....
    # At one time, we piped the output of llvm-config to sed s/no-maybe/no/ .
    # Hopefully this is no longer necessary... ?
    # (sed was used to hide an incompatibility between llvm-config and clang)
    
    LLVM_FLAGS := `llvm-config --cxxflags --ldflags --system-libs --libs all `
    
    CFLAGS :=  $(LLVM_FLAGS) -rdynamic -O3
    
    
    ## More preliminaries
    # See https://www.gnu.org/software/make/manual/html_node/Special-Targets.html
    # In this makefile, we want to keep going even if we find errors
    .IGNORE :
    
    # Further, we do not want multiple things built at once, even if make called with -j2
    .NOTPARALLEL :
    
    # Tell make that the following "targets" are "phony"
    # Cf. https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html#Phony-Targets
    .PHONY : all tests clean testclean
    
    ##  Now, the targets -- the things that will get made!
    
    all: $(PROGS)
    
    $(PROGS): %: %.cpp
    	$(CC) -g $< $(CFLAGS) -o $@
    
    clean: testclean
    	$(RM) -fv *~ $(PROGS) ModuleMaker.bc fib test8 test8.o test9
    
    testclean:
    	rm -fv *~ *.output test8.o test9
    
    testModuleMaker: ModuleMaker
    	echo && echo "Testing ModuleMaker (expect 5)...\n"
    	@./ModuleMaker >ModuleMaker.bc
    	@lli ModuleMaker.bc || echo $$?
    
    # WARNING: testFibonacci broken (with LLVM and clang 3.7.1)
    testFibonacci: fibonacci
    	echo && echo "\n===================> Testing fibonacci (expect 46368)...\n"
    	-./fibonacci
    
    test2: toy2 tests/test2.kal
    	echo && echo "\n===================> Testing toy2.. (expecting 1 error)\n"
    	-./toy2 <tests/test2.kal
    
    test3: toy3 tests/test3.kal
    	echo && echo "\n===================> Testing toy3...\n"
    	-./toy3 <tests/test3.kal
    
    test4: toy4 tests/test4.kal
    	echo && echo "\n===================> Testing toy4...\n"
    	-./toy4 <tests/test4.kal
    
    test5: toy5 tests/test5.kal
    	echo && echo "\n===================> Testing toy5...\n"
    	-./toy5 <tests/test5.kal
    
    test6: toy6 tests/test6.kal
    	echo && echo "\n===================> Testing toy6...\n"
    	-./toy6 <tests/test6.kal
    
    test7: toy7 tests/test7.kal
    	echo && echo "\n===================> Testing toy7...\n"
    	-./toy7 <tests/test7.kal
    
    test8: toy8 tests/test8.kal toy8.cpp
    	echo && echo "\n===================> Testing toy8... (expect 42, of course)\n"
    	-./toy8 <tests/test8.kal
    	-clang++ tests/test8.cpp test8.o -o test8
    	-./test8
    
    test9: toy9 tests/test9.kal
    	echo && echo "\n===================> Testing toy9...\n"
    	-./toy9 <tests/test9.kal |& clang -x ir - -o test9
    	-./test9
    
    # WARNING: test9 removed since broken (with LLVM and clang <= 3.9)
    # NOTE: fibonacci added BACK to tests since it's working again!
    tests: testModuleMaker testFibonacci test2 test3 test4 test5 test6 test7 test8