[8cc501] | 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") |
---|
[fff6150] | 68 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -W -Wall -Wextra -Winline") |
---|
[8cc501] | 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") |
---|
[fff6150] | 71 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -W -Wall -Wextra -Winline") |
---|
[8cc501] | 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 | |
---|
[f769719] | 179 | ## Hello Kai: we finally got rid of makeheader :) please adapt the line below |
---|
[8cc501] | 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 |
---|
[f769719] | 183 | ${CMAKE_CURRENT_SOURCE_DIR}/omalloc.h ${OMTABLES_H} ${TARGET_OMTABLES}) |
---|
[8cc501] | 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 |
---|
[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 | |
---|
| 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 | ) |
---|