@@ -112,6 +112,18 @@ else()
112112 endif ()
113113endif ()
114114
115+ if (DEFINED ENV{PAIMON_LUCENE_URL})
116+ set (LUCENE_SOURCE_URL "$ENV{PAIMON_LUCENE_URL} " )
117+ else ()
118+ if (EXISTS "${THIRDPARTY_DIR} /${PAIMON_LUCENE_PKG_NAME} " )
119+ set_urls(LUCENE_SOURCE_URL "${THIRDPARTY_DIR} /${PAIMON_LUCENE_PKG_NAME} " )
120+ else ()
121+ set_urls(LUCENE_SOURCE_URL
122+ "${THIRDPARTY_MIRROR_URL} https://github.com/luceneplusplus/LucenePlusPlus/archive/refs/tags/${PAIMON_LUCENE_PKG_NAME} "
123+ )
124+ endif ()
125+ endif ()
126+
115127if (DEFINED ENV{PAIMON_GLOG_URL})
116128 set (GLOG_SOURCE_URL "$ENV{PAIMON_GLOG_URL} " )
117129else ()
@@ -275,6 +287,62 @@ set(EP_COMMON_CMAKE_ARGS
275287 -DCMAKE_C_FLAGS=${EP_C_FLAGS}
276288 -DCMAKE_INSTALL_LIBDIR=lib)
277289
290+ macro (build_lucene)
291+ message (STATUS "Building lucene from source" )
292+ set (LUCENE_PREFIX "${CMAKE_CURRENT_BINARY_DIR} /lucene_ep-install" )
293+ set (LUCENE_CMAKE_ARGS
294+ ${EP_COMMON_CMAKE_ARGS}
295+ "-DENABLE_TEST=OFF"
296+ "-DCMAKE_C_FLAGS=-pthread"
297+ "-DCMAKE_CXX_FLAGS=-pthread"
298+ "-DCMAKE_EXE_LINKER_FLAGS=-pthread"
299+ "-DBoost_INCLUDE_DIR=${BOOST_INCLUDE_DIR} "
300+ "-DBoost_LIBRARY_DIR=${BOOST_LIBRARY_DIR} "
301+ "-DBOOST_ROOT=${BOOST_INSTALL} "
302+ "-DBoost_CHRONO_FOUND=TRUE"
303+ "-DBoost_THREAD_FOUND=TRUE"
304+ "-DCMAKE_INSTALL_PREFIX=${LUCENE_PREFIX} " )
305+
306+ set (LUCENE_LIB "${LUCENE_PREFIX} /lib/liblucene++.so.0" )
307+ externalproject_add(lucene_ep
308+ ${EP_COMMON_OPTIONS}
309+ URL ${LUCENE_SOURCE_URL}
310+ URL_HASH "SHA256=${PAIMON_LUCENE_BUILD_SHA256_CHECKSUM} "
311+ CMAKE_ARGS ${LUCENE_CMAKE_ARGS}
312+ BUILD_BYPRODUCTS ${LUCENE_LIB}
313+ DEPENDS boost_date_time
314+ boost_filesystem
315+ boost_regex
316+ boost_thread
317+ boost_iostreams
318+ boost_system
319+ boost_chrono
320+ boost_atomic)
321+
322+ set (LUCENE_INCLUDE_DIR "${LUCENE_PREFIX} /include" )
323+ # The include directory must exist before it is referenced by a target.
324+ file (MAKE_DIRECTORY "${LUCENE_INCLUDE_DIR} " )
325+ include_directories (SYSTEM ${LUCENE_INCLUDE_DIR} ${BOOST_INCLUDE_DIR}
326+ ${BOOST_EXTRA_INCLUDE_DIR} )
327+ add_library (lucene INTERFACE IMPORTED )
328+ target_include_directories (lucene SYSTEM INTERFACE "${LUCENE_INCLUDE_DIR} " )
329+ target_compile_options (lucene INTERFACE -pthread)
330+
331+ target_link_libraries (lucene
332+ INTERFACE "${LUCENE_LIB} "
333+ boost_date_time
334+ boost_filesystem
335+ boost_regex
336+ boost_thread
337+ boost_iostreams
338+ boost_system
339+ boost_chrono
340+ boost_atomic
341+ pthread
342+ dl)
343+ add_dependencies (lucene lucene_ep)
344+ endmacro ()
345+
278346macro (build_rapidjson)
279347 message (STATUS "Building RapidJSON from source" )
280348 set (RAPIDJSON_PREFIX "${CMAKE_CURRENT_BINARY_DIR} /rapidjson_ep-install" )
@@ -342,6 +410,99 @@ macro(build_fmt)
342410 add_dependencies (fmt fmt_ep)
343411endmacro (build_fmt)
344412
413+ macro (build_boost)
414+ message (STATUS "Building boost from source" )
415+ set (BOOST_PREFIX "${CMAKE_CURRENT_BINARY_DIR} /boost_ep-prefix" )
416+ set (BOOST_INSTALL "${CMAKE_CURRENT_BINARY_DIR} /boost_ep-install" )
417+ set (BOOST_INCLUDE_DIR "${BOOST_INSTALL} /include" )
418+ set (BOOST_LIBRARY_DIR ${BOOST_INSTALL} /lib)
419+ file (MAKE_DIRECTORY ${BOOST_INCLUDE_DIR} )
420+ file (MAKE_DIRECTORY ${BOOST_LIBRARY_DIR} )
421+
422+ set (BOOST_BYPRODUCTS
423+ ${BOOST_LIBRARY_DIR} /libboost_date_time.a
424+ ${BOOST_LIBRARY_DIR} /libboost_filesystem.a
425+ ${BOOST_LIBRARY_DIR} /libboost_system.a
426+ ${BOOST_LIBRARY_DIR} /libboost_regex.a
427+ ${BOOST_LIBRARY_DIR} /libboost_thread.a
428+ ${BOOST_LIBRARY_DIR} /libboost_atomic.a
429+ ${BOOST_LIBRARY_DIR} /libboost_chrono.a
430+ ${BOOST_LIBRARY_DIR} /libboost_iostreams.a)
431+
432+ externalproject_add(boost_ep
433+ GIT_REPOSITORY https://github.com/boostorg/boost.git
434+ GIT_TAG boost-${PAIMON_BOOST_BUILD_VERSION}
435+ GIT_SHALLOW FALSE
436+ GIT_PROGRESS TRUE
437+ GIT_SUBMODULES_RECURSE TRUE
438+ CONFIGURE_COMMAND ${BOOST_PREFIX} /src/boost_ep/bootstrap.sh
439+ --with-libraries=date_time,filesystem,iostreams,regex ,system ,thread,chrono,atomic
440+ BUILD_IN_SOURCE TRUE
441+ BUILD_COMMAND ${BOOST_PREFIX} /src/boost_ep/b2
442+ --prefix =${BOOST_INSTALL}
443+ --libdir=${BOOST_LIBRARY_DIR} link=static
444+ runtime-link=shared threading=multi variant=release
445+ cxxflags=-fPIC install
446+ INSTALL_COMMAND bash -c
447+ "mkdir -p ${BOOST_INSTALL} /include/boost && cp -r ${BOOST_PREFIX} /src/boost_ep/libs/*/include/boost/* ${BOOST_INSTALL} /include/boost && cp -r ${BOOST_PREFIX} /src/boost_ep/libs/*/*/include/boost/* ${BOOST_INSTALL} /include/boost"
448+ BUILD_BYPRODUCTS ${BOOST_BYPRODUCTS}
449+ LOG_DOWNLOAD ON
450+ LOG_CONFIGURE ON
451+ LOG_BUILD ON )
452+
453+ include_directories (SYSTEM ${BOOST_INCLUDE_DIR} )
454+
455+ add_library (boost_atomic STATIC IMPORTED )
456+ set_target_properties (boost_atomic
457+ PROPERTIES IMPORTED_LOCATION
458+ ${BOOST_LIBRARY_DIR} /libboost_atomic.a
459+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
460+ add_library (boost_chrono STATIC IMPORTED )
461+ set_target_properties (boost_chrono
462+ PROPERTIES IMPORTED_LOCATION
463+ ${BOOST_LIBRARY_DIR} /libboost_chrono.a
464+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
465+ add_library (boost_date_time STATIC IMPORTED )
466+ set_target_properties (boost_date_time
467+ PROPERTIES IMPORTED_LOCATION
468+ ${BOOST_LIBRARY_DIR} /libboost_date_time.a
469+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
470+ add_library (boost_filesystem STATIC IMPORTED )
471+ set_target_properties (boost_filesystem
472+ PROPERTIES IMPORTED_LOCATION
473+ ${BOOST_LIBRARY_DIR} /libboost_filesystem.a
474+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
475+ add_library (boost_regex STATIC IMPORTED )
476+ set_target_properties (boost_regex
477+ PROPERTIES IMPORTED_LOCATION
478+ ${BOOST_LIBRARY_DIR} /libboost_regex.a
479+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
480+ add_library (boost_thread STATIC IMPORTED )
481+ set_target_properties (boost_thread
482+ PROPERTIES IMPORTED_LOCATION
483+ ${BOOST_LIBRARY_DIR} /libboost_thread.a
484+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
485+ add_library (boost_iostreams STATIC IMPORTED )
486+ set_target_properties (boost_iostreams
487+ PROPERTIES IMPORTED_LOCATION
488+ ${BOOST_LIBRARY_DIR} /libboost_iostreams.a
489+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
490+ add_library (boost_system STATIC IMPORTED )
491+ set_target_properties (boost_system
492+ PROPERTIES IMPORTED_LOCATION
493+ ${BOOST_LIBRARY_DIR} /libboost_system.a
494+ INTERFACE_INCLUDE_DIRECTORIES ${BOOST_INCLUDE_DIR} )
495+
496+ add_dependencies (boost_atomic boost_ep)
497+ add_dependencies (boost_chrono boost_ep)
498+ add_dependencies (boost_date_time boost_ep)
499+ add_dependencies (boost_filesystem boost_ep)
500+ add_dependencies (boost_regex boost_ep)
501+ add_dependencies (boost_thread boost_ep)
502+ add_dependencies (boost_iostreams boost_ep)
503+ add_dependencies (boost_system boost_ep)
504+ endmacro (build_boost)
505+
345506macro (build_snappy)
346507 message (STATUS "Building snappy from source" )
347508 set (SNAPPY_HOME "${CMAKE_CURRENT_BINARY_DIR} /snappy_ep-install" )
@@ -1108,3 +1269,7 @@ if(PAIMON_ENABLE_JINDO)
11081269 build_jindosdk_c()
11091270 build_jindosdk_nextarch()
11101271endif ()
1272+ if (PAIMON_ENABLE_LUCENE)
1273+ build_boost()
1274+ build_lucene()
1275+ endif ()
0 commit comments