WIP commit
[dyninst.git] / dyninstAPI_RT / CMakeLists.txt
1 # CMake configuration for dyninstAPI_RT directory
2
3 include_directories (
4     ${PROJECT_SOURCE_DIR}/dyninstAPI_RT/src
5   )
6
7 set (SRC_LIST
8     src/RTcommon.c 
9     src/RTmemEmulator.c
10     src/RTsignal.c 
11 )
12
13 if (PLATFORM MATCHES freebsd)
14 set (SRC_LIST ${SRC_LIST}
15     src/RTposix.c
16     src/RTfreebsd.c 
17     src/RTheap.c 
18     src/RTheap-freebsd.c 
19     src/RTthread.c 
20     src/RTspace.S 
21 )
22 elseif (PLATFORM MATCHES linux OR PLATFORM MATCHES bgq)
23 set (SRC_LIST ${SRC_LIST}
24     src/RTposix.c 
25     src/RTlinux.c 
26     src/RTheap.c 
27     src/RTheap-linux.c 
28     src/RTthread.c 
29     src/RTspace.S 
30 )
31 endif ()
32
33 set (SRC_LIST_i386
34     src/RTthread-x86.c 
35     src/RTtlsgetaddr-x86.S 
36     src/RTstatic_ctors_dtors-x86.c
37 )
38 set (SRC_LIST_x86_64
39     src/RTthread-x86-64.c 
40     src/RTtlsgetaddr-x86.S 
41     src/RTstatic_ctors_dtors-x86.c
42 )
43 set (SRC_LIST_ppc32
44     src/RTthread-powerpc.c
45     src/RTthread-powerpc-asm.S
46     src/RTstatic_ctors_dtors-ppc32.c
47 )
48 set (SRC_LIST_ppc64
49     src/RTthread-powerpc.c
50     src/RTthread-powerpc-asm.S
51     src/RTstatic_ctors_dtors-ppc64.c                                                                                         
52 )
53
54 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
55 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
56 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
57 elseif (PLATFORM MATCHES ppc64)
58 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
59 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64}) 
60 elseif (PLATFORM MATCHES i386)
61 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
62 elseif (PLATFORM MATCHES ppc32)
63 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
64 endif()
65
66
67 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
68 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
69
70 set_target_properties (dyninstAPI_RT
71                       PROPERTIES
72                       SOVERSION ${SOVERSION}
73                       VERSION ${LIBVERSION})
74
75 set_target_properties (dyninstAPI_RT_static
76                       PROPERTIES
77                       OUTPUT_NAME dyninstAPI_RT
78                       SOVERSION ${SOVERSION}
79                       VERSION ${LIBVERSION})
80
81 INSTALL (DIRECTORY h/ DESTINATION include FILES_MATCHING PATTERN "*.h")
82 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
83         LIBRARY DESTINATION lib
84         ARCHIVE DESTINATION lib)
85
86 # Test to see if we want the 32-bit library
87
88 if (SRC_LIST_mabi) 
89
90 # The following code is from CheckCCompilerFlag.cmake. It uses a
91 # simple program that can be compiled even if 32-bit includes are 
92 # missing; we need to extend it somewhat
93
94 INCLUDE(CheckCSourceCompiles)
95
96 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
97    SET(SAFE_CMAKE_REQUIRED_DEFINITIONS
98    "${CMAKE_REQUIRED_DEFINITIONS}")
99    SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
100 # Addition here: use signal.h
101    CHECK_C_SOURCE_COMPILES("#include <signal.h> \n int main(void) { return 0; }" ${_RESULT}
102 # End addition
103      # Some compilers do not fail with a bad flag
104      FAIL_REGEX "warning: command line option .* is valid for .* but
105    not for C"
106                                                             # Apple
107    gcc
108      FAIL_REGEX "unrecognized .*option"                     # GNU
109      FAIL_REGEX "unknown .*option"                          # Clang
110      FAIL_REGEX "ignoring unknown option"                   # MSVC
111      FAIL_REGEX "warning D9002"                             # MSVC,
112    any lang
113      FAIL_REGEX "[Uu]nknown option"                         # HP
114      FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
115      FAIL_REGEX "command option .* is not recognized"       # XL
116      )
117    SET (CMAKE_REQUIRED_DEFINITIONS
118    "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
119 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
120
121
122 message ("-- Checking for 32-bit runtime library...")
123
124 # For some reason this test borks with HAS_M32
125 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" BUILD_MABI_RTLIB)
126
127 if (BUILD_MABI_RTLIB)
128 message ("--   Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
129 SET (BUILD_RTLIB_32 ON CACHE STRING "Build 32-bit version of RT library")
130
131 if (BUILD_RTLIB_32)
132 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
133 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
134
135 set_target_properties (dyninstAPI_RT_m32
136                       PROPERTIES
137                       COMPILE_FLAGS "-m32"
138                       LINK_FLAGS "-m32"
139                       SOVERSION ${SOVERSION}
140                       VERSION ${LIBVERSION})
141
142 set_target_properties (dyninstAPI_RT_m32_static
143                       PROPERTIES
144                       OUTPUT_NAME dyninstAPI_RT_m32
145                       COMPILE_FLAGS "-m32"
146                       LINK_FLAGS "-m32"
147                       SOVERSION ${SOVERSION}
148                       VERSION ${LIBVERSION})
149 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
150          LIBRARY DESTINATION lib
151          ARCHIVE DESTINATION lib)
152 endif()
153 endif()
154 endif()
155