implemented Setup.hs to build boehm cpp libs and install them;
[hs-boehmgc.git] / gc-7.2 / CMakeLists.txt
1 #
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.
15 ##
16
17 #
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
22 #
23
24 SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
25
26 PROJECT(gc)
27
28 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
29
30 ADD_DEFINITIONS("-D_CRT_SECURE_NO_DEPRECATE
31                  -DALL_INTERIOR_POINTERS
32                  -DGC_BUILD
33 ")
34
35 IF(APPLE)
36     SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;x86_64" CACHE STRING "Build architectures for Mac OS X" FORCE)
37 ENDIF(APPLE)
38
39 #LIBATOMIC #TODO
40 #ADD_LIBRARY(atomic_ops STATIC )
41 #SET_TARGET_PROPERTIES(atomic_ops PROPERTIES COMPILE_FLAGS -DNO_DEBUGGING)
42
43
44 #LIBGC
45
46 INCLUDE_DIRECTORIES(include)
47 INCLUDE_DIRECTORIES(libatomic_ops/src)
48
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)
62
63 OPTION(enable_parallel_mark "Parallelize marking and free list construction" NO)
64
65 #IF(Threads_FOUND)
66 #       ADD_DEFINITIONS("")
67 #ELSE
68 #       MESSAGE("Parallel mark requires enable_threads ON" )
69 #ENDIF(Threads_FOUND)
70
71 IF(enable_parallel_mark)
72 ENDIF(enable_parallel_mark)
73
74 OPTION(enable_cplusplus "install C++ support" NO)
75
76 SET(_HOST ${CMAKE_HOST_SYSTEM_PROCESSOR}--${CMAKE_SYSTEM}) #FIXME missing the vendor field.Use lowercase
77
78 STRING(TOLOWER ${_HOST} HOST)
79 MESSAGE("HOST = ${HOST}")
80
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                 #FIXME openbsd_threads=true
118         ENDIF()
119         IF ( "HOST" MATCHES .*-.*-freebsd.*)
120                 MESSAGE("FreeBSD does not yet fully support threads with Boehm GC.")
121                 ADD_DEFINITIONS("-DGC_FREEBSD_THREADS")
122         ENDIF()
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")
128                 ENDIF()
129                 ADD_DEFINITIONS(THREAD_LOCAL_ALLOC")
130                 ADD_DEFINITIONS(USE_COMPILER_TLS")
131         ENDIF()
132         IF ( "HOST" MATCHES .*-.*-gnu.*)
133                 ADD_DEFINITIONS("-DGC_GNU_THREADS")
134                 ADD_DEFINITIONS("-D_REENTRANT")
135                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
136         ENDIF()
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")
142         ENDIF()
143         IF ( "HOST" MATCHES .*-.*-solaris.*)
144                 ADD_DEFINITIONS("-DGC_SOLARIS_THREADS")
145                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
146 #TODO
147 #       if test "$GCC" != yes; then
148 #          CFLAGS="$CFLAGS -O"
149 #          need_atomic_ops_asm=true
150 #        fi
151
152         ENDIF()
153         IF ( "HOST" MATCHES .*-.*-irix.*)
154                 ADD_DEFINITIONS("-DGC_IRIX_THREADS")
155         ENDIF()
156         IF ( "HOST" MATCHES .*-.*-cygwin.*)
157                 ADD_DEFINITIONS("-DGC_THREADS")
158                 IF (${enable_parallel_mark})
159                         ADD_DEFINITIONS("-DPARALLEL_MARK")
160                 ENDIF()
161                 ADD_DEFINITIONS("-DTHREAD_LOCAL_ALLOC")
162
163 #TODO
164 #       win32_threads=true
165         ENDIF()
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")
173                 ENDIF()
174                 #TODO
175                 #darwin_threads=true
176         ENDIF()
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.
185                 ENDIF()
186         ENDIF()
187         IF ( "HOST" MATCHES .*-.*-linux.*)
188                 ADD_DEFINITIONS("-DGC_LINUX_THREADS")
189                 ADD_DEFINITIONS("-D_REENTRANT")
190         ENDIF()
191 ENDIF(CMAKE_USE_PTHREADS_INIT)
192
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")
199         ENDIF()
200         ADD_DEFINITIONS("-DEMPTY_GETENV_RESULTS") #TODO test
201         SET(SRC ${SRC} win32_threads.c)
202 ENDIF(CMAKE_USE_WIN32_THREADS_INIT)
203
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)
209
210
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})
215
216 ADD_LIBRARY(          gcmt-lib STATIC      ${SRC})
217 SET_TARGET_PROPERTIES(gcmt-lib PROPERTIES
218                       COMPILE_DEFINITIONS GC_NOT_DLL)
219
220 ADD_LIBRARY(          gcmt-dll  SHARED     ${SRC})
221
222 IF(WIN32)
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)
229 ENDIF(WIN32)
230
231 ADD_SUBDIRECTORY(tests)