|
| 1 | +CXX = g++ |
| 2 | +CXXFLAGS = -std=c++17 -Wall -Wextra -g -O2 |
| 3 | +CPPFLAGS = -I./include -I./third_party/googletest/googletest/include |
| 4 | + |
| 5 | +PROJECT_ROOT = . |
| 6 | +SRC_DIR = $(PROJECT_ROOT)/src/sql_parser |
| 7 | +INCLUDE_DIR = $(PROJECT_ROOT)/include/sql_parser |
| 8 | +TEST_DIR = $(PROJECT_ROOT)/tests |
| 9 | + |
| 10 | +# Library sources |
| 11 | +LIB_SRCS = $(SRC_DIR)/arena.cpp $(SRC_DIR)/parser.cpp |
| 12 | +LIB_OBJS = $(LIB_SRCS:.cpp=.o) |
| 13 | +LIB_TARGET = $(PROJECT_ROOT)/libsqlparser.a |
| 14 | + |
| 15 | +# Google Test library |
| 16 | +GTEST_DIR = $(PROJECT_ROOT)/third_party/googletest/googletest |
| 17 | +GTEST_SRC = $(GTEST_DIR)/src/gtest-all.cc |
| 18 | +GTEST_OBJ = $(GTEST_DIR)/src/gtest-all.o |
| 19 | +GTEST_CPPFLAGS = -I$(GTEST_DIR)/include -I$(GTEST_DIR) |
| 20 | + |
| 21 | +# Test sources |
| 22 | +TEST_SRCS = $(TEST_DIR)/test_main.cpp \ |
| 23 | + $(TEST_DIR)/test_arena.cpp \ |
| 24 | + $(TEST_DIR)/test_tokenizer.cpp \ |
| 25 | + $(TEST_DIR)/test_classifier.cpp |
| 26 | +TEST_OBJS = $(TEST_SRCS:.cpp=.o) |
| 27 | +TEST_TARGET = $(PROJECT_ROOT)/run_tests |
| 28 | + |
| 29 | +.PHONY: all lib test clean |
| 30 | + |
| 31 | +all: lib test |
| 32 | + |
| 33 | +lib: $(LIB_TARGET) |
| 34 | + |
| 35 | +$(LIB_TARGET): $(LIB_OBJS) |
| 36 | + ar rcs $@ $^ |
| 37 | + @echo "Built $@" |
| 38 | + |
| 39 | +$(SRC_DIR)/%.o: $(SRC_DIR)/%.cpp |
| 40 | + $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@ |
| 41 | + |
| 42 | +# Google Test object |
| 43 | +$(GTEST_OBJ): $(GTEST_SRC) |
| 44 | + $(CXX) $(CXXFLAGS) $(GTEST_CPPFLAGS) -c $< -o $@ |
| 45 | + |
| 46 | +# Test objects |
| 47 | +$(TEST_DIR)/%.o: $(TEST_DIR)/%.cpp |
| 48 | + $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(GTEST_CPPFLAGS) -c $< -o $@ |
| 49 | + |
| 50 | +test: $(TEST_TARGET) |
| 51 | + ./$(TEST_TARGET) |
| 52 | + |
| 53 | +$(TEST_TARGET): $(TEST_OBJS) $(GTEST_OBJ) $(LIB_TARGET) |
| 54 | + $(CXX) $(CXXFLAGS) -o $@ $(TEST_OBJS) $(GTEST_OBJ) -L$(PROJECT_ROOT) -lsqlparser -lpthread |
| 55 | + |
| 56 | +clean: |
| 57 | + rm -f $(LIB_OBJS) $(LIB_TARGET) $(TEST_OBJS) $(GTEST_OBJ) $(TEST_TARGET) |
| 58 | + @echo "Cleaned." |
0 commit comments