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.
7 # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
8 # OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
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.
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
28 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
30 ADD_DEFINITIONS("-D_CRT_SECURE_NO_DEPRECATE
31 -DALL_INTERIOR_POINTERS
36 SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;x86_64" CACHE STRING "Build architectures for Mac OS X" FORCE)
40 #ADD_LIBRARY(atomic_ops STATIC )
41 #SET_TARGET_PROPERTIES(atomic_ops PROPERTIES COMPILE_FLAGS -DNO_DEBUGGING)
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
55 OPTION(enable_threads "TODO" NO)
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})
63 OPTION(enable_parallel_mark "Parallelize marking and free list construction" NO)
68 # MESSAGE("Parallel mark requires enable_threads ON" )
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")
91 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
92 MESSAGE("Explicit GC_INIT() calls may be required.")
94 IF ( "HOST" MATCHES .*-.*-linux.*)
95 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
96 ADD_DEFINITIONS("-D_REENTRANT")
98 IF ( "HOST" MATCHES .*-.*-aix.*)
99 ADD_DEFINITIONS("-DGC_AIX_THREADS")
100 ADD_DEFINITIONS("-D_REENTRANT")
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")
109 MESSAGE("Explicit GC_INIT() calls may be required.")
110 ADD_DEFINITIONS("-D_REENTRANT") #TODO
112 IF ( "HOST" MATCHES .*-.*-hpux10.*)
113 MESSAGE("Only HP/UX 11 POSIX threads are supported.")
115 IF ( "HOST" MATCHES .*-.*-openbsd.*)
116 ADD_DEFINITIONS("-DGC_OPENBSD_THREADS")
117 #FIXME openbsd_threads=true
119 IF ( "HOST" MATCHES .*-.*-freebsd.*)
120 MESSAGE("FreeBSD does not yet fully support threads with Boehm GC.")
121 ADD_DEFINITIONS("-DGC_FREEBSD_THREADS")
123 IF ( "HOST" MATCHES .*-.*-kfreebsd.*-gnu)
124 ADD_DEFINITIONS("-DGC_FREEBSD_THREADS")
125 ADD_DEFINITIONS("-D_REENTRANT")
126 IF (${enable_parallel_mark})
127 ADD_DEFINITIONS("-DPARALLEL_MARK")
129 ADD_DEFINITIONS(THREAD_LOCAL_ALLOC")
130 ADD_DEFINITIONS(USE_COMPILER_TLS")
132 IF ( "HOST" MATCHES .*-.*-gnu.*)
133 ADD_DEFINITIONS("-DGC_GNU_THREADS")
134 ADD_DEFINITIONS("-D_REENTRANT")
135 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
137 IF ( "HOST" MATCHES .*-.*-netbsd.*)
138 MESSAGE("Only on NetBSD 2.0 or later.")
139 ADD_DEFINITIONS("-DGC_NETBSD_THREADS")
140 ADD_DEFINITIONS("-D_REENTRANT")
141 ADD_DEFINITIONS("-D_PTHREADS")
143 IF ( "HOST" MATCHES .*-.*-solaris.*)
144 ADD_DEFINITIONS("-DGC_SOLARIS_THREADS")
145 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
147 # if test "$GCC" != yes; then
148 # CFLAGS="$CFLAGS -O"
149 # need_atomic_ops_asm=true
153 IF ( "HOST" MATCHES .*-.*-irix.*)
154 ADD_DEFINITIONS("-DGC_IRIX_THREADS")
156 IF ( "HOST" MATCHES .*-.*-cygwin.*)
157 ADD_DEFINITIONS("-DGC_THREADS")
158 IF (${enable_parallel_mark})
159 ADD_DEFINITIONS("-DPARALLEL_MARK")
161 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
166 IF ( "HOST" MATCHES .*-.*-darwin.*)
167 ADD_DEFINITIONS("-DGC_DARWIN_THREADS")
168 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
169 MESSAGE("Explicit GC_INIT() calls may be required.")
170 SET(SRC ${SRC} darwin_stop_world.c)
171 IF (${enable_parallel_mark})
172 ADD_DEFINITIONS("-DPARALLEL_MARK")
177 IF ( "HOST" MATCHES .*-.*-osf*)
178 ADD_DEFINITIONS("-DGC_OSF1_THREADS")
179 IF (${enable_parallel_mark})
180 ADD_DEFINITIONS("-DPARALLEL_MARK")
181 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
182 MESSAGE("Explicit GC_INIT() calls may be required.")
183 # May want to enable it in other cases, too.
184 # Measurements haven't yet been done.
187 IF ( "HOST" MATCHES .*-.*-linux.*)
188 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
189 ADD_DEFINITIONS("-D_REENTRANT")
191 ENDIF(CMAKE_USE_PTHREADS_INIT)
193 IF(CMAKE_USE_WIN32_THREADS_INIT)
194 ADD_DEFINITIONS("-DGC_THREADS")
195 #win32_threads=true TODO
196 IF (${enable_parallel_mark})
197 ADD_DEFINITIONS("-DPARALLEL_MARK")
198 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
200 ADD_DEFINITIONS("-DEMPTY_GETENV_RESULTS") #TODO test
201 SET(SRC ${SRC} win32_threads.c)
202 ENDIF(CMAKE_USE_WIN32_THREADS_INIT)
204 OPTION(enable_gcj_support "Support for gcj" NO)
205 IF(enable_gcj_support)
206 #TODO AM_CONDITIONAL(ENABLE_GCJ_SUPPORT, [test x"$enable_gcj_support" != xno])
207 ADD_DEFINITIONS("-DGC_GCJ_SUPPORT")
208 ENDIF(enable_gcj_support)
211 ADD_LIBRARY( gc-lib STATIC ${SRC})
212 SET_TARGET_PROPERTIES(gc-lib PROPERTIES
213 COMPILE_DEFINITIONS GC_NOT_DLL)
214 #TODO TARGET_LINK_LIBRARIES(... ... ${LIBS})
216 ADD_LIBRARY( gcmt-lib STATIC ${SRC})
217 SET_TARGET_PROPERTIES(gcmt-lib PROPERTIES
218 COMPILE_DEFINITIONS GC_NOT_DLL)
220 ADD_LIBRARY( gcmt-dll SHARED ${SRC})
223 ADD_EXECUTABLE(cord cord/cordbscs.c cord/cordxtra.c cord/de.c cord/de_win.c)
224 SET_TARGET_PROPERTIES(cord PROPERTIES WIN32_EXECUTABLE TRUE)
225 SET_TARGET_PROPERTIES(cord PROPERTIES
226 COMPILE_DEFINITIONS GC_NOT_DLL)
227 TARGET_LINK_LIBRARIES(cord gc-lib)
228 TARGET_LINK_LIBRARIES(cord gdi32)
231 ADD_SUBDIRECTORY(tests)