source: git/omalloc/CMakeLists.txt @ 08a955

fieker-DuValspielwiese
Last change on this file since 08a955 was fff6150, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
added -Winline compiler option: warn when a function marked inline could not be substituted, and give the reason for the failure NOTE: see also http://gcc.gnu.org/onlinedocs/gcc/Inline.html
  • Property mode set to 100644
File size: 9.9 KB
RevLine 
[8cc501]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")
[fff6150]68set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -W -Wall -Wextra -Winline")
[8cc501]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")
[fff6150]71set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -W -Wall -Wextra -Winline")
[8cc501]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
[f769719]179## Hello Kai: we finally got rid of makeheader :) please adapt the line below
[8cc501]180set(OMALLOC_H "${CMAKE_CURRENT_BINARY_DIR}/omalloc.h")
181omalloc_create_omalloc_h(gen-omalloc-h ${OMALLOC_H}
182  ${CMAKE_CURRENT_SOURCE_DIR}/makeheader
[f769719]183  ${CMAKE_CURRENT_SOURCE_DIR}/omalloc.h ${OMTABLES_H} ${TARGET_OMTABLES})
[8cc501]184set(OMALLOC_H ${OMALLOC_H} PARENT_SCOPE)
185
186message(STATUS "Header file omalloc: '${OMALLOC_H}'")
187set_source_files_properties(omalloc.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
188set_source_files_properties(omalloc_debug.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
189set_source_files_properties(omAllocFunc.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
190set_source_files_properties(omalloc_provide.c PROPERTIES OBJECT_DEPENDS ${OMALLOC_H})
191
192###########################################################
193# set variables with source files first
194set(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
201set(omalloc_hdrs
202  ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h
203  ${CMAKE_CURRENT_BINARY_DIR}/omConfig.h
[f769719]204  mylimits.h omalloc.h omList.h omDerivedConfig.h omAllocDecl.h
[8cc501]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
210set(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
216if( EXTERNAL_CONFIG_SOURCE)
217  set(GSOURCES ${GSOURCES} omExternalConfig.c)
218endif( EXTERNAL_CONFIG_SOURCE)
219
220if(${OM_MALLOC_SOURCE})
221  set(GSOURCES ${GSOURCES} omMalloc.c)
222endif(${OM_MALLOC_SOURCE})
223
224message(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
241set(TESTSOURCES "")
242# gmalloc.c
243# dlmalloc.h dlmalloc.c
244
245# define libraries
246
247add_library(omalloc ${OMTABLES_INC} ${OMTABLES_H} ${omalloc_srcs})
248set_target_properties(omalloc PROPERTIES
249  COMPILE_DEFINITIONS HAVE_CONFIG_H)
250add_dependencies(omalloc ${TARGET_OMTABLES})
251add_dependencies(omalloc gen-omalloc-h)
252
253add_library(omalloc_ndebug ${OMALLOC_H} ${OMTABLES_INC} ${OMTABLES_H}
254  ${omalloc_srcs})
255set_target_properties(omalloc_ndebug PROPERTIES
256  COMPILE_DEFINITIONS "HAVE_CONFIG_H;OM_NDEBUG")
257
258add_library(omalloc-small ${OMALLOC_H} omalloc.c)
259set_target_properties(omalloc-small PROPERTIES
260  COMPILE_DEFINITIONS HAVE_CONFIG_H)
261
262add_library(omalloc-small_ndebug ${OMALLOC_H} omalloc.c)
263set_target_properties(omalloc-small_ndebug PROPERTIES
264  COMPILE_DEFINITIONS "HAVE_CONFIG_H;OM_NDEBUG")
265
266###########################################################
267## Install
268install(TARGETS omalloc omalloc_ndebug omalloc-small omalloc-small_ndebug
269  ARCHIVE DESTINATION lib
270)
271install(FILES ${OMALLOC_H} omalloc.c mylimits.h
272  DESTINATION include/Singular/omalloc
273)
274install(FILES ${CMAKE_CURRENT_BINARY_DIR}/omlimits.h
275  DESTINATION include/Singular/omalloc
276)
Note: See TracBrowser for help on using the repository browser.