From 7085e253886336a0f51694f6f67a3e1973101367 Mon Sep 17 00:00:00 2001 From: xsren <285808407@qq.com> Date: Mon, 4 Nov 2024 20:24:23 +0800 Subject: [PATCH] enh: lemon --- cmake/lemon_CMakeLists.txt.in | 10 ++++++++++ contrib/CMakeLists.txt | 3 +++ source/libs/parser/CMakeLists.txt | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 cmake/lemon_CMakeLists.txt.in diff --git a/cmake/lemon_CMakeLists.txt.in b/cmake/lemon_CMakeLists.txt.in new file mode 100644 index 0000000000..1ba1cfd2e0 --- /dev/null +++ b/cmake/lemon_CMakeLists.txt.in @@ -0,0 +1,10 @@ +# lemon + ExternalProject_Add( + lemon + URL https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMAKE_C_COMPILER} -o ${TD_CONTRIB_DIR}/deps-download/lemon-prefix/src/lemon-build/lemon ${TD_CONTRIB_DIR}/deps-download/lemon-prefix/src/lemon/tool/lemon.c + INSTALL_COMMAND cp ${TD_CONTRIB_DIR}/deps-download/lemon-prefix/src/lemon-build/lemon ${CMAKE_BINARY_DIR}/bin/lemon + INSTALL_COMMAND cp ${TD_CONTRIB_DIR}/deps-download/lemon-prefix/src/lemon/tool/lempar.c ${CMAKE_BINARY_DIR}/bin/lempar.c + BUILD_IN_SOURCE 1 + ) \ No newline at end of file diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index eae697560b..4ac32ed825 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -184,6 +184,9 @@ if(${BUILD_PCRE2}) cat("${TD_SUPPORT_DIR}/pcre2_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) endif() +# lemon +cat("${TD_SUPPORT_DIR}/lemon_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) + # download dependencies configure_file(${CONTRIB_TMP_FILE} "${TD_CONTRIB_DIR}/deps-download/CMakeLists.txt") execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . diff --git a/source/libs/parser/CMakeLists.txt b/source/libs/parser/CMakeLists.txt index f1b801c563..c138e92716 100644 --- a/source/libs/parser/CMakeLists.txt +++ b/source/libs/parser/CMakeLists.txt @@ -4,7 +4,26 @@ IF(TD_ENTERPRISE) LIST(APPEND PARSER_SRC ${TD_ENTERPRISE_DIR}/src/plugins/view/src/parserView.c) ENDIF() +add_custom_command( + OUTPUT ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c + COMMAND echo "Running lemon process in ${TD_SOURCE_DIR}/source/libs/parser/inc" + COMMAND ${CMAKE_BINARY_DIR}/bin/lemon sql.y || true + COMMAND echo "copy sql.c from ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c to ${TD_SOURCE_DIR}/source/libs/parser/src/" + COMMAND cp ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.c ${TD_SOURCE_DIR}/source/libs/parser/src/ + COMMAND echo "lemon process completed." + DEPENDS ${TD_SOURCE_DIR}/source/libs/parser/inc/sql.y + WORKING_DIRECTORY ${TD_SOURCE_DIR}/source/libs/parser/inc + COMMENT "Generating sql.c using lemon" +) + +add_custom_target(lemon_target + DEPENDS ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c +) + +list(APPEND PARSER_SRC ${TD_SOURCE_DIR}/source/libs/parser/src/sql.c) + add_library(parser STATIC ${PARSER_SRC}) +add_dependencies(parser lemon_target) target_include_directories( parser PUBLIC "${TD_SOURCE_DIR}/include/libs/parser"