1 # CMake configuration for dyninstAPI_RT directory
4 ${PROJECT_SOURCE_DIR}/dyninstAPI_RT/src
12 if (PLATFORM MATCHES freebsd)
13 set (SRC_LIST ${SRC_LIST}
22 elseif (PLATFORM MATCHES linux OR PLATFORM MATCHES bgq)
23 set (SRC_LIST ${SRC_LIST}
32 elseif (PLATFORM MATCHES nt OR PLATFORM MATCHES windows)
33 set (SRC_LIST ${SRC_LIST}
44 src/RTtlsgetaddr-x86.S
45 src/RTstatic_ctors_dtors-x86.c
49 src/RTtlsgetaddr-x86.S
50 src/RTstatic_ctors_dtors-x86.c
53 src/RTthread-powerpc.c
54 src/RTthread-powerpc-asm.S
55 src/RTstatic_ctors_dtors-ppc32.c
58 src/RTthread-powerpc.c
59 src/RTthread-powerpc-asm.S
60 src/RTstatic_ctors_dtors-ppc64.c
64 # We use gcc to compile the various assembly files, but
65 # cmake doesn't default to knowing that gcc can
67 file (GLOB SRC_ASSEMBLY "src/*.S")
68 set_source_files_properties(${SRC_ASSEMBLY}
72 # The arch-specific files other than RTthread-x86 are Unix-only.
74 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
75 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
76 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
77 elseif (PLATFORM MATCHES ppc64)
78 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
79 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64})
80 elseif (PLATFORM MATCHES i386)
81 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
82 elseif (PLATFORM MATCHES ppc32)
83 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
87 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
89 if (NOT PLATFORM MATCHES nt AND NOT PLATFORM MATCHES windows)
90 target_link_libraries (dyninstAPI_RT ${CMAKE_DL_LIBS})
92 target_link_libraries (dyninstAPI_RT ws2_32 dbghelp psapi)
95 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
97 # this should carry over from CMakeLists.txt
98 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static
100 SOVERSION ${SOVERSION}
101 VERSION ${LIBVERSION})
104 set_target_properties (dyninstAPI_RT_static
106 OUTPUT_NAME dyninstAPI_RT)
108 message(STATUS "dyninstAPI RT library SOVERSION: ${SOVERSION}")
109 message(STATUS "dyninstAPI RT library LIBVERSION: ${LIBVERSION}")
111 get_property(dyninstAPI_RT_location TARGET dyninstAPI_RT PROPERTY LOCATION)
112 message(STATUS "dyninstAPI output location: ${dyninstAPI_RT_location}")
114 FILE (GLOB headers "h/*.h")
116 set_target_properties (dyninstAPI_RT dyninstAPI_RT_static PROPERTIES PUBLIC_HEADER "${headers}")
118 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
119 EXPORT DyninstTargets
120 RUNTIME DESTINATION ${INSTALL_LIB_DIR}
121 LIBRARY DESTINATION ${INSTALL_LIB_DIR}
122 ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
123 PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})
125 # Test to see if we want the 32-bit library
129 # The following code is from CheckCCompilerFlag.cmake. It uses a
130 # simple program that can be compiled even if 32-bit includes are
131 # missing; we need to extend it somewhat
133 INCLUDE(CheckCSourceCompiles)
135 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
136 SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
137 SET(CMAKE_C_FLAGS "${_FLAG}")
139 # Addition here: use signal.h
140 CHECK_C_SOURCE_COMPILES("#include <signal.h>
141 int main(void) { return 0; }"
144 # Some compilers do not fail with a bad flag
145 FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
147 FAIL_REGEX "unrecognized .*option" # GNU
148 FAIL_REGEX "unknown .*option" # Clang
149 FAIL_REGEX "ignoring unknown option" # MSVC
150 FAIL_REGEX "warning D9002" # MSVC, any lang
151 FAIL_REGEX "[Uu]nknown option" # HP
152 FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
153 FAIL_REGEX "command option .* is not recognized" # XL
155 SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
156 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
159 message (STATUS "Checking for 32-bit runtime library...")
161 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
163 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
164 SET (BUILD_RTLIB_32 ON CACHE STRING "Build 32-bit version of RT library")
166 SET (BUILD_RTLIB_32 OFF CACHE STRING "Build 32-bit version of RT library")
170 if (BUILD_RTLIB_32 MATCHES "ON")
172 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
173 target_link_libraries (dyninstAPI_RT_m32 ${CMAKE_DL_LIBS})
174 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
176 set_target_properties (dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
180 SOVERSION ${SOVERSION}
181 VERSION ${LIBVERSION})
183 set_target_properties (dyninstAPI_RT_m32_static
185 OUTPUT_NAME dyninstAPI_RT_m32)
186 # COMPILE_FLAGS "-m32"
188 # SOVERSION ${SOVERSION}
189 # VERSION ${LIBVERSION})
191 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
192 EXPORT DyninstTargets
193 RUNTIME DESTINATION ${INSTALL_LIB_DIR}
194 LIBRARY DESTINATION ${INSTALL_LIB_DIR}
195 ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
196 PUBLIC_HEADER DESTINATION ${INSTALL_INCLUDE_DIR})