CMakeLists.txt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. project (dmmlib C)
  2. cmake_minimum_required (VERSION 2.6)
  3. set(APPLICATION_NAME ${PROJECT_NAME})
  4. set(APPLICATION_VERSION_MAJOR 0)
  5. set(APPLICATION_VERSION_MINOR 5)
  6. set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
  7. include(DefineInstallationPaths)
  8. include(DefineOptions.cmake)
  9. include(MacroEnsureOutOfSourceBuild)
  10. macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build. Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.")
  11. if(CMAKE_COMPILER_IS_GNUCC)
  12. add_definitions(-std=c99 -Wall -Wextra -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wconversion -Wstrict-prototypes)
  13. endif(CMAKE_COMPILER_IS_GNUCC)
  14. # Set to debug build if no such choice was made
  15. if(NOT CMAKE_BUILD_TYPE)
  16. set(CMAKE_BUILD_TYPE Debug)
  17. endif(NOT CMAKE_BUILD_TYPE)
  18. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  19. set(WITH_DEBUG ON)
  20. endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
  21. if(WITH_SYSTEM_CALLS STREQUAL "mmap")
  22. set(PAGESIZE_ALIGN ON)
  23. if(NOT DEFINED SYS_ALLOC_SIZE)
  24. message(FATAL_ERROR "You have to set SYS_ALLOC_SIZE by using -DSYS_ALLOC_SIZE={int}.")
  25. endif(NOT DEFINED SYS_ALLOC_SIZE)
  26. endif(WITH_SYSTEM_CALLS STREQUAL "mmap")
  27. # Checking free-list setups
  28. if(RAW_BLOCKS_TYPE STREQUAL "freelist")
  29. set(FL_RB_ONLY ON)
  30. if(FITTING_POLICY STREQUAL "best")
  31. set(BEST_FIT ON)
  32. elseif(FITTING_POLICY STREQUAL "exact")
  33. set(EXACT_FIT ON)
  34. elseif(FITTING_POLICY STREQUAL "first")
  35. set(FIRST_FIT ON)
  36. elseif(FITTING_POLICY STREQUAL "good")
  37. if(NOT DEFINED GOOD_FIT_PERCENTAGE)
  38. message(FATAL_ERROR "You have to set GOOD_FIT_PERCENTAGE by using -DGOOD_FIT_PERCENTAGE={0.f}.")
  39. endif(NOT DEFINED GOOD_FIT_PERCENTAGE)
  40. set(GOOD_FIT ON)
  41. else(FITTING_POLICY STREQUAL "best")
  42. message(FATAL_ERROR "Could not identify the fitting policy of the freelist organization.")
  43. endif(FITTING_POLICY STREQUAL "best")
  44. if(ORDERING_POLICY STREQUAL "address")
  45. set(ADDRESS_ORDERED ON)
  46. elseif(ORDERING_POLICY STREQUAL "fifo")
  47. set(FIFO_ORDERED ON)
  48. elseif(ORDERING_POLICY STREQUAL "lifo")
  49. set(LIFO_ORDERED ON)
  50. elseif(ORDERING_POLICY STREQUAL "size")
  51. set(SIZE_ORDERED ON)
  52. endif(ORDERING_POLICY STREQUAL "address")
  53. if(WITH_COALESCING STREQUAL "fixed")
  54. if(NOT DEFINED MAX_COAL_SIZE)
  55. message(FATAL_ERROR "You have to set MAX_COAL_SIZE by using -DMAX_COAL_SIZE={int}.")
  56. endif(NOT DEFINED MAX_COAL_SIZE)
  57. set(COALESCING_FIXED ON)
  58. elseif(WITH_COALESCING STREQUAL "variable")
  59. if(NOT DEFINED MAX_COAL_SIZE)
  60. message(FATAL_ERROR "You have to set MAX_COAL_SIZE by using -DMAX_COAL_SIZE={int}.")
  61. endif(NOT DEFINED MAX_COAL_SIZE)
  62. set(COALESCING_VARIABLE ON)
  63. endif(WITH_COALESCING STREQUAL "fixed")
  64. if(WITH_SPLITTING STREQUAL "fixed")
  65. if(NOT DEFINED MIN_SPLIT_SIZE)
  66. message(FATAL_ERROR "You have to set MIN_SPLIT_SIZE by using -DMIN_SPLIT_SIZE={int}.")
  67. endif(NOT DEFINED MIN_SPLIT_SIZE)
  68. set(SPLITTING_FIXED ON)
  69. elseif(WITH_SPLITTING STREQUAL "variable")
  70. if(NOT DEFINED MIN_SPLIT_SIZE)
  71. message(FATAL_ERROR "You have to set MIN_SPLIT_SIZE by using -DMIN_SPLIT_SIZE={int}.")
  72. endif(NOT DEFINED MIN_SPLIT_SIZE)
  73. set(WITH_KNOBS ON)
  74. set(SPLITTING_VARIABLE ON)
  75. endif(WITH_SPLITTING STREQUAL "fixed")
  76. if(COALESCE_AFTER_SPLIT)
  77. if(WITH_SPLITTING STREQUAL "never")
  78. message(FATAL_ERROR "You have to set WITH_SPLITTING to fixed or variable if you want to coalesce after split.")
  79. endif(WITH_SPLITTING STREQUAL "never")
  80. if(WITH_COALESCING STREQUAL "never")
  81. message(FATAL_ERROR "You have to set WITH_COALESCING to fixed or variable if you want to coalesce after split.")
  82. endif(WITH_COALESCING STREQUAL "never")
  83. endif(COALESCE_AFTER_SPLIT)
  84. # Checking bitmap setups
  85. elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
  86. set(BITMAP_RB_ONLY ON)
  87. endif(RAW_BLOCKS_TYPE STREQUAL "freelist")
  88. if(STATS STREQUAL "global")
  89. set(WITH_ALLOCATOR_STATS ON)
  90. endif(STATS STREQUAL "global")
  91. set(DMM_DATA_ALIGNMENT "${CMAKE_SIZEOF_VOID_P}")
  92. configure_file (
  93. "${PROJECT_SOURCE_DIR}/config.h.cmake"
  94. "${PROJECT_BINARY_DIR}/dmmlib/config.h"
  95. )
  96. install(
  97. FILES
  98. ${PROJECT_BINARY_DIR}/dmmlib/config.h
  99. DESTINATION
  100. ${INCLUDE_INSTALL_DIR}/dmmlib
  101. COMPONENT
  102. headers
  103. )
  104. include_directories("${PROJECT_BINARY_DIR}")
  105. add_subdirectory(include)
  106. add_subdirectory(src)
  107. if(WITH_EXAMPLES)
  108. add_subdirectory(examples)
  109. endif (WITH_EXAMPLES)
  110. if(WITH_DOC)
  111. add_subdirectory(doc)
  112. endif (WITH_DOC)
  113. message(STATUS "********************************************")
  114. message(STATUS "********** ${PROJECT_NAME} v${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR} build options : **********")
  115. message(STATUS "OS call for memory requests: " ${WITH_SYSTEM_CALLS})
  116. if(NOT WITH_SYSTEM_CALLS STREQUAL "none")
  117. message(STATUS "Default allocation size for OS calls: " ${SYS_ALLOC_SIZE} " bytes")
  118. endif(NOT WITH_SYSTEM_CALLS STREQUAL "none")
  119. message(STATUS "POSIX locking mechanisms: " ${HAVE_LOCKS})
  120. message(STATUS "Raw blocks type: " ${RAW_BLOCKS_TYPE})
  121. if(RAW_BLOCKS_TYPE STREQUAL "freelist")
  122. if(BLOCKS_ORGANIZATION STREQUAL "dll")
  123. message(STATUS "Block organization: Doubly-Linked Lists")
  124. else(BLOCKS_ORGANIZATION STREQUAL "dll")
  125. message(STATUS "Block organization: Singly-Linked Lists")
  126. endif(BLOCKS_ORGANIZATION STREQUAL "dll")
  127. message(STATUS "Fitting policy: " ${FITTING_POLICY})
  128. if(GOOD_FIT)
  129. message(STATUS "Acceptable fit percentage: " ${GOOD_FIT_PERCENTAGE})
  130. endif(GOOD_FIT)
  131. message(STATUS "Ordering policy: " ${ORDERING_POLICY})
  132. message(STATUS "Coalescing: " ${WITH_COALESCING})
  133. if(MAX_COAL_SIZE)
  134. if(WITH_COALESCING STREQUAL "fixed")
  135. message(STATUS " with max. coalescing size: " ${MAX_COAL_SIZE} " bytes")
  136. elseif(WITH_COALESCING STREQUAL "variable")
  137. message(STATUS " with initial max. coalescing size: " ${MAX_COAL_SIZE}
  138. " bytes")
  139. endif(WITH_COALESCING STREQUAL "fixed")
  140. endif(MAX_COAL_SIZE)
  141. message(STATUS "Splitting: " ${WITH_SPLITTING})
  142. if(MIN_SPLIT_SIZE)
  143. if(WITH_SPLITTING STREQUAL "fixed")
  144. message(STATUS " with min. splitting size: " ${MIN_SPLIT_SIZE} " bytes")
  145. elseif(WITH_SPLITTING STREQUAL "variable")
  146. message(STATUS " with initial min. splitting size: "
  147. ${MIN_SPLIT_SIZE} " bytes")
  148. endif(WITH_SPLITTING STREQUAL "fixed")
  149. if(COALESCE_AFTER_SPLIT)
  150. message(STATUS "Coalesce after split: " ${COALESCE_AFTER_SPLIT})
  151. endif(COALESCE_AFTER_SPLIT)
  152. endif(MIN_SPLIT_SIZE)
  153. elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
  154. message(STATUS "Bitmap cell resolution: " ${BITMAP_RESOLUTION} " bytes")
  155. endif(RAW_BLOCKS_TYPE STREQUAL "freelist")
  156. message(STATUS "Have knobs: " ${WITH_KNOBS})
  157. message(STATUS "Have statistics: " ${STATS})
  158. message(STATUS "Requested Size per Block: " ${REQUEST_SIZE_INFO})
  159. message(STATUS "Support for debug functions: " ${WITH_DEBUG})
  160. message(STATUS "Support for memory traces: " ${WITH_MEM_TRACE})
  161. message(STATUS "Support for statistics traces: " ${WITH_STATS_TRACE})
  162. message(STATUS "Support for realloc(): " ${WITH_REALLOC})
  163. message(STATUS "Support for calloc(): " ${WITH_CALLOC})
  164. message(STATUS "Support for memalign(): " ${WITH_MEMALIGN})
  165. message(STATUS "Support to parse dmmlib environment variables: " ${PARSE_ENV})
  166. message(STATUS "********************************************")