1 # CMake configuration for dyninstAPI_RT directory
2 cmake_minimum_required (VERSION 2.6.4)
5 set (DYNINST_ROOT ${PROJECT_SOURCE_DIR}/..)
7 include (${DYNINST_ROOT}/cmake/shared.cmake)
10 ${DYNINST_ROOT}/dyninstAPI_RT/src
11 ${DYNINST_ROOT}/dyninstAPI_RT/h
20 if (PLATFORM MATCHES freebsd)
21 set (SRC_LIST ${SRC_LIST}
30 elseif (PLATFORM MATCHES linux OR PLATFORM MATCHES bgq)
31 set (SRC_LIST ${SRC_LIST}
39 src/RTstatic_ctors_dtors_begin.c
40 src/RTstatic_ctors_dtors_end.c
42 elseif (PLATFORM MATCHES nt OR PLATFORM MATCHES windows)
43 set (SRC_LIST ${SRC_LIST}
54 src/RTtlsgetaddr-x86.S
55 src/RTstatic_ctors_dtors-x86.c
59 src/RTtlsgetaddr-x86.S
60 src/RTstatic_ctors_dtors-x86.c
63 src/RTthread-powerpc.c
64 src/RTthread-powerpc-asm.S
65 src/RTstatic_ctors_dtors-ppc32.c
68 src/RTthread-powerpc.c
69 src/RTthread-powerpc-asm.S
70 src/RTstatic_ctors_dtors-ppc64.c
73 src/RTthread-aarch64.c
74 #src/RTthread-aarch64-asm.S
75 src/RTstatic_ctors_dtors-aarch64.c
79 # We use gcc to compile the various assembly files, but
80 # cmake doesn't default to knowing that gcc can
83 file (GLOB SRC_ASSEMBLY "src/*.S")
84 if(PLATFORM MATCHES bgq OR NEED_NATIVE_ASSEMBER MATCHES YES)
85 set_source_files_properties(${SRC_ASSEMBLY}
89 set_source_files_properties(${SRC_ASSEMBLY}
94 # The arch-specific files other than RTthread-x86 are Unix-only.
96 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
97 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
98 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
99 elseif (PLATFORM MATCHES ppc64)
100 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
101 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64})
102 elseif (PLATFORM MATCHES i386)
103 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
104 elseif (PLATFORM MATCHES ppc32)
105 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
106 elseif (PLATFORM MATCHES aarch64)
107 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_aarch64})
111 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
113 if (NOT PLATFORM MATCHES nt AND NOT PLATFORM MATCHES windows)
114 target_link_libraries (dyninstAPI_RT ${CMAKE_DL_LIBS})
116 target_link_libraries (dyninstAPI_RT ws2_32 dbghelp psapi)
119 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
121 # this should carry over from CMakeLists.txt
122 set_target_properties (dyninstAPI_RT
124 OUTPUT_NAME dyninstAPI_RT
125 SOVERSION ${SOVERSION}
126 VERSION ${LIBVERSION})
129 set_target_properties (dyninstAPI_RT_static
131 OUTPUT_NAME dyninstAPI_RT
132 COMPILE_DEFINITIONS DYNINST_RT_STATIC_LIB)
134 set_target_properties (dyninstAPI_RT PROPERTIES CLEAN_DIRECT_OUTPUT 1)
135 set_target_properties (dyninstAPI_RT_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
138 message(STATUS "dyninstAPI RT library SOVERSION: ${SOVERSION}")
139 message(STATUS "dyninstAPI RT library LIBVERSION: ${LIBVERSION}")
141 get_property(dyninstAPI_RT_location TARGET dyninstAPI_RT PROPERTY LOCATION)
142 message(STATUS "dyninstAPI output location: ${dyninstAPI_RT_location}")
144 FILE (GLOB headers "h/*.h")
146 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static PROPERTIES PUBLIC_HEADER "${headers}")
148 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
149 EXPORT DyninstTargets
150 RUNTIME DESTINATION ${INSTALL_LIB_DIR}
151 LIBRARY DESTINATION ${INSTALL_LIB_DIR}
152 ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
153 PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
155 # Test to see if we want the 32-bit library
159 # The following code is from CheckCCompilerFlag.cmake. It uses a
160 # simple program that can be compiled even if 32-bit includes are
161 # missing; we need to extend it somewhat
163 INCLUDE(CheckCSourceCompiles)
165 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
166 SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
167 SET(CMAKE_C_FLAGS "${_FLAG}")
169 # Addition here: use signal.h
170 CHECK_C_SOURCE_COMPILES("#include <signal.h>
171 int main(void) { return 0; }"
174 # Some compilers do not fail with a bad flag
175 FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
177 FAIL_REGEX "unrecognized .*option" # GNU
178 FAIL_REGEX "unknown .*option" # Clang
179 FAIL_REGEX "ignoring unknown option" # MSVC
180 FAIL_REGEX "warning D9002" # MSVC, any lang
181 FAIL_REGEX "[Uu]nknown option" # HP
182 FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
183 FAIL_REGEX "command option .* is not recognized" # XL
185 SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
186 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
189 message (STATUS "Checking for 32-bit runtime library...")
191 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
192 if (CHECK_RT_LIB_32 AND NOT ${PLATFORM} MATCHES bgq AND NOT ${BUILD_RTLIB_32} MATCHES "OFF")
193 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
194 SET (BUILD_RTLIB_32 ON)
196 message (STATUS "Disabling 32-bit runtime library; change BUILD_RTLIB_32 to ON and install 32-bit build environment to enable")
197 SET (BUILD_RTLIB_32 OFF)
200 if (BUILD_RTLIB_32 MATCHES "ON")
202 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
203 target_link_libraries (dyninstAPI_RT_m32 ${CMAKE_DL_LIBS})
204 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
206 set_target_properties (dyninstAPI_RT_m32
208 COMPILE_FLAGS "-DMUTATEE_32 -m32"
210 OUTPUT_NAME dyninstAPI_RT_m32
211 SOVERSION ${SOVERSION}
212 VERSION ${LIBVERSION})
214 set_target_properties (dyninstAPI_RT_m32_static
216 OUTPUT_NAME dyninstAPI_RT_m32
217 COMPILE_FLAGS "-DMUTATEE_32 -m32"
219 COMPILE_DEFINITIONS DYNINST_RT_STATIC_LIB)
221 set_target_properties (dyninstAPI_RT_m32 PROPERTIES CLEAN_DIRECT_OUTPUT 1)
222 set_target_properties (dyninstAPI_RT_m32_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
224 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
225 EXPORT DyninstTargets
226 RUNTIME DESTINATION ${INSTALL_LIB_DIR}
227 LIBRARY DESTINATION ${INSTALL_LIB_DIR}
228 ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
229 PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
231 install (EXPORT DyninstTargets
232 DESTINATION "${INSTALL_CMAKE_DIR}")