Clean RT library cmake cache before configuring to work around cmake bug where re...
[dyninst.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.6.4)
2 project (Dyninst)
3
4 set (DYNINST_ROOT ${PROJECT_SOURCE_DIR})
5
6 include (${DYNINST_ROOT}/cmake/shared.cmake)
7
8 if(${PLATFORM} MATCHES nt)
9 set (HEADER_DIRS common
10                  dataflowAPI
11                  dyninstAPI
12                  dynutil
13                  instructionAPI
14                  parseAPI
15                  patchAPI
16                  proccontrol
17                  stackwalk
18                  symtabAPI
19     )
20 else()
21 set (HEADER_DIRS common
22                  dataflowAPI
23                  dwarf
24                  dyninstAPI
25                  dynutil
26                  elf
27                  instructionAPI
28                  parseAPI
29                  patchAPI
30                  proccontrol
31                  stackwalk
32                  symlite
33                  symtabAPI
34     )
35 endif()
36
37 foreach (dir ${HEADER_DIRS})
38   include_directories ( ${DYNINST_ROOT}/${dir}/h )
39 endforeach()
40
41 include_directories (
42                     ${DYNINST_ROOT}
43                     ${DYNINST_ROOT}/external
44   )
45
46 # Component time
47 add_subdirectory (common)
48 if(NOT ${PLATFORM} MATCHES nt)
49     add_subdirectory (elf)
50     add_subdirectory (dwarf)
51     add_subdirectory (symlite)
52 endif()
53 add_subdirectory (instructionAPI)
54 add_subdirectory (symtabAPI)
55 add_subdirectory (parseAPI)
56 add_subdirectory (patchAPI)
57 add_subdirectory (proccontrol)
58 add_subdirectory (stackwalk)
59 add_subdirectory (dyninstAPI)
60
61 #Build the RT library as a seperate project so we can change compilers
62 message(STATUS "Configuring DyninstAPI_RT")
63 set(RT_SOURCE_DIR ${DYNINST_ROOT}/dyninstAPI_RT)
64 set(RT_BINARY_DIR ${PROJECT_BINARY_DIR}/dyninstAPI_RT)
65 file(REMOVE_RECURSE ${RT_BINARY_DIR}/CMakeCache.txt ${RT_BINARY_DIR}/CMakeFiles ${RT_BINARY_DIR}/Makefile ${RT_BINARY_DIR}/Makefile)
66 file(MAKE_DIRECTORY ${RT_BINARY_DIR})
67 if (PLATFORM MATCHES bgq)
68 set (RT_C_COMPILER mpicc)
69 else()
70 set (RT_C_COMPILER ${CMAKE_C_COMPILER})
71 endif()
72
73 execute_process(WORKING_DIRECTORY ${RT_BINARY_DIR}
74                 COMMAND ${CMAKE_COMMAND}
75                 -DCMAKE_C_COMPILER=${RT_C_COMPILER}
76                 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
77                 -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
78                 -DPLATFORM=${PLATFORM}
79                 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
80                 ${RT_SOURCE_DIR})
81 add_custom_target(DyninstRT
82                   ALL
83                   COMMAND ${CMAKE_COMMAND} --build ${RT_BINARY_DIR} --config $<CONFIGURATION>
84                   COMMENT "Building DyninstRT"
85                   VERBATIM)
86 install(CODE "include(\"${RT_BINARY_DIR}/cmake_install.cmake\")")
87
88
89 if(UNIX)
90 add_dependencies(dynDwarf libdwarf_imp)
91 add_dependencies(dynElf libelf_imp)
92 if (NOT USE_GNU_DEMANGLER)
93 add_dependencies(common libiberty_imp)
94 endif()
95 add_dependencies(libdwarf_imp libelf_imp)
96 endif()
97
98 if(NOT ${PLATFORM} MATCHES nt)
99     SET_TARGET_PROPERTIES (
100         common dynElf dynDwarf instructionAPI symtabAPI symLite parseAPI
101         patchAPI pcontrol stackwalk dyninstAPI
102         PROPERTIES
103             SOVERSION ${SOVERSION}
104             VERSION ${LIBVERSION}
105     )
106 else()
107     SET_TARGET_PROPERTIES (
108         common instructionAPI symtabAPI parseAPI
109         patchAPI pcontrol stackwalk dyninstAPI
110         PROPERTIES
111             SOVERSION ${SOVERSION}
112             VERSION ${LIBVERSION}
113     )
114
115 endif()
116
117 if(UNIX)
118 if(SHOULD_INSTALL_LIBELF)
119 get_filename_component(ELFDIR "${LIBELF_LIBRARIES}" PATH)
120 file(GLOB LIBELF_INSTALL_FILES ${ELFDIR}/libelf.so*)
121 message(STATUS "Libelf is ${LIBELF_LIBRARIES}")
122 message(STATUS "Installing ${LIBELF_INSTALL_FILES} from ${ELFDIR}")
123 install (FILES ${LIBELF_INSTALL_FILES}
124         DESTINATION "${INSTALL_LIB_DIR}")
125 endif()
126 if(NOT LIBDWARF_FOUND)
127 message(STATUS "Installing ${LIBDWARF_LIBRARIES}")
128 install (FILES ${LIBDWARF_LIBRARIES}
129         DESTINATION "${INSTALL_LIB_DIR}")
130 endif()
131 endif()
132 install (FILES
133         "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DyninstConfig.cmake"
134         "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DyninstConfigVersion.cmake"
135         DESTINATION "${INSTALL_CMAKE_DIR}")
136 install (EXPORT DyninstTargets
137         DESTINATION "${INSTALL_CMAKE_DIR}")
138
139 configure_file(cmake/DyninstConfig.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DyninstConfig.cmake" @ONLY)
140
141 # And version file
142 configure_file(cmake/DyninstConfigVersion.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DyninstConfigVersion.cmake" @ONLY)