Add boost additional versions through 1.59
[dyninst.git] / cmake / packages.cmake
1 if (UNIX)
2   find_package (LibElf)
3   if(NOT LIBELF_FOUND)
4     message(STATUS "No libelf found, attempting to build as external project")
5     cmake_minimum_required (VERSION 2.8.11)
6     include(ExternalProject)
7     ExternalProject_Add(LibElf
8       PREFIX ${CMAKE_BINARY_DIR}/libelf
9       URL http://www.mr511.de/software/libelf-0.8.13.tar.gz
10       CONFIGURE_COMMAND <SOURCE_DIR>/configure --enable-shared --prefix=${CMAKE_BINARY_DIR}/libelf
11       BUILD_COMMAND make
12       INSTALL_COMMAND make install
13       )
14     set(LIBELF_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libelf/include)
15     set(LIBELF_LIBRARIES ${CMAKE_BINARY_DIR}/libelf/lib/libelf.so)
16     set(SHOULD_INSTALL_LIBELF 1)
17   else()
18     set(SHOULD_INSTALL_LIBELF 0)
19   endif()
20
21   add_library(libelf_imp SHARED IMPORTED)
22   set_property(TARGET libelf_imp
23     PROPERTY IMPORTED_LOCATION ${LIBELF_LIBRARIES}) 
24
25   find_package (LibDwarf)
26
27   if(NOT LIBDWARF_FOUND)
28     message(STATUS "No libdwarf found, attempting to build as external project")
29     cmake_minimum_required (VERSION 2.8.11)
30     include(ExternalProject)
31     ExternalProject_Add(LibDwarf
32       PREFIX ${CMAKE_BINARY_DIR}/libdwarf
33       DEPENDS libelf_imp
34       # URL http://reality.sgiweb.org/davea/libdwarf-20130126.tar.gz
35       # URL http://sourceforge.net/p/libdwarf/code/ci/20130126/tarball
36       URL http://www.paradyn.org/libdwarf/libdwarf-20130126.tar.gz
37       # GIT_REPOSITORY git://git.code.sf.net/p/libdwarf/code libdwarf-code
38       # GIT_TAG 20130126
39       CONFIGURE_COMMAND CFLAGS=-I${LIBELF_INCLUDE_DIR} LDFLAGS=-L${CMAKE_BINARY_DIR}/libelf/lib <SOURCE_DIR>/libdwarf/configure --enable-shared
40       BUILD_COMMAND make
41       INSTALL_DIR ${CMAKE_BINARY_DIR}/libdwarf
42       INSTALL_COMMAND mkdir -p <INSTALL_DIR>/include && mkdir -p <INSTALL_DIR>/lib && install <SOURCE_DIR>/libdwarf/libdwarf.h <INSTALL_DIR>/include && install <SOURCE_DIR>/libdwarf/dwarf.h <INSTALL_DIR>/include && install <BINARY_DIR>/libdwarf.so <INSTALL_DIR>/lib
43       )
44     add_dependencies(LibDwarf libelf_imp)
45     target_link_private_libraries(LibDwarf libelf_imp)
46     #ExternalProject_Get_Property(LibDwarf 
47     set(LIBDWARF_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libdwarf/include)
48     set(LIBDWARF_LIBRARIES ${CMAKE_BINARY_DIR}/libdwarf/lib/libdwarf.so)
49   else()
50     # Unfortunately, libdwarf doesn't always link to libelf itself.
51     # (e.g. https://bugzilla.redhat.com/show_bug.cgi?id=1061432)
52     set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARIES} ${LIBELF_LIBRARIES})
53   endif()
54
55   add_library(libdwarf_imp SHARED IMPORTED)
56   set_property(TARGET libdwarf_imp 
57     PROPERTY IMPORTED_LOCATION ${LIBDWARF_LIBRARIES})
58
59   if (NOT USE_GNU_DEMANGLER)
60     find_package (LibIberty)
61
62     if(NOT IBERTY_FOUND)
63       cmake_minimum_required (VERSION 2.8.11)
64       include(ExternalProject)
65       ExternalProject_Add(LibIberty
66         PREFIX ${CMAKE_BINARY_DIR}/binutils
67         URL http://ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz
68         CONFIGURE_COMMAND CFLAGS=-fPIC CPPFLAGS=-fPIC PICFLAG=-fPIC <SOURCE_DIR>/libiberty/configure --prefix=${CMAKE_BINARY_DIR}/libiberty --enable-shared
69         BUILD_COMMAND make all
70         INSTALL_DIR ${CMAKE_BINARY_DIR}/libiberty
71         INSTALL_COMMAND install <BINARY_DIR>/libiberty.a <INSTALL_DIR>
72         )
73       set(IBERTY_LIBRARIES ${CMAKE_BINARY_DIR}/libiberty/libiberty.a)
74     endif()
75
76     message(STATUS "Using libiberty ${IBERTY_LIBRARIES}")
77     add_library(libiberty_imp STATIC IMPORTED)
78     set_property(TARGET libiberty_imp
79       PROPERTY IMPORTED_LOCATION ${IBERTY_LIBRARIES})
80   endif()
81
82   find_package (ThreadDB)
83   include_directories (
84     ${LIBELF_INCLUDE_DIR}
85     ${LIBDWARF_INCLUDE_DIR}
86     )
87 elseif(WIN32)
88   find_package (DIASDK REQUIRED)
89   include_directories(${DIASDK_INCLUDE_DIR})
90 endif()
91
92 if (PLATFORM MATCHES "bgq")
93   # Not a find per se, just a magic include line
94   set (PATH_BGQ "/bgsys/drivers/ppcfloor" CACHE STRING "Path to BG/Q include files")
95   if (NOT (PATH_BGQ STREQUAL ""))
96     include_directories (${PATH_BGQ})
97   endif()
98 endif()
99
100
101 # UPDATE this for newer versions of Boost if you're using
102 # an older CMake and it complains that it can't find Boost
103 set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48" "1.48.0" "1.49" "1.49.0"
104   "1.50" "1.50.0" "1.51" "1.51.0" "1.52" "1.52.0"
105   "1.53" "1.53.0" "1.54" "1.54.0" "1.55" "1.55.0" "1.56" "1.56.0" "1.57" "1.57.0" "1.58" "1.58.0" "1.59" "1.59.0")
106
107 set (Boost_DEBUG ON)
108 set (PATH_BOOST "/usr" CACHE STRING "Path to boost")
109
110 set(Boost_USE_MULTITHREADED ON)
111 set(Boost_USE_STATIC_RUNTIME OFF)
112
113 if (NOT ("${Boost_NO_BOOST_CMAKE}" STREQUAL "OFF"))
114   message(STATUS "Disabling Boost's own CMake--known buggy in many cases")
115   set(Boost_NO_BOOST_CMAKE ON)
116 endif()
117 if (NOT ("${PATH_BOOST}" STREQUAL ""))
118   set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${PATH_BOOST}/lib ${PATH_BOOST}/lib64)
119   set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${PATH_BOOST}/include)
120 endif()
121
122 # Boost 1.40/1.41 are not compatible with each other
123 # so ensure that we don't mix incompatible headers with
124 # the thread library
125 #set (BOOST_MIN_VERSION 1.41.0)
126
127 if(DEFINED PATH_BOOST OR 
128            DEFINED Boost_INCLUDE_DIR OR 
129            DEFINED Boost_LIBRARY_DIR)
130   set(Boost_NO_SYSTEM_PATHS ON)
131 endif()
132
133 find_package (Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS thread system)
134
135 link_directories ( ${Boost_LIBRARY_DIRS} )
136
137 include_directories (
138   ${Boost_INCLUDE_DIRS}
139   )
140
141 message(STATUS "Boost includes: ${Boost_INCLUDE_DIRS}")
142 message(STATUS "Boost library dirs: ${Boost_LIBRARY_DIRS}")
143 message(STATUS "Boost thread library: ${Boost_THREAD_LIBRARY}")
144 message(STATUS "Boost libraries: ${Boost_LIBRARIES}")
145
146 include(${DYNINST_ROOT}/cmake/CheckCXX11Features.cmake)
147 if(NOT HAS_CXX11_AUTO)
148   message(FATAL_ERROR "No support for C++11 auto found. Dyninst requires this compiler feature.")
149 else()
150   message(STATUS "C++11 support found, required flags are: ${CXX11_COMPILER_FLAGS}")
151 endif()
152
153 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}")