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

spielwiese
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
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 -Winline")
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 -Winline")
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
179## Hello Kai: we finally got rid of makeheader :) please adapt the line below
180set(OMALLOC_H "${CMAKE_CURRENT_BINARY_DIR}/omalloc.h")
181omalloc_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})
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
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
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.