diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..354039e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 3.1) + +if(NOT CMAKE_VERSION VERSION_LESS "3.3") + # Don't ignore visibility related properties for non-SHARED targets + cmake_policy(SET CMP0063 NEW) +endif() + +if (NOT CMAKE_VERSION VERSION_LESS "3.13") + # CMP0077: option() honors normal variables + # https://cmake.org/cmake/help/latest/policy/CMP0077.html + cmake_policy(SET CMP0077 NEW) +endif() + +project (sqlparser) + +# The version number. +set (SQLPARSER_VERSION_MAJOR 1) +set (SQLPARSER_VERSION_MINOR 0) + +#Build type +#set(CMAKE_BUILD_TYPE Debug) + +#Core include directories +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src) + +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) +set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) + +set(SQLPARSER_LIBRARIES ${LIB_OUTPUT_NAME} CACHE INTERNAL "") +#set(SQLPARSER_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "") + + +#Core Sources +file(GLOB ROOT_SRC "src/*.cpp") +file(GLOB PARSER_SRC "src/parser/*.cpp") +file(GLOB SQL_SRC "src/sql/*.cpp") +file(GLOB UTIL_SRC "src/util/*.cpp") + +#append to main SRC +list(APPEND SOURCES ${ROOT_SRC}) +list(APPEND SOURCES ${PARSER_SRC}) +list(APPEND SOURCES ${SQL_SRC}) +list(APPEND SOURCES ${UTIL_SRC}) + +#Compile library +LINK_DIRECTORIES(${LINKER_DIRS}) +add_library(${PROJECT_NAME} SHARED ${SOURCES}) +target_compile_options(${PROJECT_NAME} PRIVATE -std=c++1z -Wall) + +#Install +#install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include) +install (TARGETS ${LIB_OUTPUT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION lib COMPONENT library) diff --git a/Makefile b/Makefile deleted file mode 100644 index 2564a9c..0000000 --- a/Makefile +++ /dev/null @@ -1,157 +0,0 @@ -all: library - -####################################### -############# Directories ############# -####################################### -BIN = bin -SRC = src -SRCPARSER = src/parser - -INSTALL = /usr/local - -###################################### -############ Compile Mode ############ -###################################### -# Set compile mode to -g or -O3. -# Debug mode: make mode=debug - -mode ?= release -MODE_LOG = "" -OPT_FLAG = -ifeq ($(mode), debug) - OPT_FLAG = -g - MODE_LOG = "Building in \033[1;31mdebug\033[0m mode" -else - OPT_FLAG = -O3 - MODE_LOG = "Building in \033[0;32mrelease\033[0m mode ('make mode=debug' for debug mode)" -endif - -GMAKE = make mode=$(mode) - - - -####################################### -############### Library ############### -####################################### -NAME := sqlparser -PARSER_CPP = $(SRCPARSER)/bison_parser.cpp $(SRCPARSER)/flex_lexer.cpp -PARSER_H = $(SRCPARSER)/bison_parser.h $(SRCPARSER)/flex_lexer.h -LIB_CFLAGS = -std=c++1z -Wall -Werror $(OPT_FLAG) - -static ?= no -ifeq ($(static), yes) - LIB_BUILD = lib$(NAME).a - LIBLINKER = $(AR) - LIB_LFLAGS = rs -else - LIB_BUILD = lib$(NAME).so - LIBLINKER = $(CXX) - LIB_CFLAGS += -fPIC - LIB_LFLAGS = -shared -o -endif -LIB_CPP = $(sort $(shell find $(SRC) -name '*.cpp' -not -path "$(SRCPARSER)/*") $(PARSER_CPP)) -LIB_H = $(shell find $(SRC) -name '*.h' -not -path "$(SRCPARSER)/*") $(PARSER_H) -LIB_ALL = $(shell find $(SRC) -name '*.cpp' -not -path "$(SRCPARSER)/*") $(shell find $(SRC) -name '*.h' -not -path "$(SRCPARSER)/*") -LIB_OBJ = $(LIB_CPP:%.cpp=%.o) - -library: $(LIB_BUILD) - -$(LIB_BUILD): $(LIB_OBJ) - $(LIBLINKER) $(LIB_LFLAGS) $(LIB_BUILD) $(LIB_OBJ) - -$(SRCPARSER)/flex_lexer.o: $(SRCPARSER)/flex_lexer.cpp $(SRCPARSER)/bison_parser.cpp - $(CXX) $(LIB_CFLAGS) -c -o $@ $< -Wno-sign-compare -Wno-unneeded-internal-declaration -Wno-register - -%.o: %.cpp $(PARSER_CPP) $(LIB_H) - $(CXX) $(LIB_CFLAGS) -c -o $@ $< - -$(SRCPARSER)/bison_parser.cpp: $(SRCPARSER)/bison_parser.y - $(GMAKE) -C $(SRCPARSER)/ bison_parser.cpp - -$(SRCPARSER)/flex_lexer.cpp: $(SRCPARSER)/flex_lexer.l - $(GMAKE) -C $(SRCPARSER)/ flex_lexer.cpp - -$(SRCPARSER)/bison_parser.h: $(SRCPARSER)/bison_parser.cpp -$(SRCPARSER)/flex_lexer.h: $(SRCPARSER)/flex_lexer.cpp - -clean: - rm -f lib$(NAME).a lib$(NAME).so - rm -rf $(BIN) - find $(SRC) -type f -name '*.o' -delete - -cleanparser: - $(GMAKE) -C $(SRCPARSER)/ clean - -cleanall: clean cleanparser - -install: - cp $(LIB_BUILD) $(INSTALL)/lib/$(LIB_BUILD) - rm -rf $(INSTALL)/include/hsql - cp -r src $(INSTALL)/include/hsql - find $(INSTALL)/include/hsql -not -name '*.h' -type f | xargs rm - - - -####################################### -############## Benchmark ############## -####################################### -BM_BUILD = $(BIN)/benchmark -BM_CFLAGS = -std=c++17 -Wall -Isrc/ -L./ $(OPT_FLAG) -BM_PATH = benchmark -BM_CPP = $(shell find $(BM_PATH)/ -name '*.cpp') -BM_ALL = $(shell find $(BM_PATH)/ -name '*.cpp' -or -name '*.h') - -benchmark: $(BM_BUILD) - -run_benchmarks: benchmark - ./$(BM_BUILD) --benchmark_counters_tabular=true - # --benchmark_filter="abc - -save_benchmarks: benchmark - ./$(BM_BUILD) --benchmark_format=csv > benchmarks.csv - -$(BM_BUILD): $(BM_ALL) $(LIB_BUILD) - @mkdir -p $(BIN)/ - $(CXX) $(BM_CFLAGS) $(BM_CPP) -o $(BM_BUILD) -lbenchmark -lpthread -lsqlparser -lstdc++ -lstdc++fs - - - -######################################## -############ Test & Example ############ -######################################## -TEST_BUILD = $(BIN)/tests -TEST_CFLAGS = -std=c++1z -Wall -Werror -Isrc/ -Itest/ -L./ $(OPT_FLAG) -TEST_CPP = $(shell find test/ -name '*.cpp') -TEST_ALL = $(shell find test/ -name '*.cpp') $(shell find test/ -name '*.h') -EXAMPLE_SRC = $(shell find example/ -name '*.cpp') $(shell find example/ -name '*.h') - -test: $(TEST_BUILD) - bash test/test.sh - -$(TEST_BUILD): $(TEST_ALL) $(LIB_BUILD) - @mkdir -p $(BIN)/ - $(CXX) $(TEST_CFLAGS) $(TEST_CPP) -o $(TEST_BUILD) -lsqlparser -lstdc++ - -test_example: - $(GMAKE) -C example/ - LD_LIBRARY_PATH=./ \ - ./example/example "SELECT * FROM students WHERE name = 'Max Mustermann';" - -test_format: - @! astyle --options=astyle.options $(LIB_ALL) | grep -q "Formatted" - @! astyle --options=astyle.options $(TEST_ALL) | grep -q "Formatted" - - - -######################################## -################# Misc ################# -######################################## - -format: - astyle --options=astyle.options $(LIB_ALL) - astyle --options=astyle.options $(TEST_ALL) - astyle --options=astyle.options $(EXAMPLE_SRC) - -log_mode: - @echo $(MODE_LOG) -