diff --git a/.gitignore b/.gitignore index 17904fad..9098d07d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .idea *.iml -external +external* build cmake-build-debug cmake-build-release \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 47610b96..43b6e884 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,9 +3,10 @@ project(typesense) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -O0") +set(DEP_ROOT_DIR ${CMAKE_SOURCE_DIR}/external-${CMAKE_SYSTEM_NAME}) -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/) - file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/external) +if(NOT EXISTS ${DEP_ROOT_DIR}) + file(MAKE_DIRECTORY ${DEP_ROOT_DIR}) endif() include(cmake/For.cmake) @@ -23,21 +24,21 @@ FILE(GLOB HEADER_FILES include/*) FILE(GLOB SRC_FILES src/*.cpp) include_directories(include) -include_directories(${CMAKE_SOURCE_DIR}/external/${FOR_NAME}) -include_directories(${CMAKE_SOURCE_DIR}/external/${GTEST_NAME}/googletest/include) -include_directories(${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/include) -include_directories(${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build/libressl-build/include) -include_directories(${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}/include) +include_directories(${DEP_ROOT_DIR}/${FOR_NAME}) +include_directories(${DEP_ROOT_DIR}/${GTEST_NAME}/googletest/include) +include_directories(${DEP_ROOT_DIR}/${H2O_NAME}/include) +include_directories(${DEP_ROOT_DIR}/${H2O_NAME}/build/libressl-build/include) +include_directories(${DEP_ROOT_DIR}/${ROCKSDB_NAME}/include) -link_directories(${CMAKE_SOURCE_DIR}/external/${GTEST_NAME}/googletest/build) -link_directories(${CMAKE_SOURCE_DIR}/external/${FOR_NAME}) -link_directories(${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build) -link_directories(${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build/libressl-build/lib) -link_directories(${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}) +link_directories(${DEP_ROOT_DIR}/${GTEST_NAME}/googletest/build) +link_directories(${DEP_ROOT_DIR}/${FOR_NAME}) +link_directories(${DEP_ROOT_DIR}/${H2O_NAME}/build) +link_directories(${DEP_ROOT_DIR}/${H2O_NAME}/build/libressl-build/lib) +link_directories(${DEP_ROOT_DIR}/${ROCKSDB_NAME}) -add_executable(typesense-server ${HEADER_FILES} ${SRC_FILES} src/main/server.cpp) -add_executable(search ${HEADER_FILES} ${SRC_FILES} src/main/main.cpp) -add_executable(benchmark ${HEADER_FILES} ${SRC_FILES} src/main/benchmark.cpp) +add_executable(typesense-server ${SRC_FILES} src/main/server.cpp) +add_executable(search ${SRC_FILES} src/main/main.cpp) +add_executable(benchmark ${SRC_FILES} src/main/benchmark.cpp) add_executable(typesense_test test/array_test.cpp test/sorted_array_test.cpp test/art_test.cpp test/collection_test.cpp test/collection_manager_test.cpp test/topster_test.cpp ${SRC_FILES}) diff --git a/build.sh b/build.sh index 4ff35e25..5be536bb 100755 --- a/build.sh +++ b/build.sh @@ -1,7 +1,7 @@ #!/bin/sh PROJECT_DIR=`dirname $0` -if [ "$1" == "--clean" ]; then +if [ "$1" = "--clean" ]; then rm -rf $PROJECT_DIR/build mkdir $PROJECT_DIR/build fi diff --git a/cmake/For.cmake b/cmake/For.cmake index ee70a574..6fcb215e 100644 --- a/cmake/For.cmake +++ b/cmake/For.cmake @@ -2,15 +2,19 @@ set(FOR_VERSION 49611808d08d4e47116aa2a3ddcabeb418f405f7) set(FOR_NAME libfor-${FOR_VERSION}) -set(FOR_TAR_PATH ${CMAKE_SOURCE_DIR}/external/${FOR_NAME}.tar.gz) +set(FOR_TAR_PATH ${DEP_ROOT_DIR}/${FOR_NAME}.tar.gz) -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${FOR_NAME}) - message(STATUS "Downloading and extracting libfor...") +if(NOT EXISTS ${FOR_TAR_PATH}) + message(STATUS "Downloading libfor...") file(DOWNLOAD https://github.com/cruppstahl/libfor/archive/${FOR_VERSION}.tar.gz ${FOR_TAR_PATH}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${FOR_TAR_PATH} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/) endif() -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${FOR_NAME}/libfor.a) +if(NOT EXISTS ${DEP_ROOT_DIR}/${FOR_NAME}) + message(STATUS "Extracting libfor...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${FOR_TAR_PATH} WORKING_DIRECTORY ${DEP_ROOT_DIR}) +endif() + +if(NOT EXISTS ${DEP_ROOT_DIR}/${FOR_NAME}/libfor.a) message("Building libfor locally...") - execute_process(COMMAND make WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/${FOR_NAME}/) -endif() \ No newline at end of file + execute_process(COMMAND make WORKING_DIRECTORY ${DEP_ROOT_DIR}/${FOR_NAME}/) +endif() diff --git a/cmake/GoogleTest.cmake b/cmake/GoogleTest.cmake index 6b2af49e..156fbb7e 100644 --- a/cmake/GoogleTest.cmake +++ b/cmake/GoogleTest.cmake @@ -2,20 +2,24 @@ set(GTEST_VERSION 1.8.0) set(GTEST_NAME googletest-release-${GTEST_VERSION}) -set(GTEST_TAR_PATH ${CMAKE_SOURCE_DIR}/external/${GTEST_NAME}.tar.gz) +set(GTEST_TAR_PATH ${DEP_ROOT_DIR}/${GTEST_NAME}.tar.gz) -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${GTEST_NAME}) - message(STATUS "Downloading and extracting Google Test...") +if(NOT EXISTS ${GTEST_TAR_PATH}) + message(STATUS "Downloading Google Test...") file(DOWNLOAD https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz ${GTEST_TAR_PATH}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${GTEST_TAR_PATH} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/) endif() -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/googletest/build) +if(NOT EXISTS ${DEP_ROOT_DIR}/${GTEST_NAME}) + message(STATUS "Extracting Google Test...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${GTEST_TAR_PATH} WORKING_DIRECTORY ${DEP_ROOT_DIR}) +endif() + +if(NOT EXISTS ${DEP_ROOT_DIR}/googletest-release-${GTEST_VERSION}/googletest/build) message("Configuring Google Test...") - file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/googletest/build) + file(MAKE_DIRECTORY ${DEP_ROOT_DIR}/googletest-release-${GTEST_VERSION}/googletest/build) execute_process(COMMAND ${CMAKE_COMMAND} - "-H${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/googletest" - "-B${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/googletest/build" + "-H${DEP_ROOT_DIR}/googletest-release-${GTEST_VERSION}/googletest" + "-B${DEP_ROOT_DIR}/googletest-release-${GTEST_VERSION}/googletest/build" RESULT_VARIABLE GOOGLETEST_CONFIGURE) if(NOT GOOGLETEST_CONFIGURE EQUAL 0) @@ -24,7 +28,7 @@ if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/g message("Building Google Test locally...") execute_process(COMMAND ${CMAKE_COMMAND} --build - "${CMAKE_SOURCE_DIR}/external/googletest-release-${GTEST_VERSION}/googletest/build" + "${DEP_ROOT_DIR}/googletest-release-${GTEST_VERSION}/googletest/build" RESULT_VARIABLE GOOGLETEST_BUILD) if(NOT GOOGLETEST_BUILD EQUAL 0) diff --git a/cmake/H2O.cmake b/cmake/H2O.cmake index 0010d646..909bbe80 100644 --- a/cmake/H2O.cmake +++ b/cmake/H2O.cmake @@ -2,21 +2,26 @@ set(H2O_VERSION 2.0.4) set(H2O_NAME h2o-${H2O_VERSION}) -set(H2O_TAR_PATH ${CMAKE_SOURCE_DIR}/external/${H2O_NAME}.tar.gz) +set(H2O_TAR_PATH ${DEP_ROOT_DIR}/${H2O_NAME}.tar.gz) -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${H2O_NAME}) - message(STATUS "Downloading and extracting ${H2O_NAME}...") +if(NOT EXISTS ${H2O_TAR_PATH}) + message(STATUS "Downloading ${H2O_NAME}...") file(DOWNLOAD https://github.com/h2o/h2o/archive/v${H2O_VERSION}.tar.gz ${H2O_TAR_PATH}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${H2O_TAR_PATH} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/) endif() -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build) +if(NOT EXISTS ${DEP_ROOT_DIR}/${H2O_NAME}) + message(STATUS "Extracting ${H2O_NAME}...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${H2O_TAR_PATH} WORKING_DIRECTORY ${DEP_ROOT_DIR}/) +endif() + +if(NOT EXISTS ${DEP_ROOT_DIR}/${H2O_NAME}/build/h2o) message("Configuring ${H2O_NAME}...") - file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build) + file(MAKE_DIRECTORY ${DEP_ROOT_DIR}/${H2O_NAME}/build) execute_process(COMMAND ${CMAKE_COMMAND} - "-DWITH_BUNDLED_SSL=on" - "-H${CMAKE_SOURCE_DIR}/external/${H2O_NAME}" - "-B${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build" + "-DWITH_BUNDLED_SSL=off" + "-DWITH_MRUBY=off" + "-H${DEP_ROOT_DIR}/${H2O_NAME}" + "-B${DEP_ROOT_DIR}/${H2O_NAME}/build" RESULT_VARIABLE H2O_CONFIGURE) if(NOT H2O_CONFIGURE EQUAL 0) @@ -25,7 +30,7 @@ if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build) message("Building ${H2O_NAME} locally...") execute_process(COMMAND ${CMAKE_COMMAND} --build - "${CMAKE_SOURCE_DIR}/external/${H2O_NAME}/build" + "${DEP_ROOT_DIR}/${H2O_NAME}/build" RESULT_VARIABLE H2O_BUILD) if(NOT H2O_BUILD EQUAL 0) diff --git a/cmake/RocksDB.cmake b/cmake/RocksDB.cmake index 2e563184..d4e6d5ed 100644 --- a/cmake/RocksDB.cmake +++ b/cmake/RocksDB.cmake @@ -2,16 +2,19 @@ set(ROCKSDB_VERSION 4.11.2) set(ROCKSDB_NAME rocksdb-${ROCKSDB_VERSION}) -set(ROCKSDB_TAR_PATH ${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}.tar.gz) +set(ROCKSDB_TAR_PATH ${DEP_ROOT_DIR}/${ROCKSDB_NAME}.tar.gz) -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}) - message(STATUS "Downloading and extracting ${ROCKSDB_NAME}...") +if(NOT EXISTS ${ROCKSDB_TAR_PATH}) + message(STATUS "Downloading ${ROCKSDB_NAME}...") file(DOWNLOAD https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz ${ROCKSDB_TAR_PATH}) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${ROCKSDB_TAR_PATH} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/) endif() -if( (NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}/librocksdb.so) AND - (NOT EXISTS ${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}/librocksdb.dylib) ) +if(NOT EXISTS ${DEP_ROOT_DIR}/${ROCKSDB_NAME}) + message(STATUS "Extracting ${ROCKSDB_NAME}...") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvzf ${ROCKSDB_TAR_PATH} WORKING_DIRECTORY ${DEP_ROOT_DIR}/) +endif() + +if(NOT EXISTS ${DEP_ROOT_DIR}/${ROCKSDB_NAME}/librocksdb.so) message("Building ${ROCKSDB_NAME} locally...") - execute_process(COMMAND make "shared_lib" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/external/${ROCKSDB_NAME}/) + execute_process(COMMAND make "shared_lib" WORKING_DIRECTORY ${DEP_ROOT_DIR}/${ROCKSDB_NAME}/) endif() \ No newline at end of file