|
| 1 | +#Tools |
| 2 | +CXX = g++ |
| 3 | +AR = ar |
| 4 | +LEXER_GEN = flex |
| 5 | +PARSER_GEN = bison |
| 6 | + |
| 7 | +#Whether this is a debug (symbols, no opt) or |
| 8 | +# release (no symbols, opt) build. May be |
| 9 | +# inherited from build environment. Can |
| 10 | +# override by defining below. |
| 11 | +# |
| 12 | +# Can be 'debug' or 'release' |
| 13 | +#BUILD_TYPE = release |
| 14 | + |
| 15 | +# How verbose we want the make file |
| 16 | +# 0: print nothing |
| 17 | +# 1: print high-level message |
| 18 | +# 2: print high-level message + detailed command |
| 19 | +VERBOSITY = 1 |
| 20 | + |
| 21 | + |
| 22 | +#Verbosity Configuration |
| 23 | +vecho_0 = true |
| 24 | +vecho_1 = echo |
| 25 | +vecho_2 = echo |
| 26 | +vecho = $(vecho_$(VERBOSITY)) |
| 27 | + |
| 28 | +AT_0 := @ |
| 29 | +AT_1 := @ |
| 30 | +AT_2 := |
| 31 | +AT = $(AT_$(VERBOSITY)) |
| 32 | + |
| 33 | +#Final output files |
| 34 | +EXE=blifparse_test |
| 35 | +STATIC_LIB=libblifparse.a |
| 36 | + |
| 37 | +#Flags |
| 38 | +WARN_FLAGS = -Wall -Wpointer-arith -Wcast-qual -D__USE_FIXED_PROTOTYPES__ -ansi -pedantic -Wshadow -Wcast-align -D_POSIX_SOURCE -Wno-write-strings |
| 39 | + |
| 40 | +DEP_FLAGS = -MMD -MP |
| 41 | + |
| 42 | +DEBUG_FLAGS = -g -ggdb3 -g3 -O0 -fno-inline |
| 43 | + |
| 44 | +OPT_FLAGS = -O3 |
| 45 | + |
| 46 | +ifneq (,$(findstring debug, $(BUILD_TYPE))) |
| 47 | + DEBUG_OPT_FLAGS := $(DEBUG_FLAGS) |
| 48 | +else |
| 49 | + DEBUG_OPT_FLAGS := $(OPT_FLAGS) |
| 50 | +endif |
| 51 | + |
| 52 | +INC_FLAGS = -I$(SRC_DIR) -I$(OBJ_DIR) |
| 53 | + |
| 54 | +CFLAGS = $(DEP_FLAGS) $(WARN_FLAGS) $(DEBUG_OPT_FLAGS) $(INC_FLAGS) -std=c++11 |
| 55 | + |
| 56 | +#Objects |
| 57 | +#.SUFFIXES: .o .c .y .l |
| 58 | +SRC_DIR = src |
| 59 | +OBJ_DIR = obj |
| 60 | + |
| 61 | +main_src = $(SRC_DIR)/main.cpp |
| 62 | +main_obj := $(patsubst %.cpp, %.o, $(main_src)) |
| 63 | +main_obj := $(foreach obj, $(main_obj), $(patsubst $(SRC_DIR)/%.o, $(OBJ_DIR)/%.o, $(obj))) |
| 64 | + |
| 65 | +lib_src = $(wildcard $(SRC_DIR)/blif*.cpp) |
| 66 | +lib_obj := $(patsubst %.cpp, %.o, $(lib_src)) |
| 67 | +lib_obj := $(foreach obj, $(lib_obj), $(patsubst $(SRC_DIR)/%.o, $(OBJ_DIR)/%.o, $(obj))) |
| 68 | + |
| 69 | +LEXER_SRC = $(SRC_DIR)/blif_lexer.l |
| 70 | +LEXER_GEN_SRC = $(SRC_DIR)/blif_lexer.gen.c |
| 71 | +LEXER_GEN_HDR = $(SRC_DIR)/blif_lexer.gen.h |
| 72 | +LEXER_GEN_OBJ := $(LEXER_GEN_SRC:.c=.o) |
| 73 | +LEXER_GEN_OBJ := $(foreach obj, $(LEXER_GEN_OBJ), $(patsubst $(SRC_DIR)/%.o, $(OBJ_DIR)/%.o, $(obj))) |
| 74 | + |
| 75 | +PARSER_SRC = $(SRC_DIR)/blif_parser.y |
| 76 | +PARSER_GEN_SRC = $(SRC_DIR)/blif_parser.gen.c |
| 77 | +PARSER_GEN_HDR = $(SRC_DIR)/blif_parser.gen.h |
| 78 | +PARSER_GEN_OBJ := $(PARSER_GEN_SRC:.c=.o) |
| 79 | +PARSER_GEN_OBJ := $(foreach obj, $(PARSER_GEN_OBJ), $(patsubst $(SRC_DIR)/%.o, $(OBJ_DIR)/%.o, $(obj))) |
| 80 | + |
| 81 | +OBJECTS_LIB = $(lib_obj) $(LEXER_GEN_OBJ) $(PARSER_GEN_OBJ) |
| 82 | +OBJECTS_EXE = $(main_obj) $(OBJECTS_LIB) |
| 83 | + |
| 84 | +#Dependancies |
| 85 | +DEP = $(OBJECTS_EXE:.o=.d) |
| 86 | + |
| 87 | +#Rules |
| 88 | +.PHONY: clean |
| 89 | + |
| 90 | +all: $(OBJ_DIR) $(STATIC_LIB) $(EXE) |
| 91 | + |
| 92 | +-include $(DEP) |
| 93 | + |
| 94 | +$(EXE): $(OBJECTS_EXE) |
| 95 | + @$(vecho) "Linking executable: $@" |
| 96 | + $(AT) $(CXX) $(CFLAGS) -o $@ $(OBJECTS_EXE) |
| 97 | + |
| 98 | +$(LEXER_GEN_SRC) $(LEXER_GEN_HDR): $(LEXER_SRC) |
| 99 | + @$(vecho) "Generating Lexer $(LEXER_SRC)..." |
| 100 | + @#Avoid including "unistd.h" since it is unavailable on windows |
| 101 | + $(AT) $(LEXER_GEN) --nounistd --header-file=$(LEXER_GEN_HDR) -o $(LEXER_GEN_SRC) $(LEXER_SRC) |
| 102 | + |
| 103 | +$(PARSER_GEN_SRC) $(PARSER_GEN_HDR): $(PARSER_SRC) |
| 104 | + @$(vecho) "Generating Parser $(PARSER_SRC)..." |
| 105 | + $(AT) $(PARSER_GEN) -d -o $(PARSER_GEN_SRC) $(PARSER_SRC) |
| 106 | + |
| 107 | +$(STATIC_LIB): $(OBJECTS_LIB) |
| 108 | + @$(vecho) "Linking static library: $@" |
| 109 | + $(AT) $(AR) rcs $@ $(OBJECTS_LIB) |
| 110 | + |
| 111 | +$(LEXER_GEN_OBJ): $(LEXER_GEN_SRC) $(PARSER_GEN_SRC) |
| 112 | + @$(vecho) "Compiling Lexer $<..." |
| 113 | + @#Suppress warning about unused function produced by flex |
| 114 | + $(AT) $(CXX) $(CFLAGS) -Wno-unused-function -c $< -o $@ |
| 115 | + |
| 116 | +$(PARSER_GEN_OBJ): $(PARSER_GEN_SRC) |
| 117 | + @$(vecho) "Compiling Parser $<..." |
| 118 | + $(AT) $(CXX) $(CFLAGS) -c $< -o $@ |
| 119 | + |
| 120 | +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(LEXER_GEN_HDR) $(PARSER_GEN_HDR) $(OBJ_DIR) |
| 121 | + @$(vecho) "Compiling Source $<..." |
| 122 | + $(AT) $(CXX) $(CFLAGS) -c $< -o $@ |
| 123 | + |
| 124 | +$(OBJ_DIR): |
| 125 | + @ mkdir -p $@ |
| 126 | + |
| 127 | +clean: |
| 128 | + rm -f $(OBJECTS_EXE) |
| 129 | + rm -f $(DEP) |
| 130 | + rm -rf $(OBJ_DIR) |
| 131 | + rm -f $(EXE) |
| 132 | + rm -f $(STATIC_LIB) |
| 133 | + rm -f $(LEXER_GEN_SRC) $(LEXER_GEN_HDR) |
| 134 | + rm -f $(PARSER_GEN_SRC) $(PARSER_GEN_HDR) $(SRC_DIR)/stack.hh |
0 commit comments