1 cmake_minimum_required (VERSION 2.6.4)
4 set (DYNINST_ROOT ${PROJECT_SOURCE_DIR})
5 set (CMAKE_SKIP_BUILD_RPATH FALSE)
6 set (CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
7 set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
8 LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
9 "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
10 IF("${isSystemDir}" STREQUAL "-1")
11 set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
14 set(RT_SOURCE_DIR ${DYNINST_ROOT}/dyninstAPI_RT)
15 set(RT_BINARY_DIR ${PROJECT_BINARY_DIR}/dyninstAPI_RT)
17 include (${DYNINST_ROOT}/cmake/shared.cmake)
19 configure_file(cmake/version.h.in common/h/dyninstversion.h)
20 include_directories(${PROJECT_BINARY_DIR})
21 include_directories(${PROJECT_BINARY_DIR}/common/h)
22 set (HEADER_DIRS common
32 if(NOT ${PLATFORM} MATCHES nt)
33 set (HEADER_DIRS ${HEADER_DIRS}
40 foreach (dir ${HEADER_DIRS})
41 include_directories ( ${DYNINST_ROOT}/${dir}/h )
46 ${DYNINST_ROOT}/external
48 set(Boost_USE_STATIC_LIBS OFF)
50 add_subdirectory (common)
51 if(NOT ${PLATFORM} MATCHES nt)
52 add_subdirectory (elf)
53 add_subdirectory (dwarf)
54 add_subdirectory (symlite)
55 add_subdirectory (parseThat)
57 add_subdirectory (instructionAPI)
58 add_subdirectory (symtabAPI)
59 add_subdirectory (parseAPI)
60 add_subdirectory (proccontrol)
61 add_subdirectory (stackwalk)
62 add_subdirectory (patchAPI)
63 if(${SYMREADER} MATCHES symtabAPI)
64 add_subdirectory (dyninstAPI)
65 add_subdirectory (dynC_API)
69 # Build the RT library as a separate project so we can change compilers
70 message(STATUS "Configuring DyninstAPI_RT")
71 file(REMOVE_RECURSE ${RT_BINARY_DIR}/CMakeCache.txt ${RT_BINARY_DIR}/CMakeFiles ${RT_BINARY_DIR}/Makefile)
72 file(MAKE_DIRECTORY ${RT_BINARY_DIR})
73 if (PLATFORM MATCHES bgq)
74 set (RT_C_COMPILER mpicc CACHE STRING "Compiler for runtime library")
76 set (RT_C_COMPILER ${CMAKE_C_COMPILER} CACHE STRING "Compiler for runtime library")
78 set (ENABLE_STATIC_LIBS NO CACHE STRING "Build static libraries as well?")
79 message(STATUS "Configuring RT library")
81 execute_process(WORKING_DIRECTORY ${RT_BINARY_DIR}
82 COMMAND ${CMAKE_COMMAND}
83 -DCMAKE_C_COMPILER=${RT_C_COMPILER}
84 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
85 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
86 -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
87 -DINSTALL_LIB_DIR=${INSTALL_LIB_DIR}
88 -DINSTALL_INCLUDE_DIR=${INSTALL_INCLUDE_DIR}
89 -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
90 -DBUILD_RTLIB_32=${BUILD_RTLIB_32}
91 -DPLATFORM=${PLATFORM}
96 include_external_msproject(DyninstAPI_RT dyninstAPI_RT/dyninstAPI_RT.vcxproj)
97 include_external_msproject(DyninstAPI_RT_static dyninstAPI_RT/dyninstAPI_RT_static.vcxproj)
99 add_custom_target(DyninstRT
102 WORKING_DIRECTORY ${RT_BINARY_DIR}
103 COMMENT "Building DyninstRT")
104 add_dependencies(dyninstAPI DyninstRT)
105 if(TARGET dyninstAPI-static)
106 add_dependencies(dyninstAPI-static DyninstRT)
110 install(SCRIPT "${RT_BINARY_DIR}/cmake_install.cmake")
113 message(STATUS "Skipping DyninstAPI_RT. Be sure to build this library if you're using instrumentation.")
115 set (VERSION_STRING "${DYNINST_MAJOR_VERSION}.${DYNINST_MINOR_VERSION}.${DYNINST_PATCH_VERSION}")
116 set (DYNINST_NAME "DyninstAPI-${VERSION_STRING}")
121 if(EXISTS "${DYNINST_ROOT}/.git/")
122 message(STATUS "Source tree is repository, building archive target")
123 add_custom_target(package ALL)
124 add_custom_command(TARGET package
125 COMMAND ${GIT_EXECUTABLE} archive --prefix="${DYNINST_NAME}/" --format=tar.gz -o "${CMAKE_BINARY_DIR}/${DYNINST_NAME}.tgz" HEAD
126 WORKING_DIRECTORY ${DYNINST_ROOT}
127 COMMENT "Packaging Dyninst")
132 add_custom_target(doc)
133 set(LATEX_DOCS dynC_API dataflowAPI instructionAPI parseAPI patchAPI symtabAPI stackwalk)
134 set(WORD_DOCS proccontrol dyninstAPI)
135 add_custom_target(proccontrol-doc
136 DEPENDS ${CMAKE_SOURCE_DIR}/proccontrol/doc/proccontrol.pdf)
137 add_custom_target(dyninstAPI-doc
138 DEPENDS ${CMAKE_SOURCE_DIR}/dyninstAPI/doc/dyninstAPI.pdf)
139 foreach(COMPONENT ${WORD_DOCS})
140 add_dependencies(doc ${COMPONENT}-doc)
141 set_target_properties(${COMPONENT}-doc PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
142 install(FILES ${CMAKE_SOURCE_DIR}/${COMPONENT}/doc/${COMPONENT}.pdf
143 DESTINATION ${INSTALL_DOC_DIR}
144 RENAME ${COMPONENT}-${VERSION_STRING}.pdf
150 if(PDFLATEX_COMPILER)
151 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/common/doc
152 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/common)
153 foreach(COMPONENT ${LATEX_DOCS})
154 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/${COMPONENT}/doc
155 DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT})
157 file(GLOB_RECURSE DEPS ${CMAKE_CURRENT_SOURCE_DIR}/${COMPONENT}/doc/*.tex ${CMAKE_CURRENT_SOURCE_DIR}/common/doc/*.tex)
159 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.aux
161 COMMAND ${PDFLATEX_COMPILER}
162 ARGS -interaction=batchmode ${COMPONENT}.tex
163 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc
164 COMMENT "Latex (first pass)"
167 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.log
168 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.aux
169 COMMAND ${PDFLATEX_COMPILER}
170 ARGS -interaction=batchmode ${COMPONENT}.tex
171 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc
172 COMMENT "Latex (second pass)"
174 add_custom_target(${COMPONENT}-doc echo
175 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.log
177 add_dependencies(doc ${COMPONENT}-doc)
178 set_target_properties(${COMPONENT}-doc PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1)
179 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${COMPONENT}/doc/${COMPONENT}.pdf
180 DESTINATION ${INSTALL_DOC_DIR}
181 RENAME ${COMPONENT}-${VERSION_STRING}.pdf
186 message(STATUS "LaTeX not found")
191 message(STATUS "Adding Unix-specific dependencies")
192 add_dependencies(dynDwarf libdwarf_imp)
193 add_dependencies(dynElf libelf_imp)
194 message(STATUS "Added libdwarf_imp and libelf_imp dependencies")
195 if (NOT USE_GNU_DEMANGLER)
196 add_dependencies(common libiberty_imp)
198 if(NOT LIBDWARF_FOUND)
199 message(STATUS "Building libdwarf, creating libdwarf dependency on libelf")
200 add_dependencies(libdwarf_imp libelf_imp)
202 if(SHOULD_INSTALL_LIBELF)
203 get_filename_component(ELFDIR "${LIBELF_LIBRARIES}" PATH)
204 file(GLOB LIBELF_INSTALL_FILES ${ELFDIR}/libelf.so*)
205 message(STATUS "Libelf is ${LIBELF_LIBRARIES}")
206 message(STATUS "Installing ${LIBELF_INSTALL_FILES} from ${ELFDIR}")
207 install (FILES ${LIBELF_INSTALL_FILES}
208 DESTINATION "${INSTALL_LIB_DIR}")
210 if(NOT LIBDWARF_FOUND)
211 message(STATUS "Installing ${LIBDWARF_LIBRARIES}")
212 install (FILES ${LIBDWARF_LIBRARIES}
213 DESTINATION "${INSTALL_LIB_DIR}")
218 add_dependencies(common boost)