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