1
0
Fork 0
mirror of https://github.com/dragonflydb/dragonfly.git synced 2024-12-14 11:58:02 +00:00
dragonflydb-dragonfly/src/CMakeLists.txt
Roman Gershman 20c98c29c1
fix: increase lua stack limit to 8KB (#3080)
Before that 'lua_checkstack(lua(), 7000)' would not pass because we limited lua stack to 4KB.
7000 is the max limit used by bullmq, so we raising it to support this case.

Signed-off-by: Roman Gershman <roman@dragonflydb.io>
2024-05-25 23:11:27 +03:00

201 lines
6.5 KiB
CMake

if ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
set(DFLY_TOOLS_MAKE "gmake")
else()
set(DFLY_TOOLS_MAKE "make")
endif()
add_third_party(
lua
GIT_REPOSITORY https://github.com/dragonflydb/lua
GIT_TAG Dragonfly-5.4.6a
CONFIGURE_COMMAND echo
BUILD_IN_SOURCE 1
BUILD_COMMAND ${DFLY_TOOLS_MAKE} all
INSTALL_COMMAND cp <SOURCE_DIR>/liblua.a ${THIRD_PARTY_LIB_DIR}/lua/lib/
COMMAND cp <SOURCE_DIR>/lualib.h <SOURCE_DIR>/lua.h <SOURCE_DIR>/lauxlib.h
<SOURCE_DIR>/luaconf.h ${THIRD_PARTY_LIB_DIR}/lua/include
)
function(cur_gen_dir out_dir)
file(RELATIVE_PATH _rel_folder "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
set(_tmp_dir ${ROOT_GEN_DIR}/${_rel_folder})
set(${out_dir} ${_tmp_dir} PARENT_SCOPE)
file(MAKE_DIRECTORY ${_tmp_dir})
endfunction()
set(ROOT_GEN_DIR ${CMAKE_SOURCE_DIR}/genfiles)
file(MAKE_DIRECTORY ${ROOT_GEN_DIR})
include_directories(${ROOT_GEN_DIR}/src)
function(gen_bison name)
GET_FILENAME_COMPONENT(_in ${name}.y ABSOLUTE)
cur_gen_dir(gen_dir)
# add_library(${lib_name} ${gen_dir}/${name}.cc)
set(full_path_cc ${gen_dir}/${name}.cc ${gen_dir}/${name}.hh)
ADD_CUSTOM_COMMAND(
OUTPUT ${full_path_cc}
COMMAND mkdir -p ${gen_dir}
COMMAND bison --language=c++ -o ${gen_dir}/${name}.cc ${name}.y -Wconflicts-sr
DEPENDS ${_in}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating parser from ${name}.y" VERBATIM)
set_source_files_properties(${name}.cc ${name}_base.h PROPERTIES GENERATED TRUE)
endfunction()
if (APPLE)
set(SED_REPL sed "-i" '')
else()
set(SED_REPL sed "-i")
endif()
add_third_party(
dconv
URL https://github.com/google/double-conversion/archive/refs/tags/v3.3.0.tar.gz
PATCH_COMMAND ${SED_REPL} "/static const std::ctype/d"
<SOURCE_DIR>/double-conversion/string-to-double.cc
COMMAND ${SED_REPL} "/std::use_facet</d" <SOURCE_DIR>/double-conversion/string-to-double.cc
COMMAND ${SED_REPL} "s/cType.tolower/std::tolower/g" <SOURCE_DIR>/double-conversion/string-to-double.cc
LIB libdouble-conversion.a
)
add_third_party(
reflex
URL https://github.com/Genivia/RE-flex/archive/refs/tags/v3.5.1.tar.gz
CONFIGURE_COMMAND <SOURCE_DIR>/configure --disable-avx --prefix=${THIRD_PARTY_LIB_DIR}/reflex
CXX=${CMAKE_CXX_COMPILER} CC=${CMAKE_C_COMPILER}
)
set(REFLEX "${THIRD_PARTY_LIB_DIR}/reflex/bin/reflex")
add_third_party(
jsoncons
GIT_REPOSITORY https://github.com/dragonflydb/jsoncons
# URL https://github.com/danielaparker/jsoncons/archive/refs/tags/v0.171.1.tar.gz
GIT_TAG Dragonfly
GIT_SHALLOW 1
# PATCH_COMMAND patch -p1 -i "${CMAKE_SOURCE_DIR}/patches/jsoncons-v0.171.0.patch"
CMAKE_PASS_FLAGS "-DJSONCONS_BUILD_TESTS=OFF -DJSONCONS_HAS_POLYMORPHIC_ALLOCATOR=ON"
LIB "none"
)
add_third_party(
lz4
URL https://github.com/lz4/lz4/archive/refs/tags/v1.9.4.tar.gz
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND echo skip
BUILD_COMMAND ${DFLY_TOOLS_MAKE} lib-release
INSTALL_COMMAND ${DFLY_TOOLS_MAKE} install BUILD_SHARED=no PREFIX=${THIRD_PARTY_LIB_DIR}/lz4
)
add_third_party(
croncpp
URL https://github.com/mariusbancila/croncpp/archive/refs/tags/v2023.03.30.tar.gz
LIB "none"
)
add_third_party(
uni-algo
URL https://github.com/uni-algo/uni-algo/archive/refs/tags/v1.0.0.tar.gz
CMAKE_PASS_FLAGS "-DCMAKE_CXX_STANDARD:STRING=17"
)
add_third_party(
hnswlib
URL https://github.com/nmslib/hnswlib/archive/refs/tags/v0.7.0.tar.gz
BUILD_COMMAND echo SKIP
INSTALL_COMMAND cp -R <SOURCE_DIR>/hnswlib ${THIRD_PARTY_LIB_DIR}/hnswlib/include/
LIB "none"
)
add_third_party(
fast_float
URL https://github.com/fastfloat/fast_float/archive/refs/tags/v5.2.0.tar.gz
LIB "none"
)
add_third_party(
flatbuffers
URL https://github.com/google/flatbuffers/archive/refs/tags/v23.5.26.tar.gz
CMAKE_PASS_FLAGS "-DFLATBUFFERS_BUILD_TESTS=OFF -DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF
-DFLATBUFFERS_BUILD_FLATC=OFF"
)
add_library(TRDP::jsoncons INTERFACE IMPORTED)
add_dependencies(TRDP::jsoncons jsoncons_project)
set_target_properties(TRDP::jsoncons PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${JSONCONS_INCLUDE_DIR}")
add_library(TRDP::croncpp INTERFACE IMPORTED)
add_dependencies(TRDP::croncpp croncpp_project)
set_target_properties(TRDP::croncpp PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CRONCPP_INCLUDE_DIR}")
add_library(TRDP::hnswlib INTERFACE IMPORTED)
add_dependencies(TRDP::hnswlib hnswlib_project)
set_target_properties(TRDP::hnswlib PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${HNSWLIB_INCLUDE_DIR}")
add_library(TRDP::fast_float INTERFACE IMPORTED)
add_dependencies(TRDP::fast_float fast_float_project)
set_target_properties(TRDP::fast_float PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${FAST_FLOAT_INCLUDE_DIR}")
Message(STATUS "THIRD_PARTY_LIB_DIR ${THIRD_PARTY_LIB_DIR}")
option(ENABLE_GIT_VERSION "Build with Git metadata" OFF)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/" )
if(ENABLE_GIT_VERSION)
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
git_local_changes(GIT_CLEAN_DIRTY)
if("${GIT_CLEAN_DIRTY}" STREQUAL "DIRTY")
set(GIT_CLEAN_DIRTY "-dirty")
else()
set(GIT_CLEAN_DIRTY "")
endif()
Message(STATUS "GIT_SHA1 ${GIT_SHA1}")
git_describe(GIT_VER --always)
Message(STATUS "GIT_VER ${GIT_VER}")
string(TIMESTAMP PRJ_BUILD_TIME "%Y-%m-%d %H:%M:%S" UTC)
else(ENABLE_GIT_VERSION)
set(GIT_VER "dev")
set(GIT_SHA1 "0000000")
set(GIT_CLEAN_DIRTY "-dev")
set(PRJ_BUILD_TIME "bigbang")
endif(ENABLE_GIT_VERSION)
function(gen_flex name)
GET_FILENAME_COMPONENT(_in ${name}.lex ABSOLUTE)
cur_gen_dir(gen_dir)
ADD_CUSTOM_COMMAND(
OUTPUT ${gen_dir}/${name}.cc ${gen_dir}/${name}.h
COMMAND mkdir -p ${gen_dir}
COMMAND ${REFLEX} -o ${gen_dir}/${name}.cc --unicode --header-file=${gen_dir}/${name}.h
--bison-complete --bison-locations ${_in}
DEPENDS ${_in} reflex_project
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating lexer from ${name}.lex" VERBATIM)
set_source_files_properties(${gen_dir}/${name}.h ${gen_dir}/${name}.cc
PROPERTIES GENERATED TRUE)
endfunction()
# the output file resides in the build directory.
configure_file(server/version.cc.in "${CMAKE_CURRENT_SOURCE_DIR}/server/version.cc" @ONLY)
add_subdirectory(redis)
add_subdirectory(core)
add_subdirectory(facade)
add_subdirectory(server)