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