Bump patch version
[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")
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}")