ThirdPartyBoost.cmake 6.73 KB
Newer Older
1
OPTION(THIRDPARTY_BUILD_BOOST "Build Boost libraries" OFF)
2 3 4
SET(Boost_USE_MULTITHREADED ON CACHE BOOL
    "Search for multithreaded boost libraries")
MARK_AS_ADVANCED(Boost_USE_MULTITHREADED)
5

6 7 8 9
IF (WIN32)
    ADD_DEFINITIONS("-DBOOST_ALL_NO_LIB")
ENDIF()

10 11
IF (THIRDPARTY_BUILD_BOOST)
    INCLUDE(ExternalProject)
12 13

    # Only build the libraries we need
Dave Moxey's avatar
Dave Moxey committed
14
    SET(BOOST_LIB_LIST --with-system --with-iostreams --with-filesystem
Dave Moxey's avatar
Dave Moxey committed
15 16
        --with-program_options --with-date_time --with-thread
        --with-regex)
Dave Moxey's avatar
Dave Moxey committed
17

Dave Moxey's avatar
Dave Moxey committed
18 19
    IF (NOT WIN32)
        # We need -fPIC for 64-bit builds
20 21 22
        IF( CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
            SET(BOOST_FLAGS cxxflags=-fPIC cflags=-fPIC linkflags=-fPIC)
        ENDIF ()
23 24
    ENDIF()

Dave Moxey's avatar
Dave Moxey committed
25
    # Build Boost
26 27
    IF (APPLE)
        SET(TOOLSET darwin)
Dave Moxey's avatar
Dave Moxey committed
28 29 30 31 32 33 34 35
    ELSEIF (WIN32)
        IF (MSVC10)
            SET(TOOLSET msvc-10.0)
        ELSEIF (MSVC11)
            SET(TOOLSET msvc-11.0)
        ELSEIF (MSVC12)
            SET(TOOLSET msvc-12.0)
        ENDIF()
36 37 38
    ELSE(APPLE)
        SET(TOOLSET gcc)
    ENDIF(APPLE)
Dave Moxey's avatar
Dave Moxey committed
39 40
    
    IF (NOT WIN32)
Dave Moxey's avatar
Dave Moxey committed
41 42 43 44 45 46 47 48 49 50 51 52
        EXTERNALPROJECT_ADD(
            boost
            PREFIX ${TPSRC}
            URL ${TPURL}/boost_1_55_0.tar.bz2
            URL_MD5 "d6eef4b4cacb2183f2bf265a5a03a354"
            STAMP_DIR ${TPBUILD}/stamp
            DOWNLOAD_DIR ${TPSRC}
            SOURCE_DIR ${TPBUILD}/boost
            BINARY_DIR ${TPBUILD}/boost
            TMP_DIR ${TPBUILD}/boost-tmp
            INSTALL_DIR ${TPDIST}
            CONFIGURE_COMMAND CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} ./bootstrap.sh --prefix=${TPDIST}
53
            BUILD_COMMAND NO_BZIP2=1 ./b2
Dave Moxey's avatar
Dave Moxey committed
54 55 56 57 58 59
                variant=release
                link=shared
                include=${TPDIST}/include
                linkflags="-L${TPDIST}/lib"
                ${BOOST_FLAGS} ${BOOST_LIB_LIST}
                --layout=system toolset=${TOOLSET} install
60
            INSTALL_COMMAND ""
Dave Moxey's avatar
Dave Moxey committed
61 62 63 64 65 66 67
            )
    ELSE ()
        IF (CMAKE_CL_64)
            SET(ADDRESS_MODEL 64)
        ELSE()
            SET(ADDRESS_MODEL 32)
        ENDIF()
68 69 70
        EXTERNALPROJECT_ADD(
            boost
            PREFIX ${TPSRC}
Chris Cantwell's avatar
Chris Cantwell committed
71 72
            URL ${TPURL}/boost_1_55_0.tar.bz2
            URL_MD5 "d6eef4b4cacb2183f2bf265a5a03a354"
73
            STAMP_DIR ${TPBUILD}/stamp
74
            DOWNLOAD_DIR ${TPSRC}
75
            SOURCE_DIR ${TPBUILD}/boost
76 77 78
            BINARY_DIR ${TPBUILD}/boost
            TMP_DIR ${TPBUILD}/boost-tmp
            INSTALL_DIR ${TPDIST}
79 80
            CONFIGURE_COMMAND call bootstrap.bat
            BUILD_COMMAND b2 variant=release
Dave Moxey's avatar
Dave Moxey committed
81 82 83 84 85 86 87 88 89 90 91
                toolset=${TOOLSET}
                address-model=${ADDRESS_MODEL}
                link=shared
                runtime-link=shared
                -s NO_BZIP2=1
                -s ZLIB_BINARY=zlib
                -s ZLIB_INCLUDE=${TPDIST}/include
                -s ZLIB_LIBPATH=${TPDIST}/lib
                ${BOOST_LIB_LIST}
                --layout=system
                --prefix=${TPDIST} install
92
            INSTALL_COMMAND ""
Dave Moxey's avatar
Dave Moxey committed
93 94
            )
    ENDIF()
Dave Moxey's avatar
Dave Moxey committed
95

