Manually specify RT lib .S files to be built with gcc.
[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 file (GLOB SRC_ASSEMBLY "src/*.S")
55 set_source_files_properties(${SRC_ASSEMBLY}
56         PROPERTIES
57         LANGUAGE C)
58
59 if (PLATFORM MATCHES amd64 OR PLATFORM MATCHES x86_64)
60 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_i386})
61 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_x86_64})
62 elseif (PLATFORM MATCHES ppc64)
63 set (SRC_LIST_mabi ${SRC_LIST} ${SRC_LIST_ppc32})
64 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc64}) 
65 elseif (PLATFORM MATCHES i386)
66 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_i386})
67 elseif (PLATFORM MATCHES ppc32)
68 set (SRC_LIST ${SRC_LIST} ${SRC_LIST_ppc32})
69 endif()
70
71
72 add_library (dyninstAPI_RT SHARED ${SRC_LIST})
73 add_library (dyninstAPI_RT_static STATIC ${SRC_LIST})
74
75 set_target_properties (dyninstAPI_RT
76                       PROPERTIES
77                       SOVERSION ${SOVERSION}
78                       VERSION ${LIBVERSION})
79
80 set_target_properties (dyninstAPI_RT_static
81                       PROPERTIES
82                       OUTPUT_NAME dyninstAPI_RT
83                       SOVERSION ${SOVERSION}
84                       VERSION ${LIBVERSION})
85
86 INSTALL (DIRECTORY h/ DESTINATION include FILES_MATCHING PATTERN "*.h")
87 INSTALL (TARGETS dyninstAPI_RT dyninstAPI_RT_static
88         LIBRARY DESTINATION lib
89         ARCHIVE DESTINATION lib)
90
91 # Test to see if we want the 32-bit library
92
93 if (SRC_LIST_mabi) 
94
95 # The following code is from CheckCCompilerFlag.cmake. It uses a
96 # simple program that can be compiled even if 32-bit includes are 
97 # missing; we need to extend it somewhat
98
99 INCLUDE(CheckCSourceCompiles)
100
101 MACRO (CHECK_C_COMPILER_FLAG_EXTENDED _FLAG _RESULT)
102    SET(SAFE_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
103    SET(CMAKE_C_FLAGS "${_FLAG}")
104
105 # Addition here: use signal.h
106    CHECK_C_SOURCE_COMPILES("#include <signal.h>
107    int main(void) { return 0; }" 
108         ${_RESULT}
109 # End addition
110      # Some compilers do not fail with a bad flag
111      FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
112                                                             # Apple gcc
113      FAIL_REGEX "unrecognized .*option"                     # GNU
114      FAIL_REGEX "unknown .*option"                          # Clang
115      FAIL_REGEX "ignoring unknown option"                   # MSVC
116      FAIL_REGEX "warning D9002"                             # MSVC, any lang
117      FAIL_REGEX "[Uu]nknown option"                         # HP
118      FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
119      FAIL_REGEX "command option .* is not recognized"       # XL
120      )
121    SET(CMAKE_C_FLAGS "${SAFE_CMAKE_C_FLAGS}")
122 ENDMACRO (CHECK_C_COMPILER_FLAG_EXTENDED)
123
124
125 message (STATUS "Checking for 32-bit runtime library...")
126
127 CHECK_C_COMPILER_FLAG_EXTENDED ("-m32" CHECK_RT_LIB_32)
128 if (CHECK_RT_LIB_32)
129 message (STATUS "Enabling 32-bit runtime library; change BUILD_RTLIB_32 to OFF to disable")
130 SET (BUILD_RTLIB_32 ON CACHE STRING "Build 32-bit version of RT library")
131 ELSE ()
132 SET (BUILD_RTLIB_32 OFF CACHE STRING "Build 32-bit version of RT library")
133 ENDIF()
134
135
136 if (BUILD_RTLIB_32 MATCHES "ON")
137
138 add_library (dyninstAPI_RT_m32 SHARED ${SRC_LIST_mabi})
139 add_library (dyninstAPI_RT_m32_static STATIC ${SRC_LIST_mabi})
140
141 set_target_properties (dyninstAPI_RT_m32
142                       PROPERTIES
143                       COMPILE_FLAGS "-m32"
144                       LINK_FLAGS "-m32"
145                       SOVERSION ${SOVERSION}
146                       VERSION ${LIBVERSION})
147
148 set_target_properties (dyninstAPI_RT_m32_static
149                       PROPERTIES
150                       OUTPUT_NAME dyninstAPI_RT_m32
151                       COMPILE_FLAGS "-m32"
152                       LINK_FLAGS "-m32"
153                       SOVERSION ${SOVERSION}
154                       VERSION ${LIBVERSION})
155
156 INSTALL (TARGETS dyninstAPI_RT_m32 dyninstAPI_RT_m32_static
157          LIBRARY DESTINATION lib
158          ARCHIVE DESTINATION lib)
159
160
161 endif()
162 endif()