CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. project (dmmlib C)
  2. cmake_minimum_required (VERSION 2.6)
  3. set(APPLICATION_NAME ${PROJECT_NAME})
  4. set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
  5. include(DefineInstallationPaths)
  6. include(DefineOptions.cmake)
  7. include(MacroEnsureOutOfSourceBuild)
  8. 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.")
  9. if(CMAKE_COMPILER_IS_GNUCC)
  10. 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)
  11. endif(CMAKE_COMPILER_IS_GNUCC)
  12. if(WITH_SYSTEM_CALLS STREQUAL "mmap")
  13. set(PAGESIZE_ALIGN ON)
  14. endif(WITH_SYSTEM_CALLS STREQUAL "mmap")
  15. # Checking free-list setups
  16. if(RAW_BLOCKS_TYPE STREQUAL "freelist")
  17. set(FL_RB_ONLY ON)
  18. if(FITTING_POLICY STREQUAL "best")
  19. set(BEST_FIT ON)
  20. elseif(FITTING_POLICY STREQUAL "exact")
  21. set(EXACT_FIT ON)
  22. elseif(FITTING_POLICY STREQUAL "first")
  23. set(FIRST_FIT ON)
  24. elseif(FITTING_POLICY STREQUAL "good")
  25. if(NOT DEFINED GOOD_FIT_PERCENTAGE)
  26. message(FATAL_ERROR "You have to set GOOD_FIT_PERCENTAGE by using -DGOOD_FIT_PERCENTAGE={0.f}.")
  27. endif(NOT DEFINED GOOD_FIT_PERCENTAGE)
  28. set(GOOD_FIT ON)
  29. else(FITTING_POLICY STREQUAL "best")
  30. message(FATAL_ERROR "Could not identify the fitting policy of the freelist organization.")
  31. endif(FITTING_POLICY STREQUAL "best")
  32. if(ORDERING_POLICY STREQUAL "address")
  33. set(ADDRESS_ORDERED ON)
  34. elseif(ORDERING_POLICY STREQUAL "fifo")
  35. set(FIFO_ORDERED ON)
  36. elseif(ORDERING_POLICY STREQUAL "lifo")
  37. set(LIFO_ORDERED ON)
  38. elseif(ORDERING_POLICY STREQUAL "size")
  39. set(SIZE_ORDERED ON)
  40. endif(ORDERING_POLICY STREQUAL "address")
  41. if(WITH_COALESCING STREQUAL "fixed")
  42. if(NOT DEFINED MAX_COALESCE_SIZE)
  43. message(FATAL_ERROR "You have to set MAX_COALESCE_SIZE by using -DMAX_COALESCE_SIZE={int}.")
  44. endif(NOT DEFINED MAX_COALESCE_SIZE)
  45. set(COALESCING_FIXED ON)
  46. elseif(WITH_COALESCING STREQUAL "variable")
  47. if(NOT DEFINED MAX_COALESCE_SIZE)
  48. message(FATAL_ERROR "You have to set MAX_COALESCE_SIZE by using -DMAX_COALESCE_SIZE={int}.")
  49. endif(NOT DEFINED MAX_COALESCE_SIZE)
  50. set(COALESCING_VARIABLE ON)
  51. endif(WITH_COALESCING STREQUAL "fixed")
  52. if(WITH_SPLITTING STREQUAL "fixed")
  53. if(NOT DEFINED MIN_SPLITTING_SIZE)
  54. message(FATAL_ERROR "You have to set MIN_SPLITTING_SIZE by using -DMIN_SPLITTING_SIZE={int}.")
  55. endif(NOT DEFINED MIN_SPLITTING_SIZE)
  56. set(SPLITTING_FIXED ON)
  57. elseif(WITH_SPLITTING STREQUAL "variable")
  58. if(NOT DEFINED MIN_SPLITTING_SIZE)
  59. message(FATAL_ERROR "You have to set MIN_SPLITTING_SIZE by using -DMIN_SPLITTING_SIZE={int}.")
  60. endif(NOT DEFINED MIN_SPLITTING_SIZE)
  61. set(WITH_KNOBS ON)
  62. set(SPLITTING_VARIABLE ON)
  63. endif(WITH_SPLITTING STREQUAL "fixed")
  64. if(COALESCE_AFTER_SPLIT)
  65. if(WITH_SPLITTING STREQUAL "never")
  66. message(FATAL_ERROR "You have to set WITH_SPLITTING to fixed or variable if you want to coalesce after split.")
  67. endif(WITH_SPLITTING STREQUAL "never")
  68. if(WITH_COALESCING STREQUAL "never")
  69. message(FATAL_ERROR "You have to set WITH_COALESCING to fixed or variable if you want to coalesce after split.")
  70. endif(WITH_COALESCING STREQUAL "never")
  71. endif(COALESCE_AFTER_SPLIT)
  72. # Checking bitmap setups
  73. elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
  74. set(BITMAP_RB_ONLY ON)
  75. endif(RAW_BLOCKS_TYPE STREQUAL "freelist")
  76. if(STATS STREQUAL "global")
  77. set(WITH_ALLOCATOR_STATS ON)
  78. endif(STATS STREQUAL "global")
  79. configure_file (
  80. "${PROJECT_SOURCE_DIR}/dmm_config.h.in"
  81. "${PROJECT_BINARY_DIR}/dmm_config.h"
  82. )
  83. include_directories("${PROJECT_BINARY_DIR}")
  84. add_subdirectory(include)
  85. add_subdirectory(src)
  86. if(WITH_EXAMPLES)
  87. add_subdirectory(examples)
  88. endif (WITH_EXAMPLES)
  89. if(WITH_DOC)
  90. add_subdirectory(doc)
  91. endif (WITH_DOC)
  92. message(STATUS "********************************************")
  93. message(STATUS "********** ${PROJECT_NAME} build options : **********")
  94. message(STATUS "OS call for memory requests: " ${WITH_SYSTEM_CALLS})
  95. message(STATUS "POSIX locking mechanisms: " ${HAVE_LOCKS})
  96. message(STATUS "Raw blocks type: " ${RAW_BLOCKS_TYPE})
  97. if(RAW_BLOCKS_TYPE STREQUAL "freelist")
  98. if(BLOCKS_ORGANIZATION STREQUAL "dll")
  99. message(STATUS "Block organization: Doubly-Linked Lists")
  100. else(BLOCKS_ORGANIZATION STREQUAL "dll")
  101. message(STATUS "Block organization: Singly-Linked Lists")
  102. endif(BLOCKS_ORGANIZATION STREQUAL "dll")
  103. message(STATUS "Fitting policy: " ${FITTING_POLICY})
  104. if(GOOD_FIT)
  105. message(STATUS "Acceptable fit percentage: " ${GOOD_FIT_PERCENTAGE})
  106. endif(GOOD_FIT)
  107. message(STATUS "Ordering policy: " ${ORDERING_POLICY})
  108. message(STATUS "Coalescing: " ${WITH_COALESCING})
  109. if(MAX_COALESCE_SIZE)
  110. if(WITH_COALESCING STREQUAL "fixed")
  111. message(STATUS " with max. coalescing size: " ${MAX_COALESCE_SIZE} " bytes")
  112. elseif(WITH_COALESCING STREQUAL "variable")
  113. message(STATUS " with initial max. coalescing size: " ${MAX_COALESCE_SIZE}
  114. " bytes")
  115. endif(WITH_COALESCING STREQUAL "fixed")
  116. endif(MAX_COALESCE_SIZE)
  117. message(STATUS "Splitting: " ${WITH_SPLITTING})
  118. if(MIN_SPLITTING_SIZE)
  119. if(WITH_SPLITTING STREQUAL "fixed")
  120. message(STATUS " with min. spliting size: " ${MIN_SPLITTING_SIZE} " bytes")
  121. elseif(WITH_SPLITTING STREQUAL "variable")
  122. message(STATUS " with initial min. spliting size: "
  123. ${MIN_SPLITTING_SIZE} " bytes")
  124. endif(WITH_SPLITTING STREQUAL "fixed")
  125. if(COALESCE_AFTER_SPLIT)
  126. message(STATUS "Coalesce after split: " ${COALESCE_AFTER_SPLIT})
  127. endif(COALESCE_AFTER_SPLIT)
  128. endif(MIN_SPLITTING_SIZE)
  129. elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
  130. message(STATUS "Bitmap cell resolution: " ${BITMAP_RESOLUTION} " bytes")
  131. endif(RAW_BLOCKS_TYPE STREQUAL "freelist")
  132. message(STATUS "Have statistics: " ${STATS})
  133. message(STATUS "Requested Size per Block: " ${REQUEST_SIZE_INFO})
  134. message(STATUS "Support for debug functions: " ${WITH_DEBUG})
  135. message(STATUS "Adaptivity: " ${WITH_ADAPTIVITY})
  136. message(STATUS "Support for realloc(): " ${WITH_REALLOC})
  137. message(STATUS "********************************************")