Import boehm-gc snapshot, taken from
[official-gcc.git] / boehm-gc / CMakeLists.txt
blobd537b8a8465896ea49594f2a6e300cd9bbca395a
2 # Copyright (c) 1994 by Xerox Corporation.  All rights reserved.
3 # Copyright (c) 1996 by Silicon Graphics.  All rights reserved.
4 # Copyright (c) 1998 by Fergus Henderson.  All rights reserved.
5 # Copyright (c) 2000-2010 by Hewlett-Packard Company.  All rights reserved.
6 ##
7 # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
8 # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
9 ##
10 # Permission is hereby granted to use or copy this program
11 # for any purpose,  provided the above notices are retained on all copies.
12 # Permission to modify the code and to distribute modified code is granted,
13 # provided the above notices are retained, and a notice that the code was
14 # modified is included with the above copyright notice.
18 #  get cmake and run:
19 #    cmake -G "Visual Studio 8 2005"
20 #  in the same dir as this file
21 #  this will generate gc.sln
24 SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
26 PROJECT(gc)
28 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
30 ADD_DEFINITIONS("-D_CRT_SECURE_NO_DEPRECATE
31                  -DALL_INTERIOR_POINTERS
32                  -DGC_BUILD
35 IF(APPLE)
36     SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;x86_64" CACHE STRING "Build architectures for Mac OS X" FORCE)
37 ENDIF(APPLE)
39 #LIBATOMIC #TODO
40 #ADD_LIBRARY(atomic_ops STATIC )
41 #SET_TARGET_PROPERTIES(atomic_ops PROPERTIES COMPILE_FLAGS -DNO_DEBUGGING)
44 #LIBGC
46 INCLUDE_DIRECTORIES(include)
47 INCLUDE_DIRECTORIES(libatomic_ops/src)
49 SET(SRC alloc.c reclaim.c allchblk.c misc.c mach_dep.c os_dep.c
50         mark_rts.c headers.c mark.c obj_map.c blacklst.c finalize.c
51         new_hblk.c dbg_mlc.c malloc.c stubborn.c dyn_load.c
52         typd_mlc.c ptr_chck.c gc_cpp.cc mallocx.c checksums.c
53         thread_local_alloc.c)
54 SET(LIBS)
55 OPTION(enable_threads "TODO" NO)
56 IF(enable_threads)
57         FIND_PACKAGE(Threads REQUIRED)
58         MESSAGE("Thread Model: ${CMAKE_THREAD_LIBS_INIT}" )
59         INCLUDE_DIRECTORIES(${Threads_INCLUDE_DIR})
60         SET(LIBS ${LIBS} ${Threads_LIBRARIES})
61 ENDIF(enable_threads)
63 OPTION(enable_parallel_mark "Parallelize marking and free list construction" NO)
65 #IF(Threads_FOUND)
66 #       ADD_DEFINITIONS("")
67 #ELSE
68 #       MESSAGE("Parallel mark requires enable_threads ON" )
69 #ENDIF(Threads_FOUND)
71 IF(enable_parallel_mark)
72 ENDIF(enable_parallel_mark)
74 OPTION(enable_cplusplus "install C++ support" NO)
76 SET(_HOST ${CMAKE_HOST_SYSTEM_PROCESSOR}--${CMAKE_SYSTEM}) #FIXME missing the vendor field.Use lowercase
78 STRING(TOLOWER ${_HOST} HOST)
79 MESSAGE("HOST = ${HOST}")
81 #Thread Detection. Relying on cmake for lib an includes.
82 #TODO check cmake detection
83 IF(CMAKE_USE_PTHREADS_INIT)
84         SET(SRC ${SRC} pthread_start.c pthread_support.c pthread_stop_world.c)
85         IF( "HOST" MATCHES x86-.*-linux.*|ia64-.*-linux.*|i586-.*-linux.*|i686-.*-linux.*|x86_64-.*-linux.*|alpha-.*-linux.*|sparc.*-.*-linux.*)
86                 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
87                 ADD_DEFINITIONS("-D_REENTRANT")
88                 IF (${enable_parallel_mark})
89                         ADD_DEFINITIONS("-DPARALLEL_MARK")
90                 ENDIF()
91                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
92                 MESSAGE("Explicit GC_INIT() calls may be required.")
93         ENDIF()
94         IF ( "HOST" MATCHES .*-.*-linux.*)
95                 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
96                 ADD_DEFINITIONS("-D_REENTRANT")
97         ENDIF()
98         IF ( "HOST" MATCHES .*-.*-aix.*)
99                 ADD_DEFINITIONS("-DGC_AIX_THREADS")
100                 ADD_DEFINITIONS("-D_REENTRANT")
101         ENDIF()
102         IF ( "HOST" MATCHES .*-.*-hpux11.*)
103                 MESSAGE("Only HP/UX 11 POSIX threads are supported.")
104                 ADD_DEFINITIONS("-DGC_HPUX_THREADS")
105                 ADD_DEFINITIONS("-D_POSIX_C_SOURCE=199506L") #TODO test -DVAR=value. Alternative is COMPILE_DEFINITIONS property
106                 IF (${enable_parallel_mark})
107                         ADD_DEFINITIONS("-DPARALLEL_MARK")
108                 ENDIF()
109                 MESSAGE("Explicit GC_INIT() calls may be required.")
110                 ADD_DEFINITIONS("-D_REENTRANT") #TODO
111         ENDIF()
112         IF ( "HOST" MATCHES .*-.*-hpux10.*)
113                 MESSAGE("Only HP/UX 11 POSIX threads are supported.")
114         ENDIF()
115         IF ( "HOST" MATCHES .*-.*-openbsd.*)
116                 ADD_DEFINITIONS("-DGC_OPENBSD_THREADS")
117         ENDIF()
118         IF ( "HOST" MATCHES .*-.*-freebsd.*)
119                 MESSAGE("FreeBSD does not yet fully support threads with Boehm GC.")
120                 ADD_DEFINITIONS("-DGC_FREEBSD_THREADS")
121         ENDIF()
122         IF ( "HOST" MATCHES .*-.*-kfreebsd.*-gnu)
123                 ADD_DEFINITIONS("-DGC_FREEBSD_THREADS")
124                 ADD_DEFINITIONS("-D_REENTRANT")
125                 IF (${enable_parallel_mark})
126                         ADD_DEFINITIONS("-DPARALLEL_MARK")
127                 ENDIF()
128                 ADD_DEFINITIONS(THREAD_LOCAL_ALLOC")
129                 ADD_DEFINITIONS(USE_COMPILER_TLS")
130         ENDIF()
131         IF ( "HOST" MATCHES .*-.*-gnu.*)
132                 ADD_DEFINITIONS("-DGC_GNU_THREADS")
133                 ADD_DEFINITIONS("-D_REENTRANT")
134                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
135         ENDIF()
136         IF ( "HOST" MATCHES .*-.*-netbsd.*)
137                 MESSAGE("Only on NetBSD 2.0 or later.")
138                 ADD_DEFINITIONS("-DGC_NETBSD_THREADS")
139                 ADD_DEFINITIONS("-D_REENTRANT")
140                 ADD_DEFINITIONS("-D_PTHREADS")
141         ENDIF()
142         IF ( "HOST" MATCHES .*-.*-solaris.*)
143                 ADD_DEFINITIONS("-DGC_SOLARIS_THREADS")
144                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
145 #TODO
146 #       if test "$GCC" != yes; then
147 #          CFLAGS="$CFLAGS -O"
148 #          need_atomic_ops_asm=true
149 #        fi
151         ENDIF()
152         IF ( "HOST" MATCHES .*-.*-irix.*)
153                 ADD_DEFINITIONS("-DGC_IRIX_THREADS")
154         ENDIF()
155         IF ( "HOST" MATCHES .*-.*-cygwin.*)
156                 ADD_DEFINITIONS("-DGC_THREADS")
157                 IF (${enable_parallel_mark})
158                         ADD_DEFINITIONS("-DPARALLEL_MARK")
159                 ENDIF()
160                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
162 #TODO
163 #       win32_threads=true
164         ENDIF()
165         IF ( "HOST" MATCHES .*-.*-darwin.*)
166                 ADD_DEFINITIONS("-DGC_DARWIN_THREADS")
167                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
168                 MESSAGE("Explicit GC_INIT() calls may be required.")
169                 SET(SRC ${SRC} darwin_stop_world.c)
170                 IF (${enable_parallel_mark})
171                        ADD_DEFINITIONS("-DPARALLEL_MARK")
172                 ENDIF()
173                 #TODO
174                 #darwin_threads=true
175         ENDIF()
176         IF ( "HOST" MATCHES .*-.*-osf*)
177                 ADD_DEFINITIONS("-DGC_OSF1_THREADS")
178                 IF (${enable_parallel_mark})
179                         ADD_DEFINITIONS("-DPARALLEL_MARK")
180                         ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
181                         MESSAGE("Explicit GC_INIT() calls may be required.")
182                         # May want to enable it in other cases, too.
183                         # Measurements haven't yet been done.
184                 ENDIF()
185         ENDIF()
186         IF ( "HOST" MATCHES .*-.*-linux.*)
187                 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
188                 ADD_DEFINITIONS("-D_REENTRANT")
189         ENDIF()
190 ENDIF(CMAKE_USE_PTHREADS_INIT)
192 IF(CMAKE_USE_WIN32_THREADS_INIT)
193         ADD_DEFINITIONS("-DGC_THREADS")
194         #win32_threads=true   TODO
195         IF (${enable_parallel_mark})
196                 ADD_DEFINITIONS("-DPARALLEL_MARK")
197                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
198         ENDIF()
199         ADD_DEFINITIONS("-DEMPTY_GETENV_RESULTS") #TODO test
200         SET(SRC ${SRC} win32_threads.c)
201 ENDIF(CMAKE_USE_WIN32_THREADS_INIT)
203 OPTION(enable_gcj_support "Support for gcj" NO)
204 IF(enable_gcj_support)
205         ADD_DEFINITIONS("-DGC_GCJ_SUPPORT")
206 ENDIF(enable_gcj_support)
209 ADD_LIBRARY(          gc-lib   STATIC      ${SRC})
210 SET_TARGET_PROPERTIES(gc-lib   PROPERTIES
211                       COMPILE_DEFINITIONS GC_NOT_DLL)
212 #TODO TARGET_LINK_LIBRARIES(...  ...  ${LIBS})
214 ADD_LIBRARY(          gcmt-lib STATIC      ${SRC})
215 SET_TARGET_PROPERTIES(gcmt-lib PROPERTIES
216                       COMPILE_DEFINITIONS GC_NOT_DLL)
218 ADD_LIBRARY(          gcmt-dll  SHARED     ${SRC})
220 IF(WIN32)
221   ADD_EXECUTABLE(cord cord/cordbscs.c cord/cordxtra.c
222                  cord/tests/de.c cord/tests/de_win.c)
223   SET_TARGET_PROPERTIES(cord PROPERTIES WIN32_EXECUTABLE TRUE)
224   SET_TARGET_PROPERTIES(cord    PROPERTIES
225                       COMPILE_DEFINITIONS GC_NOT_DLL)
226   TARGET_LINK_LIBRARIES(cord gc-lib)
227   TARGET_LINK_LIBRARIES(cord gdi32)
228 ENDIF(WIN32)
230 ADD_SUBDIRECTORY(tests)