Added interface to query whether a module already has address range information,...
[dyninst.git] / dyninstAPI_RT / CMakeLists.txt
1 # CMake configuration for dyninstAPI_RT directory
2 cmake_minimum_required (VERSION 2.6.4)
3 project (DyninstRT C)
4
5 set (DYNINST_ROOT ${PROJECT_SOURCE_DIR}/..)
6
7 include (${DYNINST_ROOT}/cmake/shared.cmake)
8
9 include_directories (
10     ${DYNINST_ROOT}/dyninstAPI_RT/src
11     ${DYNINST_ROOT}/dyninstAPI_RT/h
12     ${DYNINST_ROOT}
13   )
14
15 set (SRC_LIST
16     src/RTcommon.c 
17     src/RTmemEmulator.c
18 )
19
20 if (PLATFORM MATCHES freebsd)
21 set (SRC_LIST ${SRC_LIST}
22     src/RTposix.c
23     src/RTfreebsd.c 
24     src/RTheap.c 
25     src/RTheap-freebsd.c 
26     src/RTthread.c 
27     src/RTspace.S 
28     src/RTsignal.c 
29 )
30 elseif (PLATFORM MATCHES linux OR PLATFORM MATCHES bgq)
31 set (SRC_LIST ${SRC_LIST}
32     src/RTposix.c 
33     src/RTlinux.c 
34     src/RTheap.c 
35     src/RTheap-linux.c 
36     src/RTthread.c 
37     src/RTspace.S 
38     src/RTsignal.c
39     src/RTstatic_ctors_dtors_begin.c 
40     src/RTstatic_ctors_dtors_end.c 
41 )
42 elseif (PLATFORM MATCHES nt OR PLATFORM MATCHES windows)
43 set (SRC_LIST ${SRC_LIST}
44     src/RTheap.c 
45     src/RTheap-win.c
46     src/RTwinnt.c
47     src/RTthread.c
48     src/RTthread-x86.c
49 )
50 endif ()
51
52 set (SRC_LIST_i386
53     src/RTthread-x86.c 
54     src/RTtlsgetaddr-x86.S 
55     src/RTstatic_ctors_dtors-x86.c
56 )
57 set (SRC_LIST_x86_64
58     src/RTthread-x86-64.c 
59     src/RTtlsgetaddr-x86.S
60     src/RTstatic_ctors_dtors-x86.c
61 )
62 set (SRC_LIST_ppc32
63     src/RTthread-powerpc.c
64     src/RTthread-powerpc-asm.S
65     src/RTstatic_ctors_dtors-ppc32.c
66 )
67 set (SRC_LIST_ppc64
68     src/RTthread-powerpc.c
69     src/RTthread-powerpc-asm.S
70     src/RTstatic_ctors_dtors-ppc64.c                                                                                         
71 )
72 set (SRC_LIST_aarch64
73     src/RTthread-aarch64.c
74     #src/RTthread-aarch64-asm.S
75     src/RTstatic_ctors_dtors-aarch64.c                                                                                         
76 )
77
78
79 # We use gcc to compile the various assembly files, but
80 # cmake doesn't default to knowing that gcc can
81 # handle .S. 
82 ENABLE_LANGUAGE(ASM)
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}
86         PROPERTIES
87         LANGUAGE ASM)
88 else()
89 set_source_files_properties(${SRC_ASSEMBLY}
90         PROPERTIES
91         LANGUAGE C)
92 endif()
93
94 # The arch-specific files other than RTthread-x86 are Unix-only.
95 if(UNIX)
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})
108 endif()
109 endif()
110
111 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
112
113 if (NOT PLATFORM MATCHES nt AND NOT PLATFORM MATCHES windows)
114     target_link_libraries (dyninstAPI_RT ${CMAKE_DL_LIBS})
115 else() # windows
116     target_link_libraries (dyninstAPI_RT ws2_32 dbghelp psapi)
117 endif()
118
119 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
120
121 # this should carry over from CMakeLists.txt
122 set_target_properties (dyninstAPI_RT
123                       PROPERTIES
124                       OUTPUT_NAME dyninstAPI_RT
125                       SOVERSION ${SOVERSION}
126                       VERSION ${LIBVERSION})
127
128 # this will not
129 set_target_properties (dyninstAPI_RT_static
130                       PROPERTIES
131                       OUTPUT_NAME dyninstAPI_RT
132                       COMPILE_DEFINITIONS DYNINST_RT_STATIC_LIB)
133
134 set_target_properties (dyninstAPI_RT PROPERTIES CLEAN_DIRECT_OUTPUT 1)
135 set_target_properties (dyninstAPI_RT_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
136
137
138 message(STATUS "dyninstAPI RT library SOVERSION: ${SOVERSION}")
139 message(STATUS "dyninstAPI RT library LIBVERSION: ${LIBVERSION}")
140
141 FILE (GLOB headers "h/*.h")
142 # append, you fool!
143 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static PROPERTIES PUBLIC_HEADER "${headers}")
144
145 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
146         EXPORT DyninstTargets
147         RUNTIME DESTINATION ${INSTALL_LIB_DIR}
148         LIBRARY DESTINATION ${INSTALL_LIB_DIR}
149         ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
150         PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
151
152 # Test to see if we want the 32-bit library
153
154 if (SRC_LIST_mabi) 
155
156 # The following code is from CheckCCompilerFlag.cmake. It uses a
157 # simple program that can be compiled even if 32-bit includes are 
158 # missing; we need to extend it somewhat
159
160 INCLUDE(CheckCSourceCompiles)
161
162 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
163    SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
164    SET(CMAKE_C_FLAGS "${_FLAG}")
165
166 # Addition here: use signal.h
167    CHECK_C_SOURCE_COMPILES("#include <signal.h>
168    int main(void) { return 0; }" 
169         ${_RESULT}
170 # End addition
171      # Some compilers do not fail with a bad flag
172      FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
173                                                             # Apple gcc
174      FAIL_REGEX "unrecognized .*option"                     # GNU
175      FAIL_REGEX "unknown .*option"                          # Clang
176      FAIL_REGEX "ignoring unknown option"                   # MSVC
177      FAIL_REGEX "warning D9002"                             # MSVC, any lang
178      FAIL_REGEX "[Uu]nknown option"                         # HP
179      FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
180      FAIL_REGEX "command option .* is not recognized"       # XL
181      )
182    SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
183 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
184
185
186 message (STATUS "Checking for 32-bit runtime library...")
187
188 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
189 if (CHECK_RT_LIB_32 AND NOT ${PLATFORM} MATCHES bgq AND NOT ${BUILD_RTLIB_32} MATCHES "OFF")
190 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
191 SET (BUILD_RTLIB_32 ON)
192 ELSE ()
193 message (STATUS "Disabling 32-bit runtime library; change BUILD_RTLIB_32 to ON and install 32-bit build environment to enable")
194 SET (BUILD_RTLIB_32 OFF)
195 ENDIF()
196
197 if (BUILD_RTLIB_32 MATCHES "ON")
198
199 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
200 target_link_libraries (dyninstAPI_RT_m32 ${CMAKE_DL_LIBS})
201 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
202
203 set_target_properties (dyninstAPI_RT_m32
204                       PROPERTIES
205                       COMPILE_FLAGS "-DMUTATEE_32 -m32"
206                       LINK_FLAGS "-m32"
207                       OUTPUT_NAME dyninstAPI_RT_m32
208                       SOVERSION ${SOVERSION}
209                       VERSION ${LIBVERSION})
210
211 set_target_properties (dyninstAPI_RT_m32_static
212                       PROPERTIES
213                       OUTPUT_NAME dyninstAPI_RT_m32
214                       COMPILE_FLAGS "-DMUTATEE_32 -m32"
215                       LINK_FLAGS "-m32"
216                       COMPILE_DEFINITIONS DYNINST_RT_STATIC_LIB)
217
218 set_target_properties (dyninstAPI_RT_m32 PROPERTIES CLEAN_DIRECT_OUTPUT 1)
219 set_target_properties (dyninstAPI_RT_m32_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
220
221 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
222         EXPORT DyninstTargets
223         RUNTIME DESTINATION ${INSTALL_LIB_DIR}
224         LIBRARY DESTINATION ${INSTALL_LIB_DIR}
225         ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
226         PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
227
228 install (EXPORT DyninstTargets
229   DESTINATION "${INSTALL_CMAKE_DIR}")
230
231 endif()
232 endif()