96 97
    IF (APPLE)
        EXTERNALPROJECT_ADD_STEP(boost patch-install-path
98
            COMMAND sed -i ".bak" "s|-install_name \"|&${TPDIST}/lib/|" ${TPBUILD}/boost/tools/build/v2/tools/darwin.jam
99 100 101 102 103 104 105 106 107 108
            DEPENDERS build
            DEPENDEES download)
    ENDIF (APPLE)

    # If building ThirdParty zlib, force zlib build before boost
    IF (THIRDPARTY_BUILD_ZLIB)
        ADD_DEPENDENCIES(boost zlib-1.2.7)
    ENDIF(THIRDPARTY_BUILD_ZLIB)

    # Set up CMake variables
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
    SET(Boost_DATE_TIME_LIBRARY boost_date_time)
    SET(Boost_DATE_TIME_LIBRARY_DEBUG boost_date_time)
    SET(Boost_DATE_TIME_LIBRARY_RELEASE boost_date_time)
    SET(Boost_FILESYSTEM_LIBRARY boost_filesystem)
    SET(Boost_FILESYSTEM_LIBRARY_DEBUG boost_filesystem)
    SET(Boost_FILESYSTEM_LIBRARY_RELEASE boost_filesystem)
    SET(Boost_IOSTREAMS_LIBRARY boost_iostreams)
    SET(Boost_IOSTREAMS_LIBRARY_DEBUG boost_iostreams)
    SET(Boost_IOSTREAMS_LIBRARY_RELEASE boost_iostreams)
    SET(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options)
    SET(Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG boost_program_options)
    SET(Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE boost_program_options)
    SET(Boost_REGEX_LIBRARY boost_regex)
    SET(Boost_REGEX_LIBRARY_DEBUG boost_regex)
    SET(Boost_REGEX_LIBRARY_RELEASE boost_regex)
    SET(Boost_SYSTEM_LIBRARY boost_system)
    SET(Boost_SYSTEM_LIBRARY_DEBUG boost_system)
    SET(Boost_SYSTEM_LIBRARY_RELEASE boost_system)
    SET(Boost_THREAD_LIBRARY boost_thread)
    SET(Boost_THREAD_LIBRARY_DEBUG boost_thread)
    SET(Boost_THREAD_LIBRARY_RELEASE boost_thread)
    SET(Boost_INCLUDE_DIRS ${TPSRC}/dist/include)
    SET(Boost_LIBRARY_DIRS ${TPSRC}/dist/lib)
    LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
Dave Moxey's avatar
Dave Moxey committed
133
ELSE (THIRDPARTY_BUILD_BOOST)
134
    ADD_CUSTOM_TARGET(boost ALL)
135
    SET(Boost_DEBUG 0)
136
    SET(Boost_NO_BOOST_CMAKE ON)
137
    #If the user has not set BOOST_ROOT, look in a couple common places first.
138
    IF( NOT BOOST_ROOT )
139 140 141
        SET(TEST_ENV1 $ENV{BOOST_HOME})
        SET(TEST_ENV2 $ENV{BOOST_DIR})
        IF (DEFINED TEST_ENV1)
142
            SET(BOOST_ROOT $ENV{BOOST_HOME})
143
            FIND_PACKAGE( Boost QUIET COMPONENTS thread iostreams date_time
144
                filesystem system program_options regex )
145 146 147 148
        ELSEIF (DEFINED TEST_ENV2)
            SET(BOOST_ROOT $ENV{BOOST_DIR})
            FIND_PACKAGE( Boost QUIET COMPONENTS thread iostreams date_time
                filesystem system program_options regex )
149
        ELSE ()
Dave Moxey's avatar
Dave Moxey committed
150 151
            SET(BOOST_ROOT ${TPDIST})
            FIND_PACKAGE( Boost QUIET COMPONENTS thread iostreams date_time filesystem system program_options regex)
152
        ENDIF()
153
    ELSE()
154
        FIND_PACKAGE( Boost COMPONENTS thread iostreams zlib date_time filesystem system program_options regex)
155
    ENDIF()
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
    IF (Boost_IOSTREAMS_FOUND)
        MESSAGE(STATUS "Found Boost iostreams library: ${Boost_IOSTREAMS_LIBRARY}")
    ENDIF ()
    IF (Boost_THREAD_FOUND)
        MESSAGE(STATUS "Found Boost thread library: ${Boost_THREAD_LIBRARY}")
    ENDIF ()
    IF (Boost_DATE_TIME_FOUND)
        MESSAGE(STATUS "Found Boost date_time library: ${Boost_DATE_TIME_LIBRARY}")
    ENDIF ()
    IF (Boost_FILESYSTEM_FOUND)
        MESSAGE(STATUS "Found Boost filesystem library: ${Boost_FILESYSTEM_LIBRARY}")
    ENDIF ()
    IF (Boost_SYSTEM_FOUND)
        MESSAGE(STATUS "Found Boost system library: ${Boost_SYSTEM_LIBRARY}")
    ENDIF ()
    IF (Boost_PROGRAM_OPTIONS_FOUND)
        MESSAGE(STATUS "Found Boost program_options library: ${Boost_PROGRAM_OPTIONS_LIBRARY}")
    ENDIF ()
    IF (Boost_REGEX_FOUND)
        MESSAGE(STATUS "Found Boost regex library: ${Boost_REGEX_LIBRARY}")
    ENDIF ()
177 178 179
    IF (BOOST_THREAD_LIBRARY)
        MARK_AS_ADVANCED(BOOST_THREAD_LIBRARY)
    ENDIF (BOOST_THREAD_LIBRARY)
180
ENDIF (THIRDPARTY_BUILD_BOOST)
181

182
INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS})