Test whether boost 1.40 on Ubuntu 10 works cleanly now
[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_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   endif()
50
51   add_library(libdwarf_imp SHARED IMPORTED)
52   set_property(TARGET libdwarf_imp 
53     PROPERTY IMPORTED_LOCATION ${LIBDWARF_LIBRARIES})
54
55   if (NOT USE_GNU_DEMANGLER)
56     find_package (LibIberty)
57
58     if(NOT IBERTY_FOUND)
59       cmake_minimum_required (VERSION 2.8.11)
60       include(ExternalProject)
61       ExternalProject_Add(LibIberty
62         PREFIX ${CMAKE_BINARY_DIR}/binutils
63         URL http://ftp.gnu.org/gnu/binutils/binutils-2.23.tar.gz
64         CONFIGURE_COMMAND CFLAGS=-fPIC CPPFLAGS=-fPIC PICFLAG=-fPIC <SOURCE_DIR>/libiberty/configure --prefix=${CMAKE_BINARY_DIR}/libiberty --enable-shared
65         BUILD_COMMAND make all
66         INSTALL_DIR ${CMAKE_BINARY_DIR}/libiberty
67         INSTALL_COMMAND install <BINARY_DIR>/libiberty.a <INSTALL_DIR>
68         )
69       set(IBERTY_LIBRARY ${CMAKE_BINARY_DIR}/libiberty/libiberty.a)
70     endif()
71
72     message(STATUS "Using libiberty ${IBERTY_LIBRARY}")
73     add_library(libiberty_imp STATIC IMPORTED)
74     set_property(TARGET libiberty_imp
75       PROPERTY IMPORTED_LOCATION ${IBERTY_LIBRARY})
76   endif()
77
78   find_package (ThreadDB)
79   include_directories (
80     ${LIBELF_INCLUDE_DIR}
81     ${LIBDWARF_INCLUDE_DIR}
82     )
83 elseif(WIN32)
84   find_package (DIASDK REQUIRED)
85   include_directories(${DIASDK_INCLUDE_DIR})
86 endif()
87
88 if (PLATFORM MATCHES "bgq")
89   # Not a find per se, just a magic include line
90   set (PATH_BGQ "/bgsys/drivers/ppcfloor" CACHE STRING "Path to BG/Q include files")
91   if (NOT (PATH_BGQ STREQUAL ""))
92     include_directories (${PATH_BGQ})
93   endif()
94 endif()
95
96
97 # UPDATE this for newer versions of Boost if you're using
98 # an older CMake and it complains that it can't find Boost
99 set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48" "1.48.0" "1.49" "1.49.0"
100   "1.50" "1.50.0" "1.51" "1.51.0" "1.52" "1.52.0"
101   "1.53" "1.53.0" "1.54" "1.54.0" "1.55" "1.55.0")
102
103 set (Boost_DEBUG ON)
104 set (PATH_BOOST "/usr" CACHE STRING "Path to boost")
105
106 set(Boost_USE_MULTITHREADED ON)
107 set(Boost_USE_STATIC_RUNTIME OFF)
108
109 if (NOT ("${Boost_NO_BOOST_CMAKE}" STREQUAL "OFF"))
110   message(STATUS "Disabling Boost's own CMake--known buggy in many cases")
111   set(Boost_NO_BOOST_CMAKE ON)
112 endif()
113 if (NOT ("${PATH_BOOST}" STREQUAL ""))
114   set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${PATH_BOOST}/lib ${PATH_BOOST}/lib64)
115   set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${PATH_BOOST}/include)
116 endif()
117
118 # Boost 1.40/1.41 are not compatible with each other
119 # so ensure that we don't mix incompatible headers with
120 # the thread library
121 #set (BOOST_MIN_VERSION 1.41.0)
122
123 find_package (Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS thread system)
124
125 link_directories ( ${Boost_LIBRARY_DIRS} )
126
127 include_directories (
128   ${Boost_INCLUDE_DIRS}
129   )
130
131 message(STATUS "Boost includes: ${Boost_INCLUDE_DIRS}")
132 message(STATUS "Boost library dirs: ${Boost_LIBRARY_DIRS}")
133 message(STATUS "Boost thread library: ${Boost_THREAD_LIBRARY}")
134 message(STATUS "Boost libraries: ${Boost_LIBRARIES}")