diff options
Diffstat (limited to 'makefile')
-rw-r--r-- | makefile | 131 |
1 files changed, 118 insertions, 13 deletions
@@ -1,13 +1,118 @@ -
-
-bin/c_lexer :
- echo "No current build commands for C lexer."
- exit 1
-
-bin/c_parser :
- echo "No current build commands for C parser."
- exit 1
-
-bin/c_compiler :
- echo "No current build commands for C compile."
- exit 1
+CC := g++ # this is the main compiler +# CC := clang --analyze # and comment out the linker last line + +CFLAGS := -g -Wall -Wextra -Wpedantic -std=c++11 + +LEXINC := -Ic_lexer/include +LEXBUILDDIR := c_lexer/build +LEXSRCDIR := c_lexer/src + +PARINC := -Ic_parser/include +PARBUILDDIR := c_parser/build +PARSRCDIR := c_parser/src + +COMPINC := -Ic_compiler/include +COMPBUILDDIR := c_compiler/build +COMPSRCDIR := c_compiler/src + +all : bin/c_lexer bin/c_parser + +# Make the c_lexer +bin/c_lexer : $(LEXBUILDDIR)/main.o $(LEXBUILDDIR)/c_lexer.o $(LEXBUILDDIR)/c_lexer.yy.o + @echo "Linking..." + @echo " mkdir -p bin"; mkdir -p bin + @echo " $(CC) $^ -o $@"; $(CC) $^ -o $@ + +$(LEXBUILDDIR)/%.o : $(LEXSRCDIR)/%.cpp + @echo "Building sources..." + @echo " mkdir -p $(LEXBUILDDIR)"; mkdir -p $(LEXBUILDDIR) + @echo " $(CC) $(CFLAGS) $(LEXINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(LEXINC) -c -o $@ $< + +$(LEXBUILDDIR)/%.yy.o : $(LEXSRCDIR)/%.yy.cpp + @echo "Building lex..." + @echo " mkdir -p $(LEXBUILDDIR)"; mkdir -p $(LEXBUILDDIR) + @echo " $(CC) $(CFLAGS) $(LEXINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(LEXINC) -c -o $@ $< + +$(LEXSRCDIR)/c_lexer.yy.cpp : $(LEXSRCDIR)/c_lexer.flex + @echo "Creating flex" + @echo " flex -o $@ $<"; flex -o $@ $< + +# Make the c_parser +bin/c_parser : $(PARBUILDDIR)/parser_main.o $(PARBUILDDIR)/c_parser.tab.o $(PARBUILDDIR)/c_lexer.yy.o + @echo "Linking..." + @echo " mkdir -p bin"; mkdir -p bin + @echo " $(CC) $^ -o $@"; $(CC) $^ -o $@ + +$(PARBUILDDIR)/%.o : $(PARSRCDIR)/%.cpp + @echo "Building sources..." + @echo " mkdir -p $(PARBUILDDIR)"; mkdir -p $(PARBUILDDIR) + @echo " $(CC) $(CFLAGS) $(PARINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(PARINC) -c -o $@ $< + +$(PARBUILDDIR)/%.yy.o : $(PARSRCDIR)/%.yy.cpp + @echo "Building lex..." + @echo " mkdir -p $(PARBUILDDIR)"; mkdir -p $(PARBUILDDIR) + @echo " $(CC) $(CFLAGS) $(PARINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(PARINC) -c -o $@ $< + +$(PARBUILDDIR)/c_parser.tab.o : $(PARSRCDIR)/c_parser.tab.cpp + @echo "Building yacc..." + @echo " mkdir -p $(PARBUILDDIR)"; mkdir -p $(PARBUILDDIR) + @echo " $(CC) $(CFLAGS) $(PARINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(PARINC) -c -o $@ $< + +$(PARSRCDIR)/c_lexer.yy.cpp : $(PARSRCDIR)/c_lexer.flex + @echo "Creating lex..." + @echo " flex -o $@ $<"; flex -o $@ $< + +$(PARSRCDIR)/c_parser.tab.cpp $(PARSRCDIR)/c_parser.tab.hpp : $(PARSRCDIR)/c_parser.y + @echo "Creating yacc..." + @echo " bison -v -d $< -o $(PARSRCDIR)/c_parser.tab.cpp"; bison -v -d $< -o $(PARSRCDIR)/c_parser.tab.cpp + +# Make the c_parser +bin/c_compiler: $(COMPBUILDDIR)/compiler_main.o $(COMPBUILDDIR)/statement.o \ + $(COMPBUILDDIR)/function.o $(COMPBUILDDIR)/expression.o \ + $(COMPBUILDDIR)/translation_unit.o \ + $(COMPBUILDDIR)/declaration.o $(COMPBUILDDIR)/type.o \ + $(COMPBUILDDIR)/c_parser.tab.o $(COMPBUILDDIR)/c_lexer.yy.o + @echo "Linking..." + @echo " mkdir -p bin"; mkdir -p bin + @echo " $(CC) $^ -o $@"; $(CC) $^ -o $@ + +$(COMPBUILDDIR)/%.o : $(COMPSRCDIR)/%.cpp + @echo "Building sources..." + @echo " mkdir -p $(COMPBUILDDIR)"; mkdir -p $(COMPBUILDDIR) + @echo " $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $< + +$(COMPBUILDDIR)/%.yy.o : $(COMPSRCDIR)/%.yy.cpp + @echo "Building lex..." + @echo " mkdir -p $(COMPBUILDDIR)"; mkdir -p $(COMPBUILDDIR) + @echo " $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $< + +$(COMPBUILDDIR)/c_parser.tab.o : $(COMPSRCDIR)/c_parser.tab.cpp + @echo "Building yacc..." + @echo " mkdir -p $(COMPBUILDDIR)"; mkdir -p $(COMPBUILDDIR) + @echo " $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $<"; $(CC) $(CFLAGS) $(COMPINC) -c -o $@ $< + +$(COMPSRCDIR)/c_lexer.yy.cpp : $(COMPSRCDIR)/c_lexer.flex + @echo "Creating lex..." + @echo " flex -o $@ $<"; flex -o $@ $< + +$(COMPSRCDIR)/c_parser.tab.cpp $(COMPSRCDIR)/c_parser.tab.hpp : $(COMPSRCDIR)/c_parser.y + @echo "Creating yacc..." + @echo " bison -v -d $< -o $(COMPSRCDIR)/c_parser.tab.cpp"; bison -v -d $< -o $(COMPSRCDIR)/c_parser.tab.cpp + +clean : + @echo "Cleaning..." + rm -rf bin + rm -rf $(LEXBUILDDIR) + rm -f $(LEXSRCDIR)/c_lexer.yy.cpp + rm -rf $(PARBUILDDIR) + rm -f $(PARSRCDIR)/c_lexer.yy.cpp + rm -f $(PARSRCDIR)/c_parser.tab.cpp + rm -f $(PARSRCDIR)/c_parser.tab.hpp + rm -f $(PARSRCDIR)/c_parser.output + rm -rf $(COMPBUILDDIR) + rm -f $(COMPSRCDIR)/c_lexer.yy.cpp + rm -f $(COMPSRCDIR)/c_parser.tab.cpp + rm -f $(COMPSRCDIR)/c_parser.tab.hpp + rm -f $(COMPSRCDIR)/c_parser.output + +.PHONY : clean |