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