Merge branch 'release9.2/fixes/make-install-fix' into release9.2/fixes/jenkins-fix
[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     set(LIBDWARF_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libdwarf/include)
46     set(LIBDWARF_LIBRARIES ${CMAKE_BINARY_DIR}/libdwarf/lib/libdwarf.so)
47   else()
48     # Unfortunately, libdwarf doesn't always link to libelf itself.
49     # (e.g. https://bugzilla.redhat.com/show_bug.cgi?id=1061432)
50     set(LIBDWARF_LIBRARIES ${LIBDWARF_LIBRARIES} ${LIBELF_LIBRARIES})
51   endif()
52
53   add_library(libdwarf_imp SHARED IMPORTED)
54   set_property(TARGET libdwarf_imp 
55     PROPERTY IMPORTED_LOCATION ${LIBDWARF_LIBRARIES})
56
57   if (NOT USE_GNU_DEMANGLER)
58     find_package (LibIberty)
59
60     if(NOT IBERTY_FOUND)
61       cmake_minimum_required (VERSION 2.8.11)
62       include(ExternalProject)
63       ExternalProject_Add(LibIberty
64         PREFIX ${CMAKE_BINARY_DIR}/binutils
65         URL http://ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz
66         CONFIGURE_COMMAND CFLAGS=-fPIC CPPFLAGS=-fPIC PICFLAG=-fPIC <SOURCE_DIR>/libiberty/configure --prefix=${CMAKE_BINARY_DIR}/libiberty --enable-shared
67         BUILD_COMMAND make all
68         INSTALL_DIR ${CMAKE_BINARY_DIR}/libiberty
69         INSTALL_COMMAND install <BINARY_DIR>/libiberty.a <INSTALL_DIR>
70         )
71       set(IBERTY_LIBRARIES ${CMAKE_BINARY_DIR}/libiberty/libiberty.a)
72     endif()
73
74     message(STATUS "Using libiberty ${IBERTY_LIBRARIES}")
75     add_library(libiberty_imp STATIC IMPORTED)
76     set_property(TARGET libiberty_imp
77       PROPERTY IMPORTED_LOCATION ${IBERTY_LIBRARIES})
78   endif()
79
80   find_package (ThreadDB)
81   include_directories (
82     ${LIBELF_INCLUDE_DIR}
83     ${LIBDWARF_INCLUDE_DIR}
84     )
85 endif()
86
87 if (PLATFORM MATCHES "bgq")
88   # Not a find per se, just a magic include line
89   set (PATH_BGQ "/bgsys/drivers/ppcfloor" CACHE STRING "Path to BG/Q include files")
90   if (NOT (PATH_BGQ STREQUAL ""))
91     include_directories (${PATH_BGQ})
92   endif()
93 endif()
94
95
96 # UPDATE this for newer versions of Boost if you're using
97 # an older CMake and it complains that it can't find Boost
98 set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48" "1.48.0" "1.49" "1.49.0"
99   "1.50" "1.50.0" "1.51" "1.51.0" "1.52" "1.52.0"
100   "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")
101
102 # set (Boost_DEBUG ON)
103 set (PATH_BOOST "/usr" CACHE STRING "Path to boost")
104
105 set(Boost_USE_MULTITHREADED ON)
106 set(Boost_USE_STATIC_RUNTIME OFF)
107
108 if (NOT ("${Boost_NO_BOOST_CMAKE}" STREQUAL "OFF"))
109   message(STATUS "Disabling Boost's own CMake--known buggy in many cases")
110   set(Boost_NO_BOOST_CMAKE ON)
111 endif()
112 if (NOT ("${PATH_BOOST}" STREQUAL ""))
113   set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${PATH_BOOST}/lib ${PATH_BOOST}/lib64)
114   set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${PATH_BOOST}/include)
115 endif()
116
117 # Boost 1.40/1.41 are not compatible with each other
118 # so ensure that we don't mix incompatible headers with
119 # the thread library
120 #set (BOOST_MIN_VERSION 1.41.0)
121
122 if(DEFINED PATH_BOOST OR 
123            DEFINED Boost_INCLUDE_DIR OR 
124            DEFINED Boost_LIBRARY_DIR)
125   set(Boost_NO_SYSTEM_PATHS ON)
126 endif()
127
128 find_package (Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS thread system)
129
130 link_directories ( ${Boost_LIBRARY_DIRS} )
131
132 include_directories (
133   ${Boost_INCLUDE_DIRS}
134   )
135
136 message(STATUS "Boost includes: ${Boost_INCLUDE_DIRS}")
137 message(STATUS "Boost library dirs: ${Boost_LIBRARY_DIRS}")
138 message(STATUS "Boost thread library: ${Boost_THREAD_LIBRARY}")
139 message(STATUS "Boost libraries: ${Boost_LIBRARIES}")
140
141 include(${DYNINST_ROOT}/cmake/CheckCXX11Features.cmake)
142 if(NOT HAS_CXX11_AUTO)
143   message(FATAL_ERROR "No support for C++11 auto found. Dyninst requires this compiler feature.")
144 else()
145   message(STATUS "C++11 support found, required flags are: ${CXX11_COMPILER_FLAGS}")
146 endif()
147
148 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}")