@@ -91,6 +91,18 @@ else()
9191 endif ()
9292endif ()
9393
94+ if (DEFINED ENV{PAIMON_MOSAIC_URL})
95+ set (MOSAIC_SOURCE_URL "$ENV{PAIMON_MOSAIC_URL} " )
96+ else ()
97+ if (EXISTS "${THIRDPARTY_DIR} /${PAIMON_MOSAIC_PKG_NAME} " )
98+ set_urls (MOSAIC_SOURCE_URL "${THIRDPARTY_DIR} /${PAIMON_MOSAIC_PKG_NAME} " )
99+ else ()
100+ set_urls (MOSAIC_SOURCE_URL
101+ "https://downloads.apache.org/paimon/paimon-mosaic-${PAIMON_MOSAIC_BUILD_VERSION} /${PAIMON_MOSAIC_PKG_NAME} "
102+ )
103+ endif ()
104+ endif ()
105+
94106if (DEFINED ENV{PAIMON_RAPIDJSON_URL})
95107 set (RAPIDJSON_SOURCE_URL "$ENV{PAIMON_RAPIDJSON_URL} " )
96108else ()
@@ -1314,6 +1326,51 @@ macro(build_lumina)
13141326 install (FILES "${LUMINA_DYNAMIC_LIB} " DESTINATION ${CMAKE_INSTALL_LIBDIR} )
13151327endmacro ()
13161328
1329+ macro (build_mosaic )
1330+ message (STATUS "Building Apache Paimon Mosaic Rust FFI from source" )
1331+ find_program (PAIMON_CARGO_EXECUTABLE cargo REQUIRED )
1332+
1333+ set (MOSAIC_PREFIX "${CMAKE_CURRENT_BINARY_DIR } /mosaic_ep-install" )
1334+ set (MOSAIC_INCLUDE_DIR "${MOSAIC_PREFIX} /include" )
1335+ set (MOSAIC_LIB_DIR "${MOSAIC_PREFIX} /${CMAKE_INSTALL_LIBDIR} " )
1336+ set (MOSAIC_DYNAMIC_LIB
1337+ "${MOSAIC_LIB_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX } paimon_mosaic_ffi${CMAKE_SHARED_LIBRARY_SUFFIX } "
1338+ )
1339+ set (MOSAIC_CARGO_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR } /mosaic_ep-cargo" )
1340+ set (MOSAIC_CARGO_DYNAMIC_LIB
1341+ "${MOSAIC_CARGO_TARGET_DIR} /release/${CMAKE_SHARED_LIBRARY_PREFIX } paimon_mosaic_ffi${CMAKE_SHARED_LIBRARY_SUFFIX } "
1342+ )
1343+
1344+ file (MAKE_DIRECTORY "${MOSAIC_INCLUDE_DIR} " )
1345+ file (MAKE_DIRECTORY "${MOSAIC_LIB_DIR} " )
1346+
1347+ externalproject_add (
1348+ mosaic_ep
1349+ URL ${MOSAIC_SOURCE_URL}
1350+ URL_HASH "SHA256=${PAIMON_MOSAIC_BUILD_SHA256_CHECKSUM} "
1351+ ${THIRDPARTY_LOG_OPTIONS}
1352+ CONFIGURE_COMMAND ""
1353+ BUILD_COMMAND
1354+ ${CMAKE_COMMAND } -E env CARGO_TARGET_DIR=${MOSAIC_CARGO_TARGET_DIR}
1355+ ${PAIMON_CARGO_EXECUTABLE} build --release --manifest-path
1356+ <SOURCE_DIR >/ffi/Cargo.toml
1357+ COMMAND ${CMAKE_COMMAND } -E copy_if_different ${MOSAIC_CARGO_DYNAMIC_LIB}
1358+ ${MOSAIC_DYNAMIC_LIB}
1359+ INSTALL_COMMAND ${CMAKE_COMMAND } -E copy_directory <SOURCE_DIR >/include
1360+ ${MOSAIC_INCLUDE_DIR}
1361+ BUILD_BYPRODUCTS "${MOSAIC_DYNAMIC_LIB} " )
1362+
1363+ add_library (paimon_mosaic_ffi SHARED IMPORTED GLOBAL )
1364+ set_target_properties (
1365+ paimon_mosaic_ffi
1366+ PROPERTIES IMPORTED_LOCATION "${MOSAIC_DYNAMIC_LIB} "
1367+ IMPORTED_NO_SONAME TRUE
1368+ INTERFACE_INCLUDE_DIRECTORIES "${MOSAIC_INCLUDE_DIR} " )
1369+ add_dependencies (paimon_mosaic_ffi mosaic_ep )
1370+
1371+ install (FILES "${MOSAIC_DYNAMIC_LIB} " DESTINATION ${CMAKE_INSTALL_LIBDIR} )
1372+ endmacro ()
1373+
13171374macro (build_jindosdk_nextarch )
13181375 message (STATUS "Building jindosdk-nextarch from local source" )
13191376
@@ -1953,6 +2010,9 @@ paimon_warn_if_mixed_arrow_dependencies()
19532010resolve_dependency (TBB )
19542011resolve_dependency (glog )
19552012
2013+ if (PAIMON_ENABLE_MOSAIC)
2014+ build_mosaic ()
2015+ endif ()
19562016if (PAIMON_ENABLE_AVRO)
19572017 resolve_dependency (Avro )
19582018endif ()
0 commit comments