@@ -16,10 +16,7 @@ set(CMAKE_CXX_EXTENSIONS Off)
1616# export compile commands, useful for IDEs
1717set (EXPORT_COMPILE_COMMANDS ON )
1818
19- # #######################################
20- # define options #
21- # options are cached variables https://stackoverflow.com/questions/35744647/disabling-cmake-option-has-no-effect
22- # #######################################
19+ # Define build options
2320# echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
2421option (USE_HUGEPAGE "use transparent hugepage" ON )
2522option (ENABLE_TESTS "whether enable test" ON )
@@ -31,9 +28,7 @@ option(ENABLE_3L_CACHE "enable 3LCache" OFF)
3128set (LOG_LEVEL NONE CACHE STRING "change the logging level" )
3229set_property (CACHE LOG_LEVEL PROPERTY STRINGS INFO WARN ERROR DEBUG VERBOSE VVERBOSE VVVERBOSE )
3330
34- # #######################################
35- # detect platform #
36- # #######################################
31+ # Platform detection
3732if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
3833 message (STATUS "Mac OS X detected, version ${CMAKE_SYSTEM_VERSION} " )
3934 add_definitions (-DOS_DARWIN )
@@ -64,20 +59,14 @@ configure_file(libCacheSim/include/config.h.in libCacheSim/include/config.h)
6459
6560if (SUPPORT_TTL)
6661 add_compile_definitions (SUPPORT_TTL=1 )
67- else ()
68- remove_definitions (SUPPORT_TTL )
69- endif (SUPPORT_TTL )
62+ endif ()
7063
7164if (USE_HUGEPAGE)
7265 add_compile_definitions (USE_HUGEPAGE=1 )
73- else ()
74- remove_definitions (USE_HUGEPAGE )
75- endif (USE_HUGEPAGE )
66+ endif ()
7667
7768if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR} /libCacheSim/cache/eviction/priv" )
7869 add_compile_definitions (INCLUDE_PRIV=1 )
79- else ()
80- remove_definitions (INCLUDE_PRIV )
8170endif ()
8271
8372string (TOLOWER "${LOG_LEVEL} " LOG_LEVEL_LOWER)
@@ -105,19 +94,7 @@ else()
10594 add_compile_definitions (LOGLEVEL=7 )
10695endif ()
10796
108-
109-
110- message (STATUS "CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} " )
111-
112- # string( REPLACE "/DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
113- message (STATUS "SUPPORT TTL ${SUPPORT_TTL} , USE_HUGEPAGE ${USE_HUGEPAGE} , LOGLEVEL ${LOG_LEVEL} , ENABLE_GLCACHE ${ENABLE_GLCACHE} , ENABLE_LRB ${ENABLE_LRB} , ENABLE_3L_CACHE ${ENABLE_3L_CACHE} , OPT_SUPPORT_ZSTD_TRACE ${OPT_SUPPORT_ZSTD_TRACE} " )
114-
115- # add_compile_options(-fsanitize=address)
116- # add_link_options(-fsanitize=address)
117-
118- # #######################################
119- # compiler flags #
120- # #######################################
97+ # Compiler flags
12198set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wno-unused-variable -Wno-unused-function -Wno-unused-parameter -Wno-unused-but-set-variable -Wpedantic -Wformat=2 -Wformat-security -Wshadow -Wwrite-strings -Wstrict-prototypes -Wold-style-definition -Wredundant-decls -Wnested-externs -Wmissing-include-dirs" )
12299
123100set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-deprecated-copy -Wno-unused-variable -Wno-unused-function -Wno-unused-parameter -Wno-unused-but-set-variable -Wno-pedantic -Wformat=2 -Wformat-security -Wshadow -Wwrite-strings -Wmissing-include-dirs" )
@@ -129,9 +106,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-deprecated-co
129106# string(REPLACE "" "" LOCAL_CFLAGS ${CFLAGS})
130107# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} ${LOCAL_CFLAGS}")
131108
132- # #######################################
133- # find dependency #
134- # #######################################
109+ # Find dependencies
135110set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/Modules/" )
136111
137112find_package (GLib REQUIRED )
@@ -155,14 +130,12 @@ if(OPT_SUPPORT_ZSTD_TRACE)
155130
156131 link_libraries (${ZSTD_LIBRARIES} )
157132 message (STATUS "ZSTD_INCLUDE_DIR ${ZSTD_INCLUDE_DIR} , ZSTD_LIBRARIES ${ZSTD_LIBRARIES} " )
158- else ()
159- remove_definitions (SUPPORT_ZSTD_TRACE )
160- endif (OPT_SUPPORT_ZSTD_TRACE )
133+ endif ()
161134
162- # libgoogle-perftools-dev google-perftools
163- # tcmalloc causes trouble with valgrind https://github.com/gperftools/gperftools/issues/792
164- # when using valgrind, we should not compile with tcmalloc
165- # maybe disable tcmalloc under debug model
135+ # TCMalloc ( libgoogle-perftools-dev google-perftools)
136+ # Note: tcmalloc causes trouble with valgrind
137+ # https://github.com/gperftools/gperftools/issues/792
138+ # When using valgrind, we should not compile with tcmalloc
166139if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug" )
167140 find_package (Tcmalloc )
168141
@@ -176,42 +149,42 @@ endif()
176149
177150find_package (Threads )
178151
179- # find_package(Boost REQUIRED)
180- # message(STATUS "boost found? " ${Boost_FOUND} ", library " ${Boost_LIBRARIES} ", header " ${Boost_INCLUDE_DIRS})
181- # include_directories(${Boost_INCLUDE_DIRS})
182152if (ENABLE_GLCACHE)
183153 find_package (xgboost REQUIRED )
184154 include_directories (${XGBOOST_INCLUDE_DIR} )
185155 link_libraries (xgboost::xgboost )
186156 add_compile_definitions (ENABLE_GLCACHE=1 )
187157 message (STATUS "XGBOOST_INCLUDE_DIR=${XGBOOST_INCLUDE_DIR} " )
188- else ()
189- remove_definitions (ENABLE_GLCACHE )
190158endif ()
191159
192- foreach (FEATURE ENABLE_LRB ENABLE_3L_CACHE)
193- if (${FEATURE} )
160+ foreach (FEATURE ENABLE_LRB ENABLE_3L_CACHE)
161+ if (${FEATURE} )
194162 find_path (LIGHTGBM_PATH LightGBM )
195- if (NOT LIGHTGBM_PATH)
163+ if (NOT LIGHTGBM_PATH)
196164 message (FATAL_ERROR "LIGHTGBM_PATH not found" )
197- endif ()
165+ endif ()
198166 include_directories (${LIGHTGBM_PATH} )
199167
200168 find_library (LIGHTGBM_LIB _lightgbm )
201- if (NOT LIGHTGBM_LIB)
169+ if (NOT LIGHTGBM_LIB)
202170 message (FATAL_ERROR "LIGHTGBM_LIB not found" )
203- endif ()
171+ endif ()
204172 link_libraries (${LIGHTGBM_LIB} )
205173 add_compile_definitions (${FEATURE} =1 )
206- else ()
207- remove_definitions (${FEATURE} )
208174 endif ()
209175endforeach ()
210- # link_libraries("-ldl -lm ${LIBS}")
211-
212- # put binary in bin directory
176+ # Put binary in bin directory
213177set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
214178
179+ # Status messages
180+ message (STATUS "CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} " )
181+ message (STATUS "CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} " )
182+ message (STATUS "CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} " )
183+ message (STATUS "SUPPORT TTL ${SUPPORT_TTL} , USE_HUGEPAGE ${USE_HUGEPAGE} " )
184+ message (STATUS "LOGLEVEL ${LOG_LEVEL} , ENABLE_GLCACHE ${ENABLE_GLCACHE} " )
185+ message (STATUS "ENABLE_LRB ${ENABLE_LRB} , ENABLE_3L_CACHE ${ENABLE_3L_CACHE} " )
186+ message (STATUS "OPT_SUPPORT_ZSTD_TRACE ${OPT_SUPPORT_ZSTD_TRACE} " )
187+
215188message (STATUS "<<++=====------------------\\ /------------------=====++>>" )
216189message (STATUS "<<++ libCacheSim summary ++>>" )
217190message (STATUS "<<++=====------------------/\\ ------------------=====++>>" )
@@ -235,9 +208,7 @@ message(STATUS "========================================================")
235208message (STATUS "============= Status of optional features ==============" )
236209message (STATUS "========================================================" )
237210
238- # #######################################
239- # library compilation #
240- # #######################################
211+ # Library compilation
241212# Define include directories for reuse in subdirectories
242213set (libCacheSim_include_dir ${CMAKE_CURRENT_SOURCE_DIR} /libCacheSim/include)
243214set (libCacheSim_binary_include_dir ${CMAKE_CURRENT_BINARY_DIR} /libCacheSim/include)
@@ -255,10 +226,8 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libCacheSim/bin)
255226add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /libCacheSim/traceAnalyzer )
256227add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR} /libCacheSim/mrcProfiler )
257228
258- # #######################################
259- # library install #
260- # #######################################
261- # compile a single library
229+ # Library installation
230+ # Compile a single library
262231file (GLOB LIB_SOURCE ${PROJECT_SOURCE_DIR} /libCacheSim/*.c )
263232
264233file (GLOB cache_source
@@ -274,50 +243,38 @@ file(GLOB cache_source
274243if (EXISTS ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/fifo)
275244 file (GLOB fifo_source
276245 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/fifo/*.c )
277- set (cache_source
278- ${cache_source} ${fifo_source}
279- )
246+ set (cache_source ${cache_source} ${fifo_source} )
280247endif ()
281248
282249if (EXISTS ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/belady)
283250 file (GLOB belady_source
284251 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/belady/*.c )
285- set (cache_source
286- ${cache_source} ${belady_source}
287- )
252+ set (cache_source ${cache_source} ${belady_source} )
288253endif ()
289254
290255if (EXISTS ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/priv)
291256 file (GLOB priv_source
292257 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/priv/*.c )
293- set (cache_source
294- ${cache_source} ${priv_source}
295- )
258+ set (cache_source ${cache_source} ${priv_source} )
296259endif ()
297260
298261if (ENABLE_GLCACHE)
299262 file (GLOB GLCache_source
300263 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/GLCache/*.c )
301- set (cache_source
302- ${cache_source} ${GLCache_source}
303- )
304- endif (ENABLE_GLCACHE )
264+ set (cache_source ${cache_source} ${GLCache_source} )
265+ endif ()
305266
306267if (ENABLE_LRB)
307268 file (GLOB LRB_source
308269 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/LRB/*.cpp )
309- set (cache_source
310- ${cache_source} ${LRB_source}
311- )
312- endif (ENABLE_LRB )
270+ set (cache_source ${cache_source} ${LRB_source} )
271+ endif ()
313272
314273if (ENABLE_3L_CACHE)
315274 file (GLOB ThreeLCache_source
316275 ${PROJECT_SOURCE_DIR} /libCacheSim/cache/eviction/3LCache/*.cpp )
317- set (cache_source
318- ${cache_source} ${ThreeLCache_source}
319- )
320- endif (ENABLE_3L_CACHE )
276+ set (cache_source ${cache_source} ${ThreeLCache_source} )
277+ endif ()
321278
322279set (reader_source
323280 ${PROJECT_SOURCE_DIR} /libCacheSim/traceReader/reader.c
@@ -329,10 +286,9 @@ set(reader_source
329286)
330287
331288if (OPT_SUPPORT_ZSTD_TRACE)
332- set (reader_source
333- ${reader_source} ${PROJECT_SOURCE_DIR} /libCacheSim/traceReader/generalReader/zstdReader.c
334- )
335- endif (OPT_SUPPORT_ZSTD_TRACE )
289+ set (reader_source ${reader_source}
290+ ${PROJECT_SOURCE_DIR} /libCacheSim/traceReader/generalReader/zstdReader.c)
291+ endif ()
336292
337293file (GLOB dataStructure_source
338294 ${PROJECT_SOURCE_DIR} /libCacheSim/dataStructure/*.c
@@ -348,27 +304,23 @@ file(GLOB utils_source
348304 ${PROJECT_SOURCE_DIR} /libCacheSim/utils/*.c
349305)
350306
351- set (LIB_SOURCE ${LIB_SOURCE} ${cache_source} ${reader_source} ${dataStructure_source} ${profiler_source} ${utils_source} )
307+ set (LIB_SOURCE ${LIB_SOURCE} ${cache_source} ${reader_source}
308+ ${dataStructure_source} ${profiler_source} ${utils_source} )
352309
353- # ##################
310+ # Build configuration
354311# # https://stackoverflow.com/questions/32469953/why-is-cmake-designed-so-that-it-removes-runtime-path-when-installing
355312SET (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE )
356313
357314add_library (${PROJECT_NAME} ${LIB_SOURCE} )
358- # target_compile_options(${PROJECT_NAME} PRIVATE -fPIC)
359315target_link_options (${PROJECT_NAME} PRIVATE -Wl,--export-dynamic )
360-
361-
362- # add_library(${PROJECT_NAME} SHARED ${LIB_SOURCE})
363316set_target_properties (${PROJECT_NAME} PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} )
364317set_target_properties (${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C )
365318set_target_properties (${PROJECT_NAME} PROPERTIES PUBLIC_HEADER ${PROJECT_SOURCE_DIR} /libCacheSim/include/libCacheSim.h )
366319
367320configure_file (${PROJECT_SOURCE_DIR} /${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME}.pc @ONLY )
368321configure_file (${PROJECT_SOURCE_DIR} /${PROJECT_NAME}.cmake.in ${CMAKE_CURRENT_BINARY_DIR} /Find${PROJECT_NAME}.cmake @ONLY )
369322
370- # this overwrites the default config.h
371- # configure_file(${PROJECT_SOURCE_DIR}/libCacheSim/include/config.h.in ${PROJECT_SOURCE_DIR}/libCacheSim/include/config.h @ONLY)
323+ # Install configuration
372324install (DIRECTORY ${PROJECT_SOURCE_DIR} /libCacheSim/include/ DESTINATION include)
373325install (FILES ${CMAKE_BINARY_DIR} /${PROJECT_NAME} .pc DESTINATION lib/pkgconfig)
374326install (FILES ${CMAKE_BINARY_DIR} /Find${PROJECT_NAME} .cmake DESTINATION ${CMAKE_ROOT} /Modules/ COMPONENT dev)
@@ -377,7 +329,7 @@ install(TARGETS ${PROJECT_NAME}
377329 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
378330 PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
379331
380- # ############################
332+ # Testing configuration
381333if (ENABLE_TESTS)
382334 include (CTest )
383335 enable_testing ()
0 commit comments