source: git/omalloc/CMakeLists.txt @ e6262c

fieker-DuValspielwiese
Last change on this file since e6262c was 8cc501, checked in by Kai Krüger <krueger@…>, 14 years ago
Added files to compile with cmake. Still experimental. Might not work git-svn-id: file:///usr/local/Singular/svn/trunk@13240 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 9.8 KB
Line 
1# -*- mode: cmake; -*-
2project(omalloc)
3
4# have the full monty in makefiles
5set(CMAKE_VERBOSE_MAKEFILE true)
6
7set(V_MAJOR 1)
8set(V_MINOR 24)
9set(V_PATCH RC1)
10
11set(WITH_MALLOC "system")
12
13OPTION(WITH_EXTERNAL_CONFIG_H "use HEADER_FILE for external configuration")
14OPTION(WITH_EXTERNAL_config_c "use C_FILE for external implementations")
15OPTION(WITH_MALLOC "system|dlmalloc|gmalloc|pmalloc|external which malloc to use, default: malloc")
16OPTION(WITH_EXTERNAL_MALLOC_H "use HEADER_FILE for external malloc declaration")
17OPTION(WITH_EXTERNAL_MALLOC_C "use C_FILE for external malloc implementation")
18OPTION(WITH_VALLOC "mmap|system|emulate how to get page-aligned memory, default: use first possible")
19OPTION(WITH_PROVIDE_MALLOC "yes|debug|malloc provide normal|debug|underlying malloc ANSI-C conforming versions of malloc|calloc|realloc|free")
20OPTION(WITH_EMULATE_OMALLOC "provide only omallocs interface, but do not use its features")
21OPTION(WITH_ALIGN "8|sloppy|strict how memory is aligned, default: if possible sloppy, else strict")
22OPTION(WITH_DENSE_BINS "use dense bin distribution")
23OPTION(WITH_INLINE "do not inline")
24OPTION(WITH_DEBUG "disable all debugging facilities")
25OPTION(WITH_TRACK "disable debug tracking functionality")
26OPTION(WITH_TRACK_FL "track file and line numbers")
27OPTION(WITH_TRACK_RETURN "track return addresses")
28OPTION(WITH_TRACK_BACKTRACE "track stack backtraces")
29OPTION(WITH_TRACK_CUSTOM "track custom values")
30OPTION(WITH_INTERNAL_DEBUG "turn on internal debugging")
31
32set(EXTERNAL_CONFIG_SOURCE "")
33set(EXTERNAL_CONFIG_HEADER "")
34
35###########################################################
36# add a path where some libraries might be stored
37set(CMAKE_ADDITIONAL_PATH "$ENV{CMAKE_ADDITIONAL_PATH}"
38    CACHE PATH "Path where many locally installed libraries can be found")
39
40###########################################################
41# No user settings below
42###########################################################
43cmake_minimum_required(VERSION "2.6" FATAL_ERROR)
44
45# check if compiled standalone
46if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
47  set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/modules")
48  set(OM_HAVE_EXTERNAL_CONFIG_H 0)
49  set(OM_TRACK_CUSTOM 0)
50
51else(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
52
53  set(EXTERNAL_CONFIG_HEADER "${CMAKE_SOURCE_DIR}/Singular/omSingularConfig.h")
54  set(OM_HAVE_EXTERNAL_CONFIG_H 1)
55  set(OM_TRACK_CUSTOM 1)
56  message(STATUS "OM_HAVE_EXTERNAL_CONFIG_H='${OM_HAVE_EXTERNAL_CONFIG_H}'")
57endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
58
59#
60set(CMAKE_C_FLAGS "")
61set(CMAKE_CXX_FLAGS "")
62
63set(CMAKE_C_FLAGS_RELEASE "-g -O3 -DNDEBUG")
64set(CMAKE_CXX_FLAGS_RELEASE "-g -O3 -DNDEBUG")
65
66set(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wreturn-type -fno-omit-frame-pointer")
67set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-inline-functions")
68set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -W -Wall -Wextra")
69set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wreturn-type -fno-omit-frame-pointer")
70set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-inline-functions")
71set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -W -Wall -Wextra")
72
73set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_DEBUG} -Werror -pedantic")
74set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_DEBUG} -Werror -pedantic")
75
76include(FindHeader)
77
78check_headers(limits.h)
79check_headers(unistd.h sys/mman.h fcntl.h malloc.h)
80set(HAVE_FCNTL_H 1)
81set(HAVE_SYS_MMAN_H 1)
82
83include(CheckFunctionExists)
84check_funcs(popen readlink getcwd getwd mmap sbrk random)
85
86include (CheckTypeSize)
87check_type_size(int SIZEOF_INT)
88check_type_size(long SIZEOF_LONG)
89check_type_size(void* SIZEOF_VOIDP)
90check_type_size(double SIZEOF_DOUBLE)
91check_type_size(size_t SIZEOF_SIZE_T)
92
93if(NOT ${SIZEOF_LONG} EQUAL ${SIZEOF_VOIDP})
94  message(FATAL_ERROR "need equal sizes for long and void*")
95endif(NOT ${SIZEOF_LONG} EQUAL ${SIZEOF_VOIDP})
96
97if(NOT ${SIZEOF_VOIDP} EQUAL 4)
98  if(NOT ${SIZEOF_VOIDP} EQUAL 8)
99    message(FATAL_ERROR "need void* to be 4 or 8 bytes long")
100  endif(NOT ${SIZEOF_VOIDP} EQUAL 8)
101endif(NOT ${SIZEOF_VOIDP} EQUAL 4)
102
103if(NOT ${SIZEOF_DOUBLE} EQUAL 4)
104  if(NOT ${SIZEOF_DOUBLE} EQUAL 8)
105    message(FATAL_ERROR "need double* to be 4 or 8 bytes long")
106  endif(NOT ${SIZEOF_DOUBLE} EQUAL 8)
107endif(NOT ${SIZEOF_DOUBLE} EQUAL 4)
108
109## which malloc to use
110## OPTION(WITH_MALLOC "system|dlmalloc|gmalloc|pmalloc|external default: malloc")
111include(CreateOmallocHeader)
112include(OMallocMacros)
113
114set(OM_INLINE_DECL "static inline")
115set(OM_INLINE_LOCAL "static inline")
116set(OM_INLINE_IMPL "static inline")
117set(OM_INLINE "static inline")
118set(OM_PROG_ADDR2LINE "addr2line")
119set(HAVE_WORKING_MMAP Yes)
120set(STDC_HEADERS Yes)
121set(OM_GET_RETURN_ADDR_WORKS Yes)
122set(OM_GET_BACKTRACE_WORKS 0)
123set(OM_HAVE_VALLOC_MMAP 1)
124set(OM_HAVE_VALLOC_MALLOC 0)
125set(OM_ALIGN_8 1)
126set(OM_TRACK_FILE_LINE 0)
127set(OM_HAVE_TRACK 1)
128set(OM_TRACK_RETURN 1)
129set(OM_TRACK_BACKTRACE 0)
130set(OM_INTERNAL_DEBUG 0)
131
132
133include_directories(${CMAKE_CURRENT_BINARY_DIR})
134include_directories(${CMAKE_CURRENT_SOURCE_DIR})
135include_directories(${CMAKE_BINARY_DIR})
136include_directories(${CMAKE_SOURCE_DIR})
137
138###
139omalloc_header(OM_MALLOC_HEADER OM_MALLOC_SOURCE
140               OM_HAVE_MALLOC_SOURCE OMALLOC_USES_MALLOC
141               ${WITH_MALLOC})
142message(STATUS "Malloc header        : '${OM_MALLOC_HEADER}'")
143message(STATUS "Malloc source        : '${OM_MALLOC_SOURCE}'")
144message(STATUS "OMALLOC_USES_MALLOC  : '${OMALLOC_USES_MALLOC}'")
145message(STATUS "OM_HAVE_MALLOC_SOURCE: '${OM_HAVE_MALLOC_SOURCE}'")
146
147###
148### configure files
149###
150configure_file(${CMAKE_CURRENT_SOURCE_DIR}/omConfig.h.cmake.in
151  ${CMAKE_CURRENT_BINARY_DIR}/omConfig.h)
152configure_file(${CMAKE_CURRENT_SOURCE_DIR}/omlimits.h.cmake.in
153  ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h)
154configure_file(${OM_MALLOC_HEADER}
155  ${CMAKE_CURRENT_BINARY_DIR}/omMalloc.h)
156
157if( NOT ${EXTERNAL_CONFIG_HEADER} STREQUAL "" )
158  message(STATUS "=============2")
159  configure_file(${EXTERNAL_CONFIG_HEADER}
160    ${CMAKE_CURRENT_BINARY_DIR}/omExternalConfig.h COPYONLY)
161endif( NOT ${EXTERNAL_CONFIG_HEADER} STREQUAL "" )
162
163###
164### compile and Create omTables
165###
166set(omTables_srcs omAllocPrivate.h
167  ${CMAKE_CURRENT_BINARY_DIR}/omConfig.h omTables.c
168  ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h mylimits.h)
169add_executable(omTables ${omTables_srcs})
170set_target_properties(omTables PROPERTIES
171  COMPILE_DEFINIIONS "HAVE_CONFIG_H;OM_GENERATE_INC")
172
173omalloc_create_omtables_inc(OMTABLES_TARGET OMTABLES_INC
174  ${CMAKE_CURRENT_BINARY_DIR}/omTables omTables)
175
176omalloc_create_omtables_h(TARGET_OMTABLES OMTABLES_H
177  ${CMAKE_CURRENT_BINARY_DIR}/omTables omTables)
178
179set(OMALLOC_H "${CMAKE_CURRENT_BINARY_DIR}/omalloc.h")
180omalloc_create_omalloc_h(gen-omalloc-h ${OMALLOC_H}
181  ${CMAKE_CURRENT_SOURCE_DIR}/makeheader
182  ${CMAKE_CURRENT_SOURCE_DIR}/om_Alloc.h ${OMTABLES_H} ${TARGET_OMTABLES})
183set(OMALLOC_H ${OMALLOC_H} PARENT_SCOPE)
184
185message(STATUS "Header file omalloc: '${OMALLOC_H}'")
186set_source_files_properties(omalloc.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
187set_source_files_properties(omalloc_debug.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
188set_source_files_properties(omAllocFunc.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
189set_source_files_properties(omalloc_provide.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
190
191###########################################################
192# set variables with source files first
193set(omalloc_c_srcs
194  omBinPage.c omList.c omAllocEmulate.c
195  omDebug.c om_Alloc.c omDebugCheck.c omOpts.c omGetBackTrace.c
196  omAllocSystem.c omError.c omStats.c omRet2Info.c  omBin.c  omFindExec.c
197  omDebugTrack.c  omalloc_provide.c omAllocFunc.c
198  )
199
200set(omalloc_hdrs
201  ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h
202  ${CMAKE_CURRENT_BINARY_DIR}/omConfig.h
203  mylimits.h om_Alloc.h omList.h omDerivedConfig.h omAllocDecl.h
204  omMemOps.h omDebug.h omOpts.h omInlineDecl.h omAllocPrivate.h
205  omError.h omPage.h omAllocSystem.h omFindExec.h omStats.h omBin.h
206  omDefaultConfig.h omStructs.h omBinPage.h omInline.h omGetBackTrace.h
207  omReturn.h omRet2Info.h omAllocFunc.h)
208
209set(omalloc_srcs ${omalloc_c_srcs} omGetPageSize.h omMallocSystem.h
210# omMmap.c omTables.c
211#gmalloc.c   pmalloc.h pmalloc.c omalloc.c omalloc_debug.c
212#omtTestAlloc.c
213  ${TESTSOURCES}  ${omalloc_hdrs})
214
215if( EXTERNAL_CONFIG_SOURCE)
216  set(GSOURCES ${GSOURCES} omExternalConfig.c)
217endif( EXTERNAL_CONFIG_SOURCE)
218
219if(${OM_MALLOC_SOURCE})
220  set(GSOURCES ${GSOURCES} omMalloc.c)
221endif(${OM_MALLOC_SOURCE})
222
223message(STATUS "omalloc_srcs='${omalloc_srcs}'")
224
225#set(_OMALLOC_TARGET "gen-omalloc")
226#add_custom_target(${_OMALLOC_TARGET} DEPENDS ${OMALLOC_H})
227#set(OMALLOC_TARGET ${_OMALLOC_TARGET} PARENT_SCOPE)
228#set_source_files_properties(${OMALLOC_H} GENERATED)
229
230#set_source_files_properties(${omalloc_c_srcs} PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
231
232###########################################################
233
234###########################################################
235
236###SET_SOURCE_FILES_PROPERTIES(omalloc.c OBJECT_DEPENDS ${OMALLOC_H})
237
238
239
240set(TESTSOURCES "")
241# gmalloc.c
242# dlmalloc.h dlmalloc.c
243
244# define libraries
245
246add_library(omalloc ${OMTABLES_INC} ${OMTABLES_H} ${omalloc_srcs})
247set_target_properties(omalloc PROPERTIES
248  COMPILE_DEFINITIONS HAVE_CONFIG_H)
249add_dependencies(omalloc ${TARGET_OMTABLES})
250add_dependencies(omalloc gen-omalloc-h)
251
252add_library(omalloc_ndebug ${OMALLOC_H} ${OMTABLES_INC} ${OMTABLES_H}
253  ${omalloc_srcs})
254set_target_properties(omalloc_ndebug PROPERTIES
255  COMPILE_DEFINITIONS "HAVE_CONFIG_H;OM_NDEBUG")
256
257add_library(omalloc-small ${OMALLOC_H} omalloc.c)
258set_target_properties(omalloc-small PROPERTIES
259  COMPILE_DEFINITIONS HAVE_CONFIG_H)
260
261add_library(omalloc-small_ndebug ${OMALLOC_H} omalloc.c)
262set_target_properties(omalloc-small_ndebug PROPERTIES
263  COMPILE_DEFINITIONS "HAVE_CONFIG_H;OM_NDEBUG")
264
265###########################################################
266## Install
267install(TARGETS omalloc omalloc_ndebug omalloc-small omalloc-small_ndebug
268  ARCHIVE DESTINATION lib
269)
270install(FILES ${OMALLOC_H} omalloc.c mylimits.h
271  DESTINATION include/Singular/omalloc
272)
273install(FILES ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h
274  DESTINATION include/Singular/omalloc
275)
Note: See TracBrowser for help on using the repository browser.