1include(ExternalProject) 2 3## add lzma with an external project 4set(xz_configure_opts --with-pic --enable-static) 5if (APPLE) 6 ## lzma has some assembly that doesn't work on darwin 7 list(APPEND xz_configure_opts --disable-assembler) 8endif () 9 10list(APPEND xz_configure_opts 11 "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" 12 "CFLAGS=-Wno-implicit-fallthrough -Wno-unused-but-set-variable") 13 14if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL drd) 15 list(APPEND xz_configure_opts --enable-debug) 16endif () 17 18set(XZ_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/xz-4.999.9beta" CACHE FILEPATH "Where to find sources for xz (lzma).") 19if (NOT EXISTS "${XZ_SOURCE_DIR}/configure") 20 message(FATAL_ERROR "Can't find the xz sources. Please check them out to ${XZ_SOURCE_DIR} or modify XZ_SOURCE_DIR.") 21endif () 22 23if (CMAKE_GENERATOR STREQUAL Ninja) 24 ## ninja doesn't understand "$(MAKE)" 25 set(SUBMAKE_COMMAND make) 26else () 27 ## use "$(MAKE)" for submakes so they can use the jobserver, doesn't 28 ## seem to break Xcode... 29 set(SUBMAKE_COMMAND $(MAKE)) 30endif () 31 32FILE(GLOB XZ_ALL_FILES ${XZ_SOURCE_DIR}/*) 33ExternalProject_Add(build_lzma 34 PREFIX xz 35 DOWNLOAD_COMMAND 36 cp -a "${XZ_ALL_FILES}" "<SOURCE_DIR>/" 37 CONFIGURE_COMMAND 38 "<SOURCE_DIR>/configure" ${xz_configure_opts} 39 "--prefix=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz" 40 "--libdir=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib" 41 BUILD_COMMAND 42 ${SUBMAKE_COMMAND} -C src/liblzma 43 INSTALL_COMMAND 44 ${SUBMAKE_COMMAND} -C src/liblzma install 45) 46FILE(GLOB_RECURSE XZ_ALL_FILES_RECURSIVE ${XZ_SOURCE_DIR}/*) 47ExternalProject_Add_Step(build_lzma reclone_src # Names of project and custom step 48 COMMENT "(re)cloning xz source..." # Text printed when step executes 49 DEPENDERS download configure # Steps that depend on this step 50 DEPENDS ${XZ_ALL_FILES_RECURSIVE} # Files on which this step depends 51) 52 53set_source_files_properties( 54 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma.h" 55 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/base.h" 56 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/bcj.h" 57 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/block.h" 58 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/check.h" 59 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/container.h" 60 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/delta.h" 61 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/filter.h" 62 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index.h" 63 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/index_hash.h" 64 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/lzma.h" 65 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/stream_flags.h" 66 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/subblock.h" 67 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/version.h" 68 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include/lzma/vli.h" 69 PROPERTIES GENERATED TRUE) 70 71include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/include") 72 73add_library(lzma STATIC IMPORTED) 74set_target_properties(lzma PROPERTIES IMPORTED_LOCATION 75 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/xz/lib/liblzma.a") 76add_dependencies(lzma build_lzma) 77 78 79## add snappy with an external project 80set(SNAPPY_SOURCE_DIR "${TokuDB_SOURCE_DIR}/third_party/snappy-1.1.2" CACHE FILEPATH "Where to find sources for snappy.") 81if (NOT EXISTS "${SNAPPY_SOURCE_DIR}/CMakeLists.txt") 82 message(FATAL_ERROR "Can't find the snappy sources. Please check them out to ${SNAPPY_SOURCE_DIR} or modify SNAPPY_SOURCE_DIR.") 83endif () 84 85FILE(GLOB SNAPPY_ALL_FILES ${SNAPPY_SOURCE_DIR}/*) 86ExternalProject_Add(build_snappy 87 PREFIX snappy 88 DOWNLOAD_COMMAND 89 cp -a "${SNAPPY_ALL_FILES}" "<SOURCE_DIR>/" 90 CMAKE_ARGS 91 -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> 92 -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} 93 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} 94 -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} 95 -DCMAKE_AR=${CMAKE_AR} 96 -DCMAKE_NM=${CMAKE_NM} 97 -DCMAKE_RANLIB=${CMAKE_RANLIB} 98 -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} 99 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} 100 ${USE_PROJECT_CMAKE_MODULE_PATH} 101) 102FILE(GLOB_RECURSE SNAPPY_ALL_FILES_RECURSIVE ${SNAPPY_SOURCE_DIR}/*) 103ExternalProject_Add_Step(build_snappy reclone_src # Names of project and custom step 104 COMMENT "(re)cloning snappy source..." # Text printed when step executes 105 DEPENDERS download configure # Steps that depend on this step 106 DEPENDS ${SNAPPY_ALL_FILES_RECURSIVE} # Files on which this step depends 107) 108 109include_directories("${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/include") 110 111add_library(snappy STATIC IMPORTED) 112set_target_properties(snappy PROPERTIES IMPORTED_LOCATION 113 "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/snappy/lib/libsnappy.a") 114add_dependencies(snappy build_snappy) 115